在Windows操作系统中,任务栏的跳转列表(Jump List)提供了一种便捷的方式来访问最近使用的文档。为了在.NET项目中实现类似的功能,需要一个能够管理最近使用文件(MRU)列表的组件。本文将介绍如何创建并使用这样一个组件,它不仅支持Windows Forms应用程序,还适用于WPF应用程序,并且允许开发者自定义文件历史记录的存储方式。
网络上有许多关于.NET项目中MRU解决方案的示例。本文中,将结合Adib Saad和Rick Strahl的解决方案,创建一个可以直接拖放到表单上的组件。
这个类可以作为组件拖放到表单上,或者作为应用程序中的一个局部实例使用。为了演示代码的工作原理,将重点介绍前者,并描述它如何与局部实例相关联。
将MRUManager.cs文件添加到项目中,并重建项目。对于Windows Forms项目,这应该会在工具箱中放置MRUManager和MenuStripMRUManager组件。
所有MRU类默认使用应用程序设置来存储历史记录。为了使用这个特性,需要为项目配置设置。实际上,需要确保项目有一个从System.Configuration.ApplicationSettingsBase派生的类,并且至少配置了一个设置。
public class MySettings : ApplicationSettingsBase
{
[UserScopedSetting]
public string MRUList
{
get { return (string)(this["MRUList"]); }
set { this["MRUList"] = value; }
}
}
如果只需要MRU并且正在处理与UI的所有交互,可以简单地使用MRUManager。可以将其拖放到表单上,或者在主表单中创建一个实例。它只提供与设置或注册表以及Windows的交互,以维护文件列表。
如果希望类还显示WinForms中的菜单项列表,那么将MenuStripMRUManager拖到表单上。理想情况下,这个表单应该包含用于处理文件操作(打开、保存等)的MenuStrip。
如果希望从Windows的“最近项目”列表中提取项目,必须向MRUManager实例的FileExtensions属性提供有效的扩展名列表。这个列表必须是一个竖线分隔的扩展名列表,不包括点(例如"doc|docx|html|rtf")。
应用程序必须报告所有文件打开操作以维护列表。为此,应用程序必须在每次打开新文件时调用MRUManager实例的AddRecentFile方法。
如果希望维护的文件列表数量多于或少于10项,请更改MaxHistoryCount属性。
在表单的MenuStrip(或WPF窗口中的Menu)中创建一个ToolStripMenuItem,它将托管该菜单列表作为下拉菜单项。
ToolStripMenuItem recentFileMenuItem = new ToolStripMenuItem("Recent Files");
mruManager.RecentFileMenuItem = recentFileMenuItem;
默认情况下,最近文件列表将在末尾有一个用于清除所有MRU条目的菜单项。它默认标题为"Clear List"。这可以通过更改MRUManager实例的ClearListMenuItemText属性来更改。如果想删除这个菜单项,请清除该属性的值。
如果需要手动进行所有这些操作,上述提到的所有属性都是MRUManager类的公共成员。大部分可以在单个构造函数调用中完成。
var mgr = new MenuStripMRUManager(
"doc|docx|html|rtf",
recentFileToolStripMenuItem,
mruManager_RecentFileMenuItemClick,
mruManager_ClearListMenuItemClick,
new RegistryFileListStorage()
);
mgr.ClearListMenuItemText = "Clear my list now";
mgr.MaxHistoryCount = 20;