How to sort items in ToolStripItemCollection?
Since ToolStripItemCollection
has no "Sort"-Function, you have to listen on changes and write your own sort-method:
Private Sub ResortToolStripItemCollection(coll As ToolStripItemCollection)
Dim oAList As New System.Collections.ArrayList(coll)
oAList.Sort(new ToolStripItemComparer())
coll.Clear()
For Each oItem As ToolStripItem In oAList
coll.Add(oItem)
Next
End Sub
Private Class ToolStripItemComparer Implements System.Collections.IComparer
Public Function Compare(x As Object, y As Object) As Integer Implements System.Collections.IComparer.Compare
Dim oItem1 As ToolStripItem = DirectCast(x, ToolStripItem)
Dim oItem2 As ToolStripItem = DirectCast(y, ToolStripItem)
Return String.Compare(oItem1.Text,oItem2.Text,True)
End Function
End Class
You have to use your own comparer (https://docs.microsoft.com/en-us/dotnet/api/system.collections.arraylist.sort)
This post was tagged as c# so I converted it based on SpeziFish's answer. Thanks!
private void ResortToolStripItemCollection(ToolStripItemCollection coll)
{
System.Collections.ArrayList oAList = new System.Collections.ArrayList(coll);
oAList.Sort(new ToolStripItemComparer());
coll.Clear();
foreach (ToolStripItem oItem in oAList)
{
coll.Add(oItem);
}
}
public class ToolStripItemComparer : System.Collections.IComparer
{
public int Compare(object x, object y)
{
ToolStripItem oItem1 = (ToolStripItem)x;
ToolStripItem oItem2 = (ToolStripItem)y;
return string.Compare(oItem1.Text, oItem2.Text, true);
}
}