Visual_Basic 板


LINE

※ 引述《rikarika (rika￾ ￾N￾ ￾ )》之銘言: : 我想做一個記事本 : 可是不知道"復原"的部分要怎麼做耶@@ : 直接接收^Z 好像不成功 : 可以麻煩大家幫幫忙嗎?:) 我來回一下這個好老的post. 因為恰好最近工作有做類似的內容. (而且我覺得學了並使用了VB的人做起系統似乎就是跟著IDE那一套, 比較少自己設計真正符合需要的系統規模. 大家是不是也覺得如此?) 我要做個編輯軟體,其中有個功能是Ctrl+Z要退回上一步. 基本上要儲存操作步驟,就要先定義何謂使用者操作步驟,通常會是一個結構, 但是若用VB6做個使用者自訂type有點麻煩,尤其是想把這個UDT當作某個函數的 返回類型. 所以定義成class也不錯. 定義了使用者操作步驟之後,接著就要理解 一組能幫你紀錄操作動作,並且接受你退回上一步的那個東西,不是stack就是queue. 所以我的系統中有個歷史紀錄的結構是HistElement.cls 'Histelement.cls Option Explicit private my_action as MyAction private page_applied as Integer Public Sub Make(Action as MyAction, Page as Integer) my_action = Action page_applied = Page End Sub 然後歷史紀錄是History.cls 'History.cls Option Explicit private my_list as Collection private my_step as Long Public Sub Add(History as HistElement) Dim i as Long For i = my_step + 1 To my_list.Count my_list.Remove my_step + 1 Next i my_list.Add History my_step = my_step + 1 End Sub Public Sub Remove(N as Long) ... my_step = my_step - 1 Public Sub Clear() Dim i as Long For i = 1 To my_list my_list.Remove 1 Next i my_step = 0 ... Public Function Count() As Long Count = my_step End Function Public Sub RollBack() ... Public Sub GoForward() ... Public Sub Apply(Step as Long, TargetControl as Control) Dim history As HistElement Set history = my_list(Step) TargetControl.Flip history.Page TargetControl.Do history.Action ... 這樣應該很好理解,歷史紀錄有可能是回溯到前幾個狀態,此時如果再Add一些 HistElement,就會把回溯位置之後的一些紀錄洗掉. 然後,系統要根據有效的歷史紀錄表達出目前所看得到的編輯狀態, 基本上就是在呈現的技巧上. 首先系統要顯示所處理的資料或檔案的最原始狀態, 譬如一套影像編輯軟體,最開始是載入原本指定修改的那張圖. 接著,是套上歷史紀錄. 從歷史紀錄的起頭開始,依序讓每一個HistElement所代表的指令生效. 所以,系統的主要內容區的呈現,如果寫成一個Show函數,就是這樣: Public Sub Show(ContentPath as String) Dim i as Long ContentPanel.Src = ContentPath ContentPanel.Show For i = 1 to UserActionHistory.Count UserActionHistory.Apply i, ContentPanel Next i ... 因此History.cls會有個Apply函數,如上所述. --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.160.114.218
1F:→ yauhh:至於Ctrl+Z按鍵,在功能表中設定即可. 01/14 00:00
2F:推 a60301:推用心 10/21 01:24







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP