最近在做文件处理系统中,要把最近打开文件显示出来,方便用户使用。网上资料有说,去遍历“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中菜单动态添加“最近使用文件”的更多相关文章

  1. 通过源码了解ASP.NET MVC 几种Filter的执行过程 在Winform中菜单动态添加“最近使用文件”

    通过源码了解ASP.NET MVC 几种Filter的执行过程   一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神 ...

  2. Asp.net MVC3 中,动态添加filter

    Asp.net MVC3 中,动态添加filter filter是attribute,不支持泛型,传入的参数必须是固定的值.总之很受attribute本身的限制. 发现一篇老外的文章,动态设置filt ...

  3. Winform中的dataGridView添加自动编号

    1.Winform中的dataGridView添加自动编号:http://blog.csdn.net/ohyoyo2014/article/details/38346887 2.如何为datagrid ...

  4. javascript的document中的动态添加标签

    document的高级篇中提供了节点操作的函数,具体包括:获取节点,改变节点,删除节点,替换节点,创建节点,添加节点,克隆节点等函数.我们可以利用这些函数动态改变html的节点. 1.JavaScri ...

  5. 浅谈js中如何动态添加表头/表列/表格内容

    我想很多童鞋用js动态向表格中添加数据很熟悉,而且也觉得非常简单!是的,对于写页面的童鞋来说,最喜欢写查询的页面了,动态向表格绑定数据.用for循环就可以轻松搞定. 如果我们的业务需求有所变化,可能我 ...

  6. Android中如何动态添加碎片

    Android中的开发需要兼容手机和平板,两个方面.这就引入了碎片的概念.(注意:这里用的Fragment强烈建议使用support-v4库中的Fragment) 碎片:是一种可以嵌入在活动当中的UI ...

  7. C#主菜单动态添加子菜单并设置触发事件

    我所使用的是devxepress中的主菜单栏时barsubitem控件,想的是在其能够动态添加子菜单栏并能点击触发事件: /// <summary> /// 创建主按钮的子按钮 /// & ...

  8. Android 动态添加Spinner(.java文件内实现) 实现 改变spinner 内文字属性

    动态添加spinner 控件 Spinner s = new Spinner(this); String []items={"自己定义的要显示的数组"}; my_SpinnerAd ...

  9. 关于解决android4.0系统中菜单无法添加Icon的问题

    在Android4.0系统中,创建菜单Menu,然后通过setIcon方法给菜单添加图标是无效的,图标不会显出来,而之前的系统中是可以显示出来的.这个问题的根本原因在于4.0系统中,涉及到菜单的源码类 ...

随机推荐

  1. idea窗口下方滚动条不明显设置

    在使用idea时,下方的滚动条老是显示不明显,每次点击拖拽都很费劲,在网上找了很多相关设置,最后确定了一个最好的办法解决问题: Shift (上档) +  鼠标滚动,这样就可以横向翻滚了,很方便 此方 ...

  2. Partition Array into Disjoint Intervals LT915

    Given an array A, partition it into two (contiguous) subarrays left and right so that: Every element ...

  3. python Trie树和双数组TRIE树的实现. 拥有3个功能:插入,删除,给前缀智能找到所有能匹配的单词

    #coding=utf- #字典嵌套牛逼,别人写的,这样每一层非常多的东西,搜索就快了,树高26.所以整体搜索一个不关多大的单词表 #还是O(). ''' Python 字典 setdefault() ...

  4. MongDB 配置成本地服务

    一.配置mangodb. 首先现在下来直接安装就好了, 可视化工具可以后面再安装. 在自己安装的目录下面(这个随意做好能够放一块)建立一个data文件, 再在下面建立一个db文件 在cmd中进入到Mo ...

  5. PHP 正则表达式--转(川山甲)

    思维导图    点击下图,可以看具体内容!     介绍          正则表达式,大家在开发中应该是经常用到,现在很多开发语言都有正则表达式的应用,比如javascript,java,.net, ...

  6. Lecture2

    共生矩阵:

  7. Mybatis在oracle数据库中插入数据后返回自增值ID

    1.将id设置成自增序列 CREATE OR REPLACE TRIGGER "DATALIB"."TRIG_USER_ADD" BEFORE INSERT O ...

  8. MongoDB常用命令总结

    查看数据库 show dbs; 选择某个库 use db; 查看库下的表(暂且说成是表,mongodb中称表问文档) show collections; 插入数据 db.table.insert( { ...

  9. jquery的bind()和trigger()

    本文主要介绍JQuery的trigger()和bind()方法. 1.   $(selector).bind(event,data,function)方法为被选元素添加一个或多个事件处理程序,并规定事 ...

  10. 20155205 2016-2017-2 《Java程序设计》第6周学习总结

    20155205 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 在Java中,输入串流代表对象为Java.io.InputStream实例,输出串流 ...