[英]How to implement good and efficient undo/redo functionality for a TextBox
[英]How to implement undo functionality?
在我的應用程序中,我想為用戶提供一個小的撤消功能。 用戶沒有多少動作可以撤消。 特別是行動是:
現在我想到了如何實現這一點。 我首先想到的是一個Action類,它是用戶可以采取的3種不同操作的抽象基類。 每次用戶執行這些操作時,都會創建此抽象Action類的子類的新適當實例,並將其插入包含所有操作的列表中。
每當用戶想要撤消某些內容時,該列表將顯示給用戶,並且他可以選擇要撤消的操作。
現在我在想什么必須存儲在這樣的動作對象中:
我不確定這是否足夠。 我還考慮過按時間順序排序,但這應該是必要的,因為列表可以按時間順序保持正確。
還有其他我應該考慮的事情嗎?
你可以做這樣簡單的事情:
Stack<Action> undoStack = new Stack<Action>();
void ChangeColor(Color color)
{
var original = this.Object.Color;
undoStack.Push(() => this.Object.Color = original);
this.Object.Color = color;
}
您應該為要撤消的每個操作實現命令模式 :
一切似乎都是正確的,但我寧願使用堆棧而不是列表。 它在時間順序方面很有用。
對於UNDO功能的正確和經過驗證的實現是命令模式
在向現有項目添加撤消/重做功能時,很難忽略這個Simple-Undo-redo-library-for-Csharp-NET 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.