最近在做文件處理系統中,要把最近打開文件顯示出來,方便用戶使用。網上資料有說,去遍歷“C:\Documents and Settings\Administrator\Recent”下的最近文檔本。文主要介紹在Winform界面菜單中實現【最近使用的文件】動態菜單的處理,實現一個較為常用的功能。 1 ...
最近在做文件處理系統中,要把最近打開文件顯示出來,方便用戶使用。網上資料有說,去遍歷“C:\Documents and Settings\Administrator\Recent”下的最近文檔本。文主要介紹在Winform界面菜單中實現【最近使用的文件】動態菜單的處理,實現一個較為常用的功能。
1 新建windform項目
在窗體中添加 menuStrip 控制項 ,添加 ‘打開’與 ‘最近文件’
2 打開settings 文件,如下圖添加相關參數
3 代碼處理過程
添加一個FileHandler 類,用戶處理配置文件中的類容熟悉以及菜單欄中的單項對象。代碼如下
using System; using System.Collections.Generic; using System.Collections.Specialized; using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; /******************************************************************* * Copyright (C) 版權所有 * 文件名稱:FileHandler * 命名空間:TestRecentMenu * 創建時間:2018/12/18 10:27:52 * 作 者: wangyonglai * 描 述: * 修改記錄: * 修改人: * 版 本 號:v1.0.0 **********************************************************************/ namespace TestRecentMenu { public class FileHandler { /// <summary> /// 最近文件菜單項 /// </summary> public ToolStripMenuItem RecentFileMenu { get; set; } private StringCollection fileList; private int fileNumbers; public FileHandler() { fileNumbers = Properties.Settings.Default.FileNember; fileList = Properties.Settings.Default.FilePaths; if (fileList == null) { fileList = new StringCollection(); } } /// <summary> /// 更新最近菜單單項 /// </summary> public void UpdateMenu() { if (RecentFileMenu == null) return; int i; //清除當前菜單項 for (i = RecentFileMenu.DropDownItems.Count - 1; i >= 0; i--) { RecentFileMenu.DropDownItems.RemoveAt(i); } for (i = 0; i < fileList.Count; i++) { ToolStripItem menuItem = new ToolStripMenuItem(); menuItem.Text = Path.GetFileName(fileList[i]); menuItem.Tag = fileList[i]; menuItem.Click += menuItem_Click; RecentFileMenu.DropDownItems.Add(menuItem); } } void menuItem_Click(object sender, EventArgs e) { //點擊最近打開菜單項要執行的動作。 } /// <summary> /// 添加最近文件路徑(每次打開文件時,調用該方法) /// </summary> /// <param name="filePath"></param> 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; } } } //最後,僅保留指定的文件列表數量 for (int bynd = fileList.Count - 1; bynd > fileNumbers - 1; bynd--) { fileList.RemoveAt(bynd); } Properties.Settings.Default.FilePaths = fileList; Properties.Settings.Default.Save(); UpdateMenu(); } } }
4 在主界面中調用FileHandler相關函數
FileHandler filehandler; private void Form1_Load(object sender, EventArgs e) { filehandler = new FileHandler(); filehandler.RecentFileMenu = this.最近文件ToolStripMenuItem;//指定 最近文件 的菜單值,方便動態創建文件菜單 filehandler.UpdateMenu(); } private void 打開ToolStripMenuItem_Click(object sender, EventArgs e) { OpenFileDialog fls = new OpenFileDialog(); if (fls.ShowDialog() == System.Windows.Forms.DialogResult.OK) { filehandler.AddRecentFile(fls.FileName); } }
效果圖如下