VDF常見(jiàn)問(wèn)題整理(二十六):用戶如何清空重做堆棧?
VectorDraw Developer Framework(VDF)是一個(gè)用于應(yīng)用程序可視化的圖形引擎庫(kù)。有了VDF提供的功能,您可以輕松地創(chuàng)建、編輯、管理、輸出、輸入和打印2D和3D圖形文件。
VectorDraw Developer Framework試用版下載
點(diǎn)開(kāi)本篇文章,是否對(duì)矢量圖形工具感興趣呢?來(lái)看看最新的矢量圖形工具測(cè)評(píng)吧!點(diǎn)擊此處>>即可直達(dá)哦!
問(wèn):
用戶在執(zhí)行新操作后,如何清空重做堆棧(排除這是一個(gè)重做步驟之后)?
答:
有兩種方法可以實(shí)現(xiàn)此目的:
第一種是每當(dāng)用戶執(zhí)行諸如移動(dòng)夾點(diǎn),添加新實(shí)體之類的操作以及通常觸發(fā)UndoHistory_OnStoreValue事件的所有操作時(shí),第一個(gè)操作都會(huì)擦除堆棧。
第二種方法是在用戶通過(guò)命令行調(diào)用特定命令后擦除重做堆棧。
第一種:
首先獲取此事件:
vdFramedControl1.BaseControl.ActiveDocument.UndoHistory.OnStoreValue += new VectorDraw.Professional.UndoRedo.ModificationHistory.StoreValueEventHandler(UndoHistory_OnStoreValue);
將此函數(shù)添加為事件處理程序:
bool whileRedo = false; void UndoHistory_OnStoreValue(object sender, bool isRedo, object propObject, string propName, object value, ref bool Cancel) { //We use this check to make sure that the new Undo value stored is not coming from a Redo command. if (!isRedo && !whileRedo) vdFramedControl1.BaseControl.ActiveDocument.UndoHistory.ClearRedoStack(); } Also get this event in order to override the functionality of Redo:vdFramedControl1.CommandLine.CommandExecute += new VectorDraw.Professional.vdCommandLine.CommandExecuteEventHandler(CommandLine_CommandExecute); Add this function to handle the above event:void CommandLine_CommandExecute(string commandname, bool isDefaultImplemented, ref bool success) { //Here we override the Redo command in order to set the whileRedo function to true. That way we will know if the OnStoreValue event mentioned above is called due to a Redo function. if (string.Compare(commandname, "redo", true) == 0 || string.Compare(commandname, "r", true) == 0) { success = true; doc.CommandAction.Prompt("\r\n" + commandname); doc.CommandAction.Prompt(null); whileRedo = true; doc.UndoHistory.Redo(); whileRedo = false; doc.Update(); doc.Invalidate(); } }
使用上面的代碼,就將實(shí)現(xiàn)所求操作。每次您修改對(duì)象的屬性,添加新對(duì)象或任何創(chuàng)建撤消值的內(nèi)容時(shí),都會(huì)清除重做堆棧。這樣,用戶添加新項(xiàng)或修改屬性后,您將無(wú)法選擇重做。
第二種:
您還可以使用更靈活的代碼。例如,如果僅在特定命令(行的創(chuàng)建等)之后才需要清除重做堆棧,而在用戶編輯屬性時(shí)則不需要清除重做堆棧,請(qǐng)使用以下代碼。
獲取此事件以覆蓋所需的任何命令的功能:
vdFramedControl1.CommandLine.CommandExecute += new VectorDraw.Professional.vdCommandLine.CommandExecuteEventHandler(CommandLine_CommandExecute); Add this function to handle the above event:void CommandLine_CommandExecute(string commandname, bool isDefaultImplemented, ref bool success) { //Here we override every command after which we want the Redo stack cleared if (string.Compare(commandname, "line", true) == 0 || string.Compare(commandname, "l", true) == 0 || string.Compare(commandname, "rect", true) == 0 || string.Compare(commandname, "move", true) == 0) { //Don’t set success to true, so that the execution of already implemented commands won’t stop after this function! vdFramedControl1.BaseControl.ActiveDocument.UndoHistory.ClearRedoStack(); doc.Update(); doc.Invalidate(); } }
使用上面的代碼,每次您使用line,rect或move命令時(shí),都會(huì)清除重做堆棧。
對(duì)于以上問(wèn)答,如果您有任何的疑惑都可以在評(píng)論區(qū)留言,我們會(huì)及時(shí)回復(fù)。此系列的問(wèn)答教程我們會(huì)持續(xù)更新,如果您感興趣,可以多多關(guān)注本教程。
相關(guān)資料推薦:
點(diǎn)擊此處還有VectorDraw Developer Framework的demo示例等著你來(lái)體驗(yàn)哦!
如果您對(duì)想要購(gòu)買正版授權(quán)VectorDraw Developer Framework(VDF),可以聯(lián)系在線客服>>咨詢相關(guān)問(wèn)題。
關(guān)注慧聚IT微信公眾號(hào) ???,了解產(chǎn)品的最新動(dòng)態(tài)及最新資訊。