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