65.9K
CodeProject 正在变化。 阅读更多。
Home

MRU 菜单类再探

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (14投票s)

2010 年 6 月 19 日

GPL3

3分钟阅读

viewsIcon

32928

downloadIcon

803

用于自动处理 MenuStrip 中最近使用文件 (MRU) 的类。

Screen1.png

引言

MRU 菜单类的目的是在应用程序中自动处理最近使用文件。它的设计目的是让您将该类放入使用 MenuStrip 的应用程序中,告诉它何时打开一个新文件,然后让它处理其余的事情。

背景

六年前,我写了一篇关于 .NET Framework 1.0 的 MRU 菜单类的文章 (MRU 菜单类)。在又过了两个半框架之后,我决定重新编写这篇文章并添加一些增强功能。

如何使用 MRU 菜单类

初始化类

MRU 类非常简单易用。首先,我们需要声明一个新的 MRUlist 对象,以便在我们的表单上使用

Public WithEvents mruList As CMRmedia.MRUMenu

现在我们准备好在表单的 Load 事件中初始化该类

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    'Initialize MRU list and associate the MenuItem to use as the Recent Files menu
    mruList = New CMRmedia.MRUMenu(RecentToolStripMenuItem, Me)

    mruList.FileName = "x:\Path\To\My\File.xml"
    mruList.MaxItems = 3
    mruList.Width = 50
    mruList.ShowClearRecent() = True
    mruList.Validate = False
    mruList.StoreRelativePaths = True

    'Loads the MRU list for persisted file if it exists
    mruList.Load()
End Sub
  • FileName
  • 这是将存储用于持久化的 MRU 列表的 XML 文件的路径。

  • MaxItems
  • 这是将显示在 MRU 菜单中的最大项目数。

  • 宽度
  • 这是 MRU 菜单项的字符宽度。

  • ShowClearRecent
  • 这确定 MRU 菜单是否会显示一个“清除列表”项目以擦除 MRU 列表。

  • Validate
  • 当 MRU 类从文件中加载列表时,它将删除不再存在的文件。您可以使用此选项删除此功能。

  • StoreRelativePaths
  • 如果您从可移动介质运行您的应用程序,您可以通过启用此选项来打开选项,以存储相对于应用程序目录的文件路径。

将文件添加到列表

当您的应用程序处理了一个新文件时,您可以通过简单地调用以下代码将该文件添加到 MRU 列表中

mruList.AddItem("Full File Path as string")

如何处理被点击的 MRU 项目

那么,当您点击 MRU 菜单中的某个项目时会发生什么?嗯,如果它是 MRU 项目之一,该类会触发一个点击事件,您可以使用以下方法捕获该事件

Private Sub MruFileClicked(ByVal mruPath As String) Handles mruList.mruItemClick
    MsgBox(mruPath)
End Sub

该事件在 mruPath 变量中返回被点击文件的完整路径,因此您可以对该文件执行任何您需要的操作。

如果单击了清除列表,MRU 类将清除当前存储的任何文件。

最后,如果单击了更多选项,将打开以下窗口,显示自上次清除以来可用的 MRU 项目的完整列表。

Screen2.png

错误处理

那么,如果该类无法执行操作会发生什么?嗯,它会触发一个错误事件,您可以这样捕获

Private Sub MruError(ByVal ex As MruException) Handles mruList.MruError
    Dim str As String = "Error: " & ex.ErrorType.ToString & vbCr
    str += "Message: " & ex.message & vbCr
    str += "Inner Exception: " & ex.innerException
    MsgBox(str, MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, "MRU Menu Error")
End Sub

关注点

将我六年前的方法与今天的方法进行比较非常有趣。总而言之,这可能不是绝对最佳的解决方案,但在这些年来,我已经在我的许多应用程序中使用过它。示例代码包括文档,以帮助初学者了解正在发生的事情。我希望它对您有所帮助。

历史

© . All rights reserved.