最近在做文件处理系统中,要把最近打开文件显示出来,方便用户使用。网上资料有说,去遍历“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);
}
}

  效果图如下

最新文章

  1. 【Python实战】Pandas:让你像写SQL一样做数据分析(二)
  2. iOS开发UI篇—iPad开发中得modal介绍
  3. dd 生成指定大小文件
  4. Office 2010启动时出现无法验证此应用程序的许可证的解决
  5. 移动web app开发小贴士 收藏有用
  6. 浅谈string
  7. Android adb使用sqlite3对一个数据库进行sql查询
  8. 安卓天天练练(十一)用list绑数据
  9. ldap理论属于概念缩略词
  10. STL非变易算法 - STL算法
  11. tp框架命名空间
  12. Spring 容器可以在自动装配相互协作的 bean 之间的关系,使用autowire属性定义指定自动装配模式。
  13. 服务器上的Git
  14. 音视频 学习&amp;开发&amp;测试 资源
  15. 冒泡排序 最好O(n)平均O(n^2) 选择排序O(n2) 插入排序O(n2)
  16. linux c使用socket进行http 通信,并接收任意大小的http响应(四)
  17. linux下的$0-n作用
  18. loadrunner&#160;脚本开发-调用java&#160;jar文件远程操作Oracle数据库测试
  19. Python3学习策略
  20. Js判断字符的种类

热门文章

  1. Axure学习(一)
  2. centos6.5 yum安装postgresql9.3
  3. Java第12章笔记
  4. 日志审计系统、事件日志审计、syslog审计
  5. Linux运维之shell脚本
  6. TensorFlow实现的激活函数可视化
  7. 860. Lemonade Change
  8. hdu-1394(线段树&amp;逆序数的性质和求法)
  9. 走进JDK(一)------Object
  10. iphone导入照片不显示,不同步怎么整