首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 使用單一物件實作 Undo/Redo (3) — 示範應用程式完整程式碼實作

     編輯:關於C語言

示範應用:WPF 繪圖程式

支援四操作:插入/刪除/移動/調整大小,兩種幾何圖形:矩形/多邊形,容器:Canvas。

步驟 1-3:識別操作、屬性、建立變更物件

  • 移動 → 保存 Margin;調整大小 → 保存 Width, Height, Margin;插入/刪除 → 保存 UIElement 參考。
  • ActionType enum:Delete=0, Move=1, Resize=2, Insert=3。
  • ChangeRepresentationObject 含 Action, Margin, Width, Height, UIElement。

public enum ActionType { Delete = 0, Move = 1, Resize = 2, Insert = 3 }
public class ChangeRepresentationObject {
    public ActionType Action;
    public Point Margin;
    public double Width;
    public double Height;
    public FrameworkElement UIElement;
}

步驟 4-5:UndoRedo 類別完整實作


public partial class UndoRedo : IUndoRedo {
    private Stack _UndoActionsCollection = new Stack();
    private Stack _RedoActionsCollection = new Stack();

    public void Undo(int level) {
        for (int i = 1; i <= level; i++) {
            if (_UndoActionsCollection.Count == 0) return;
            ChangeRepresentationObject obj = _UndoActionsCollection.Pop();
            // 依 ActionType 執行邏輯,並將反向資訊推入 RedoStack
            // ... 完整程式碼見原文 ...
        }
    }

    public void Redo(int level) {
        for (int i = 1; i <= level; i++) {
            if (_RedoActionsCollection.Count == 0) return;
            ChangeRepresentationObject obj = _RedoActionsCollection.Pop();
            // 依 ActionType 執行邏輯,並將反向資訊推入 UndoStack
            // ... 完整程式碼見原文 ...
        }
    }

    public void InsertObjectforUndoRedo(ChangeRepresentationObject dataobject) {
        _UndoActionsCollection.Push(dataobject);
        _RedoActionsCollection.Clear();
    }
    // ... 輔助方法 PushInUnDoForDelete/Insert/Resize/Move 等 ...
}

專案原始碼附件含完整實作。下一部分將展示命令模式與備忘錄模式實作同一應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved