在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系统中,涉及到菜单的源码类 ...
随机推荐
- [JAVA]JAVA章1 数组数据去重
一 利用HashSet进行去重 //定义一个数组:有几个重复项 int[] testarray = {1,2,33,4,2,3,44,5,222,3}; //利用HashSet对数组数据去重 Set& ...
- 【jquery+easyUI】-- $.messager.show 弹框显示
三种基本弹框 1.提示框,一秒停留 $.messager.show({ title: '提示', msg: '修改成功!', showType: 'fade', //设置显示类型 style: { l ...
- 如何烧写BIOS到SD卡里面
针对TINY6410 ADK型号 1.SD卡格式化为FAT32或者FAT格式 2.将SD卡插入USB接口的读卡器,并插在PC的USB口 3.“以管理员身份运行”SD-Flasher.exe(在tiny ...
- openssl 连接 https(nginx)
参考源码路径 demos\ssl #include <stdio.h> #include <string.h> #include <stdlib.h> #incl ...
- flask在其他文件中添加路由
应用文件为:app.py from flask import Flask app = Flask(__name__) @app.route("/") def hello(): re ...
- 新版的Bing Developer Assistant 已发布,去掉了Beta
网址:https://visualstudiogallery.msdn.microsoft.com/a1166718-a2d9-4a48-a5fd-504ff4ad1b65 新加特性: New Vis ...
- android c 读写文件
1.包含头文件 #include<unistd.h>#include<sys/types.h>#include<sys/stat.h>#include<fcn ...
- 整合SPRING CLOUD云服务架构 - 企业分布式微服务云架构构建
整合SPRING CLOUD云服务架构 - 企业分布式微服务云架构构建 1. 介绍 Commonservice-system是一个大型分布式.微服务.面向企业的JavaEE体系快速研发平台,基于模 ...
- 关于上级机构的冲突性测试bug修复
描述: 1.上级机构可以为空. 2.机构添加时,选择了上级机构,在未提交前,另一用户将该机构删除,然后前一用户再提交表单,提示会保存成功,本操作应该保存失败. 思路:在上级机构不为空时,保存前进行查询 ...
- mouseover和mouseout事件的相关元素
在发生mouseover和mouseout事件时,还会涉及更多的元素,这两个事件都会涉及把鼠标指针从一个元素的边界之内移动到另一个元素的边界之内.对mouseover事件而言,事件的主目标获得光标元素 ...