当前位置:  开发笔记 > 开发工具 > 正文

添加节点时自动排序TreeView

如何解决《添加节点时自动排序TreeView》经验,为你挑选了2个好方法。

有没有一种简单的方法可以将节点添加到WinForms .NET TreeView控件中,其中添加的新节点插入到正确的索引中,因此整个节点列表按字母顺序排序?几乎有相同的结果TreeView.Sort().

我有一个TreeView,它不断增长到几百个节点.用户可以在增长时实时查看此TreeView.我更喜欢只在正确的索引处插入节点,而不是每次添加节点后都调用TreeView.Sort().

可以这样做吗?



1> Mitch Wheat..:

在的WinForms,你可以简单地设置TreeView的.Sorted属性True.

当Sorted设置为true时,TreeNode对象按其Text属性值按字母顺序排序.在向排序的TreeView添加大量项目时,应始终使用BeginUpdate和EndUpdate来保持性能.更改现有节点的文本时,必须调用"排序"以求助于项目.

参考MSDN


有趣的是(至少对我来说)是.Sorted属性不会出现在TreeView的VS属性列表中,也不会出现在Intellisense中.也许这是一种疏忽.正如你所指出的那样,MSDN文档清楚地提到了它,但很多时候我倾向于"点击点密钥"来访问属性,然后检查文档,如果我没有看到我正在寻找的东西.我最初忽略了Sorted属性,它确实对列表的排序效率产生了影响.最初将.Sorted设置为true要比之后调用Sort()快得多.
如果要设置分拣机,请使用http://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.treeviewnodesorter.aspx

2> lc...:

为什么不创建继承自TreeView和的新类TreeNodeCollection?新TreeView会使用新的TreeNodeCollection,你可以覆盖Add()的方法TreeNodeCollection做你所建议.

该方法必须:1.找到要插入的正确位置和2.插入新节点.

最琐碎的实现将遍历集合,直到thisNode.value<=newNode.value.然后插入之前nextNode.Index.如果使用不同的搜索算法,您可以看到性能提升,具体取决于集合的大小.(想到二进制搜索之类的东西.)

注意:您也可以只创建一个TreeNodeCollection执行相同操作的扩展方法.然而,重写Add()方法确保您TreeView总是排序.如果在AddIntoSorted()调用之前尚未对排序方法进行排序,则仅创建扩展方法可能会导致未定义的结果.


排序.如果在
@DarrenHale很有意思.而且很烦人,因为我猜你必须重新发明轮子然后让你的新`TreeView`使用新的集合.谢谢你的单挑.
推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有