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