原創|使用教程|編輯:郝浩|2013-05-24 10:48:00.000|閱讀 435 次
概述:FlowChart.NET是一個通用的流程圖控件,提供了用于創建或編輯圖表的直觀的用戶交互模型。詳解一下通過設置命令類的子類,來調用 FlowChart.NET的撤銷功能
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
FlowChart.NET可以成為用戶的應用程序的數據模型的一部分,對于本地的數據可以實現撤銷/重做功能。想要集成程序的撤銷功能到應用程序的撤銷機制的話,需要使用到ActionRecorded事件。當引發該事件后,添加相應的包裝記錄到來自事件處理程序的應用程序的歷史中,Wrapper就會調用撤銷和重做的UndoManager方法。在這種情況下,就可以確保FlowChart.NET歷史了容量和應用程序的是一樣大的。
另一種方法來調用 FlowChart.NET的撤銷功能可以通過設置命令類的子類,以及對應用程序的數據改變創建類。當外部關系圖中發生了更改時,它可以通過調用關系圖的ExecuteCommand 方法來記錄,以及集成到FlowChart.NET的歷史記錄。
當你使用復雜對象來作為標記或是在ControlNode 實例中嵌入控件,來設置命令類的子類時,更改這些對象或控件的操作不能夠檢測到,也不能夠通過FlowChart.NET自動處理。想要集成一個這樣的操作到流程圖的撤銷歷史中,必須創建一個懂地如何進行、 撤消或恢復操作的命令實例。
命令子類必須是完全可實現執行,撤消和重做方法。通過你的子類所呈現出來的操作,通過執行流程的ExecuteCommand方法必須要可以實施。ExecuteCommand調用??執行命令作為參數傳遞,然后將其添加到歷史隊列,通過撤銷管理器撤銷和重做的方法也可以被調用多次。通常情況下,你可以調用執行來實現重做,但是如果后者比較費時,其結果狀態可以保存在實例成員中,以及通過重做來恢復。
不要直接調用你類的撤銷和重做方法,只是實現他們,當在必要的時候,它們將會通過UndoManager的撤消或重做的方法調用。
下面的示例顯示了一個簡單的命令方法的實現:
C#
public class PersonTag { public string Name; public string Address; // And so on ... } public class AddressChangeCmd : Command { public AddressChangeCmd(PersonTag p, string address) : base("Address change") { this.p = p; this.oldAddress = p.Address; this.newAddress = address; } public override void Execute(bool undoEnabled) { p.Address = newAddress; } public override void Undo() { p.Address = oldAddress; } public override void Redo() { // Undo manager is enabled if Redo is called // so pass true for the undoEnabled argument Execute(true); } private PersonTag p; private string oldAddress; private string newAddress; } ... // Somewhere in later code PersonTag tag = (PersonTag)diagram. ActiveItem.Tag; AddressChangeCmd cc = new AddressChangeCmd(tag, "far far away"); diagram.ExecuteCommand(cc);
Visual Basic
Public Class PersonTag Public Name As String Public Address As String ' And so on ... End Class Public Class AddressChangeCmd Inherits Command Public Sub New(ByVal p As PersonTag, ByVal address As String) MyBase.New("Address change") Me.p = p Me.oldAddress = p.Address Me.newAddress = address End Sub Protected Overrides Sub Execute(ByVal undoEnabled As Boolean) p.Address = newAddress End Sub Protected Overrides Sub Undo() p.Address = oldAddress End Sub Protected Overrides Sub Redo() ' Undo manager is enabled if Redo is called ' so pass true for the undoEnabled argument Execute(True) End Sub Private p As PersonTag Private oldAddress As String Private newAddress As String End Class ... ' Somewhere in later code Dim tag As PersonTag = CType(diagram.ActiveItem.Tag, PersonTag) Dim cc As AddressChangeCmd = New AddressChangeCmd(tag, "far far away") diagram.ExecuteCommand(cc)
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都控件