在Winform中菜单动态添加“最近使用文件”
最近在做文件处理系统中,要把最近打开文件显示出来,方便用户使用。网上资料有说,去遍历“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);
}
}
效果图如下

在Winform中菜单动态添加“最近使用文件”的更多相关文章
- 通过源码了解ASP.NET MVC 几种Filter的执行过程 在Winform中菜单动态添加“最近使用文件”
通过源码了解ASP.NET MVC 几种Filter的执行过程 一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神 ...
- Asp.net MVC3 中,动态添加filter
Asp.net MVC3 中,动态添加filter filter是attribute,不支持泛型,传入的参数必须是固定的值.总之很受attribute本身的限制. 发现一篇老外的文章,动态设置filt ...
- Winform中的dataGridView添加自动编号
1.Winform中的dataGridView添加自动编号:http://blog.csdn.net/ohyoyo2014/article/details/38346887 2.如何为datagrid ...
- javascript的document中的动态添加标签
document的高级篇中提供了节点操作的函数,具体包括:获取节点,改变节点,删除节点,替换节点,创建节点,添加节点,克隆节点等函数.我们可以利用这些函数动态改变html的节点. 1.JavaScri ...
- 浅谈js中如何动态添加表头/表列/表格内容
我想很多童鞋用js动态向表格中添加数据很熟悉,而且也觉得非常简单!是的,对于写页面的童鞋来说,最喜欢写查询的页面了,动态向表格绑定数据.用for循环就可以轻松搞定. 如果我们的业务需求有所变化,可能我 ...
- Android中如何动态添加碎片
Android中的开发需要兼容手机和平板,两个方面.这就引入了碎片的概念.(注意:这里用的Fragment强烈建议使用support-v4库中的Fragment) 碎片:是一种可以嵌入在活动当中的UI ...
- C#主菜单动态添加子菜单并设置触发事件
我所使用的是devxepress中的主菜单栏时barsubitem控件,想的是在其能够动态添加子菜单栏并能点击触发事件: /// <summary> /// 创建主按钮的子按钮 /// & ...
- Android 动态添加Spinner(.java文件内实现) 实现 改变spinner 内文字属性
动态添加spinner 控件 Spinner s = new Spinner(this); String []items={"自己定义的要显示的数组"}; my_SpinnerAd ...
- 关于解决android4.0系统中菜单无法添加Icon的问题
在Android4.0系统中,创建菜单Menu,然后通过setIcon方法给菜单添加图标是无效的,图标不会显出来,而之前的系统中是可以显示出来的.这个问题的根本原因在于4.0系统中,涉及到菜单的源码类 ...
随机推荐
- DataTable表连接
public static System.Data.DataTable TableJoin(System.Data.DataTable dt, System.Data.DataTable dtDeta ...
- HTTP协议是什么
1.http全称Hypertext Trsnsfer Protocol超文本传输协议 2.最初发明是用来在浏览器和web服务器之间传输超文本信息的 3.泛义上属于应用层的协议 ,很多其他应用(比如 ...
- oracle迁移
#导出scott的数据,排除 table_a table_b expdp system/password schemas=scott directory=datadir dumpfile=scott_ ...
- mysql.lib 的使用
一 说明 mysql.lib 提供了很多方便的操作,同时结合 vector 使用十分方便. 二 使用 1 声明需要用到的变量 static MYSQL s_mysql[DATABASE ...
- Hadoop3集群搭建之——hive添加自定义函数UDTF (一行输入,多行输出)
上篇: Hadoop3集群搭建之——虚拟机安装 Hadoop3集群搭建之——安装hadoop,配置环境 Hadoop3集群搭建之——配置ntp服务 Hadoop3集群搭建之——hive安装 Hadoo ...
- js 判断 undefined,单选 以及下拉框选中状态
name = $(this).attr("title"); if(typeof(name) == 'undefined'){ alert(1); } typeof 函数 radio ...
- Tomcat架构解析(四)-----Coyote、HTTP、AJP、HTTP2等协议
Connector是Tomcat中非常重要的一个组成部分,说白了,就是如何从客户端获取到相应的请求信息.这部分主要包括的难点有这样几个部分: 1.客户端与服务端的协议 客户端与服务端的协议是多种多样的 ...
- Java翻转数组的方法
java的api没用翻转数组的工具类,只能自己写了. int [] testIntArr = {1,2,3}; //翻转数组 for (int i = 0; i < testIntArr.len ...
- Ubuntu 16.04 安装 postgresql 9.3
1.Ctrl+Alt+t 打开终端 2.输入:wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo a ...
- denyhost安装脚本
#!/bin/bashDENYHOSTS=DenyHosts-2.6.tar.gzDENYHOSTS_VERSION=DenyHosts-2.6DENYHOSTS_URL=http://192.168 ...