如何在ToolStripItemCollection中对项目进行排序?

我通过以下方式动态地将字符串(项)添加到ToolStripItemCollection:

Dim onClickHandler As System.EventHandler = New System.EventHandler(AddressOf Symbol_Click) Dim item As New ToolStripMenuItem(newSymbol, Nothing, onClickHandler) SomeToolStripMenuItem.DropDownItems.Add(item) 

因此,这些项目不会一次性添加,而是在整个程序会话中基于外部触发器逐个添加。 我想在每次添加新项目时对下拉列表进行排序。 我有什么选择来实现这一目标?

由于ToolStripItemCollection没有“Sort”函数,因此您必须监听更改并编写自己的排序方法:

 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 

你必须使用自己的比较器( http://msdn.microsoft.com/en-us/library/0e743hdt.aspx

这篇文章被标记为c#所以我根据SpeziFish的答案进行了转换。 谢谢!

 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); } } 

如果我们需要在ToolStripItemCollection对项进行排序,我们可以使用以下内容:

 ItemCollection.OfType().OrderBy(x => x.Text).ToArray();