添加节点时自动排序TreeView

时间:2008-12-24 05:12:27

标签: .net winforms sorting treeview

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

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

可以这样做吗?

2 个答案:

答案 0 :(得分:24)

在winforms中,您只需将TreeView的.Sorted属性设置为True

  

当Sorted设置为true时,   TreeNode对象按顺序排序   按字母顺序排列的文字   财产价值。你应该经常使用   要维护BeginUpdate和EndUpdate   添加大时的性能   已排序的项目数量   树视图。当一个现有的文本   节点已更改,您必须调用Sort to   求助于物品。

参考MSDN

答案 1 :(得分:5)

为什么不创建继承自TreeViewTreeNodeCollection的新类?新TreeView将使用您的新TreeNodeCollection,您可以覆盖Add()的{​​{1}}方法来执行您的建议。

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

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

注意:您也可以在nextNode.Index上创建一个执行相同操作的扩展方法。但是,覆盖TreeNodeCollection方法可确保您的Add() 始终排序。如果在TreeView来电之前尚未对其进行排序,则仅创建扩展方法可能会导致未定义的结果。