The purpose of the MRU menu class is to automate the handling of Most Recently Used files in an application. It has been designed so that you can drop the class into an application that is using a
MenuStrip, tell it when you open a new file, and let it do the rest.
Six years ago, I wrote an article on an MRU menu class for .NET Framework 1.0 (MRU Menu Class). Two and a half frameworks later, I thought that I would redo the article and add some enhancements.
How to Use the MRU Menu Class
Initializing the Class
The MRU class is very simple to use. First, we need to declare a new
MRUlist object to use on our form:
Public WithEvents mruList As CMRmedia.MRUMenu
Now we are ready to initialize the class in the form's
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
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
This is the path to the XML file that will store the MRU list for persistence.
This is the maximum number of items that will be displayed in the MRU menu.
This is the width in characters of the MRU menu items.
This determines if the MRU menu will display a Clear List item for erasing the MRU list.
When the MRU class loads the list from a file, it will remove the files that no longer exist. You can use this option to remove this functionality.
If you are running your application from removable media, you can turn on the option to store the file paths relative to the application directory by enabling this option.
Adding Files to the List
When your application has handled a new file, you can add the file to the MRU list by simply calling the following code:
mruList.AddItem("Full File Path as string")
How do I Handle an MRU Item Being Clicked
So what happens when you click on one of the items in the MRU menu? Well, if it is one of the MRU items, a click event is fired by the class, which you can capture with the following:
Private Sub MruFileClicked(ByVal mruPath As String) Handles mruList.mruItemClick
The event returns the clicked file's full path in the
mruPath variable, so you can do whatever you need with the file.
If Clear List is clicked, the MRU class clears out any files that are currently stored.
And finally, if the More option is clicked, the following window is opened displaying the full list of MRU items available since last being cleared.
So what happens if the class can't perform an action? Well, it fires an error event that you can capture like this:
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")
Points of Interest
It was very interesting to compare my methods from six years ago to today. All in all, this may not be the absolute best solution, but I have used this in many of my applications as it has evolved over the years. The sample code includes documentation to help beginners understand what is happening. I hope you find it helpful.