是否有一种简单的方法可以将节点添加到WinForms .NET TreeView控件中,其中添加的新节点插入到正确的索引中,因此整个节点列表按字母顺序排序?几乎与TreeView.Sort()
具有相同的结果。
我有一个不断增长到几百个节点的TreeView。用户可以在增长时实时查看此TreeView。我更喜欢只在正确的索引处插入节点,而不是每次添加节点后都调用TreeView.Sort()。
可以这样做吗?
答案 0 :(得分:24)
在winforms中,您只需将TreeView的.Sorted
属性设置为True
。
当Sorted设置为true时, TreeNode对象按顺序排序 按字母顺序排列的文字 财产价值。你应该经常使用 要维护BeginUpdate和EndUpdate 添加大时的性能 已排序的项目数量 树视图。当一个现有的文本 节点已更改,您必须调用Sort to 求助于物品。
参考MSDN
答案 1 :(得分:5)
为什么不创建继承自TreeView
和TreeNodeCollection
的新类?新TreeView
将使用您的新TreeNodeCollection
,您可以覆盖Add()
的{{1}}方法来执行您的建议。
该方法必须: 1.找到要插入的正确位置和2.插入新节点。
最简单的实现将遍历集合,直到TreeNodeCollection
。然后在thisNode.value<=newNode.value<nextNode.value
之前插入。如果使用不同的搜索算法,您可以看到性能提升,具体取决于集合的大小。 (想到二进制搜索之类的东西。)
注意:您也可以在nextNode.Index
上创建一个执行相同操作的扩展方法。但是,覆盖TreeNodeCollection
方法可确保您的Add()
始终排序。如果在TreeView
来电之前尚未对其进行排序,则仅创建扩展方法可能会导致未定义的结果。