有没有一种简单的方法可以将节点添加到 WinForms .NET TreeView 控件,其中正在添加的新节点插入到正确的索引处,以便整个节点列表按字母顺序排序?结果几乎与TreeView.Sort()
.
我有一个不断增长到几百个节点的 TreeView。用户可以随着它的增长实时查看这个 TreeView。我宁愿只在正确的索引处插入节点,而不是每次添加节点后调用 TreeView.Sort() 。
这可以做到吗?
在 winforms 中,您可以简单地将 TreeView 的.Sorted
属性设置为True
.
当 Sorted 设置为 true 时,TreeNode 对象按其 Text 属性值的字母顺序排序。将大量项目添加到已排序的 TreeView 时,应始终使用 BeginUpdate 和 EndUpdate 来保持性能。当现有节点的文本发生更改时,您必须调用 Sort 来重新排序这些项目。
参考MSDN
为什么不创建继承自TreeView
和的新类TreeNodeCollection
?newTreeView
将使用您的 new TreeNodeCollection
,您可以覆盖 the 的Add()
方法TreeNodeCollection
来执行您的建议。
该方法必须: 1. 找到要插入的正确位置和 2. 插入新节点。
最简单的实现将遍历集合直到thisNode.value<=newNode.value<nextNode.value
. 然后插入之前nextNode.Index
。如果您使用不同的搜索算法,您可能会看到性能提升,具体取决于集合的大小。(想到类似二进制搜索的东西。)
TreeNodeCollection
注意:您也可以在做同样事情的a 上创建一个扩展方法。但是,覆盖该Add()
方法可确保您TreeView
始终排序。AddIntoSorted()
如果在调用之前尚未对扩展方法进行排序,则仅创建扩展方法可能会导致未定义的结果。