最近在做文件處理系統中,要把最近打開文件顯示出來,方便用戶使用。網上資料有說,去遍歷“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);}}
效果圖如下
?