轉(zhuǎn)帖|使用教程|編輯:龔雪|2021-04-30 10:18:20.827|閱讀 271 次
概述:本文主要介紹在Winform界面菜單中實(shí)現(xiàn)【最近使用的文件】動(dòng)態(tài)菜單的處理,實(shí)現(xiàn)一個(gè)較為常用的功能。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
DevExpress WinForms擁有180+組件和UI庫,能為Windows Forms平臺創(chuàng)建具有影響力的業(yè)務(wù)解決方案。DevExpress WinForms能完美構(gòu)建流暢、美觀且易于使用的應(yīng)用程序,無論是Office風(fēng)格的界面,還是分析處理大批量的業(yè)務(wù)數(shù)據(jù),它都能輕松勝任!
在我們一些和文件處理打交道的系統(tǒng)中,我們往往需要記錄下最近使用的文件,這樣方便用戶快速打開之前瀏覽或者編輯過的文件,這種在很多軟件上很常見,本文主要介紹在Winform界面菜單中實(shí)現(xiàn)【最近使用的文件】動(dòng)態(tài)菜單的處理,實(shí)現(xiàn)一個(gè)較為常用的功能。
這個(gè)功能我們在很多程序上有見過,如在Visual Studio里面,我們可以看到這個(gè)列表的動(dòng)態(tài)處理。
以及在Word工具欄里面,一樣有這樣的實(shí)現(xiàn)
這個(gè)功能主要的處理邏輯就是,我們在打開文件、保存文件、或者另存為其他文件的時(shí)候,把對應(yīng)的文件路徑進(jìn)行記錄存儲,當(dāng)我們打開這個(gè)菜單的時(shí)候,把它們進(jìn)行加載動(dòng)態(tài)生成相關(guān)的菜單即可,一旦我們選擇其中一個(gè)文件,我們就把它們加載到主界面進(jìn)行展示或者編輯即可。
1. 設(shè)計(jì)處理過程
首先我們需要在界面里面添加一個(gè) 菜單的占位符,方便我們以此為基準(zhǔn),加入對應(yīng)的動(dòng)態(tài)菜單,如下設(shè)計(jì)界面所示
剩下的就是代碼的處理了,我們剛才提到,我們需要記錄文件打開,保存、另存為的幾個(gè)操作的文件,然后存儲起來使用,也就是存儲一個(gè)文件路徑和文件標(biāo)題列表了。
這個(gè)存儲我們可以通過系統(tǒng)配置文件的常規(guī)處理實(shí)現(xiàn),先在程序項(xiàng)目解決方案里面找到對應(yīng)的Settigns.settings文件,打開后進(jìn)行添加記錄對象處理,如下所示。
有了這些,那么我們的信息存儲就實(shí)現(xiàn)了第一步了,需要的就是把它們通過代碼進(jìn)行管理起來。
2. 代碼實(shí)現(xiàn)處理過程
有了上面的設(shè)計(jì)處理過程,我們有了一個(gè)固定的菜單可以使用,有了一個(gè)配置對象以及對應(yīng)的屬性可以存儲和加載處理,那么剩下的就是通過代碼把它們之間的關(guān)系聯(lián)系起來,實(shí)現(xiàn)動(dòng)態(tài)文件列表的菜單處理即可。
我們定義一個(gè)類,并添加對應(yīng)的文件數(shù)量大小和文件列表的屬性,用來記錄和配置文件定義的屬性內(nèi)容,以及存儲對應(yīng)的菜單項(xiàng)對象,如下所示。
其中我們需要在文件打開,保存、另存的時(shí)候,做一個(gè)文件列表的記錄處理,因此需要增加一個(gè)函數(shù),用來把最近的文件追加到列表的頂端(最近文件列表),以及裁剪多于指定數(shù)量的記錄,具體操作如下所示。
/// <summary> /// 添加新文件路徑到頂部列表(在打開、保存、另存為操作中) /// </summary> public void AddRecentFile(string filePath) { _fileList.Insert(0, filePath); //從最后位置開始倒著找,如果找到一致名稱,則移除舊記錄 for (int i = _fileList.Count - 1; i > 0; i--) { for (int j = 0; j < i; j++) { if (_fileList[i] == _fileList[j]) { _fileList.RemoveAt(i); break; } } } //最后,僅保留指定的文件列表數(shù)量 for (int bynd = _fileList.Count - 1; bynd > _nMaxFiles - 1; bynd--) { _fileList.RemoveAt(bynd); } UpdateMenu(); }
動(dòng)態(tài)增加菜單的處理,就是根據(jù)這些文件列表進(jìn)行的菜單項(xiàng)處理,先清空舊的記錄,然后添加新紀(jì)錄,并添加對應(yīng)給的事件處理即可。
其中增加一個(gè)【清空列表】的維護(hù)性操作。
當(dāng)然,文件的打開,我們最好用一個(gè)狀態(tài)記錄文件是否編輯過,如果編輯過則應(yīng)該提示用戶是否保存原來的文件。
/// <summary> /// 最近文件法的菜單項(xiàng) /// </summary> void menuItem_Click(object sender, EventArgs e) { if (_bDocumentDirty) { var result = MessageBox.Show("需要保存到 " + DocumentFileName + "嗎?", "提示", MessageBoxButtons.YesNoCancel); if (result == DialogResult.Yes) { FileSave(); } } ToolStripMenuItem item = (ToolStripMenuItem)sender; int pos = item.GetCurrentParent().Items.IndexOf(item); if (pos >= 0 && pos < _fileList.Count) { DocumentFileName = item.Tag.ToString(); FileOpen(); } } /// <summary> /// 清空最近菜單列表的菜單項(xiàng) /// </summary> void clearListItem_Click(object sender, EventArgs e) { _fileList.Clear(); UpdateMenu(); }
其中的菜單項(xiàng)入口,我們應(yīng)該在主程序初始化后把對應(yīng)的菜單項(xiàng)賦值給輔助類即可。
//指定【最近使用的文件】的菜單項(xiàng),方便對文檔列表菜單進(jìn)行動(dòng)態(tài)創(chuàng)建 _fileHandler.RecentFilesMenu = this.menuFile_RecentFiles;
整個(gè)過程在此基本完成了,最后我們看看實(shí)際的效果,符合我們的預(yù)期。
本文轉(zhuǎn)載自:
DevExpress技術(shù)交流群3:700924826 歡迎一起進(jìn)群討論
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: