Category / Section
How to sort the contextmenu items in WinForms TabbedGroupedMDIManager?
2 mins read
Sort the context menu
We can sort the context menu items in the TabbedMDIManager by handling the BeforePopup event of ContextMenuItem. In this event we are getting the context menu items using ArrayList and perform sorting using CustomComparerItems class which is inherited from ICompare interface. The following code demonstrates the same.
C#
BarItem item = new BarItem(); item.Text = "CustomItem"; BarItem item2 = new BarItem(); item2.Text = "ArrangeItem"; BarItem item3 = new BarItem(); item3.Text = "OrderItem"; Form2 form2 = new Form2(); form2.MdiParent = this; form2.Show(); Form2 form3 = new Form2(); form3.MdiParent = this; form3.Text = "Form3"; form3.Show(); //Add Custom context menu items this.tabbedGroupedMDIManager1.ContextMenuItem.Items.Add(item2); this.tabbedGroupedMDIManager1.ContextMenuItem.Items.Add(item); this.tabbedGroupedMDIManager1.ContextMenuItem.Items.Add(item3); this.tabbedGroupedMDIManager1.ContextMenuItem.BeforePopup += new CancelEventHandler(ContextMenuItem_BeforePopup); void ContextMenuItem_BeforePopup(object sender, CancelEventArgs e) { ArrayList items = new ArrayList(); foreach (object contextItem in this.tabbedGroupedMDIManager1.ContextMenuItem.Items) { items.Add(contextItem); } this.tabbedGroupedMDIManager1.ContextMenuItem.Items.Clear(); //For ContextMenuItem sorting items.Sort(new CustomComparerItems()); foreach (object item in items) { this.tabbedGroupedMDIManager1.ContextMenuItem.Items.Add(item); } } public class CustomComparerItems : IComparer { Comparer compar = new Comparer(System.Globalization.CultureInfo.CurrentCulture); public int Compare(object first, object second) { string item1 = (first as BarItem).Text.ToString(); string item2 = (second as BarItem).Text.ToString(); return compar.Compare(item1, item2); } }
VB
'For Context Menu Sorting AddHandler tabbedGroupedMDIManager1.ContextMenuItem.BeforePopup, AddressOf ContextMenuItem_BeforePopup Dim item As New BarItem() item.Text = "CustomItem" Dim item2 As New BarItem() item2.Text = "ArrangeItem" Dim item3 As New BarItem() item3.Text = "OrderItem" Dim form2 As New Form2() form2.MdiParent = Me form2.Show() Dim form3 As New Form2() form3.MdiParent = Me form3.Text = "Form3" form3.Show() 'Add Custom context menu items Me.tabbedGroupedMDIManager1.ContextMenuItem.Items.Add(item2) Me.tabbedGroupedMDIManager1.ContextMenuItem.Items.Add(item) Me.tabbedGroupedMDIManager1.ContextMenuItem.Items.Add(item3) Private Sub ContextMenuItem_BeforePopup(ByVal sender As Object, ByVal e As CancelEventArgs) Dim items As New ArrayList() For Each contextItem As Object In Me.tabbedGroupedMDIManager1.ContextMenuItem.Items items.Add(contextItem) Next contextItem Me.tabbedGroupedMDIManager1.ContextMenuItem.Items.Clear() 'For ContextMenuItem sorting items.Sort(New CustomComparerItems()) For Each item As Object In items Me.tabbedGroupedMDIManager1.ContextMenuItem.Items.Add(item) Next item End Sub Public Class CustomComparerItems Implements IComparer Private compar As New Comparer(System.Globalization.CultureInfo.CurrentCulture) Public Function Compare(ByVal first As Object, ByVal second As Object) As Integer Implements IComparer.Compare Dim item1 As String = (TryCast(first, BarItem)).Text.ToString() Dim item2 As String = (TryCast(second, BarItem)).Text.ToString() Return compar.Compare(item1, item2) End Function End Class
Screenshot