原創(chuàng)|使用教程|編輯:郝浩|2013-05-24 10:48:00.000|閱讀 435 次
概述:FlowChart.NET是一個通用的流程圖控件,提供了用于創(chuàng)建或編輯圖表的直觀的用戶交互模型。詳解一下通過設(shè)置命令類的子類,來調(diào)用 FlowChart.NET的撤銷功能
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
FlowChart.NET可以成為用戶的應(yīng)用程序的數(shù)據(jù)模型的一部分,對于本地的數(shù)據(jù)可以實現(xiàn)撤銷/重做功能。想要集成程序的撤銷功能到應(yīng)用程序的撤銷機制的話,需要使用到ActionRecorded事件。當(dāng)引發(fā)該事件后,添加相應(yīng)的包裝記錄到來自事件處理程序的應(yīng)用程序的歷史中,Wrapper就會調(diào)用撤銷和重做的UndoManager方法。在這種情況下,就可以確保FlowChart.NET歷史了容量和應(yīng)用程序的是一樣大的。
另一種方法來調(diào)用 FlowChart.NET的撤銷功能可以通過設(shè)置命令類的子類,以及對應(yīng)用程序的數(shù)據(jù)改變創(chuàng)建類。當(dāng)外部關(guān)系圖中發(fā)生了更改時,它可以通過調(diào)用關(guān)系圖的ExecuteCommand 方法來記錄,以及集成到FlowChart.NET的歷史記錄。
當(dāng)你使用復(fù)雜對象來作為標(biāo)記或是在ControlNode 實例中嵌入控件,來設(shè)置命令類的子類時,更改這些對象或控件的操作不能夠檢測到,也不能夠通過FlowChart.NET自動處理。想要集成一個這樣的操作到流程圖的撤銷歷史中,必須創(chuàng)建一個懂地如何進行、 撤消或恢復(fù)操作的命令實例。
命令子類必須是完全可實現(xiàn)執(zhí)行,撤消和重做方法。通過你的子類所呈現(xiàn)出來的操作,通過執(zhí)行流程的ExecuteCommand方法必須要可以實施。ExecuteCommand調(diào)用??執(zhí)行命令作為參數(shù)傳遞,然后將其添加到歷史隊列,通過撤銷管理器撤銷和重做的方法也可以被調(diào)用多次。通常情況下,你可以調(diào)用執(zhí)行來實現(xiàn)重做,但是如果后者比較費時,其結(jié)果狀態(tài)可以保存在實例成員中,以及通過重做來恢復(fù)。
不要直接調(diào)用你類的撤銷和重做方法,只是實現(xiàn)他們,當(dāng)在必要的時候,它們將會通過UndoManager的撤消或重做的方法調(diào)用。
下面的示例顯示了一個簡單的命令方法的實現(xiàn):
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)
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都控件