TreeView排序行为Add与AddRange
本文关键字:AddRange Add 排序 TreeView | 更新日期: 2023-09-27 18:25:28
我在一个空白表单上有一个TreeView和一个Buttton。我在TreeView中添加了三个节点,分别为文本"a"、"b"answers"c"。TreeView有一个TreeViewNodeSorter,如下所示,它根据节点文本进行排序。
单击该按钮后,一个文本为"aa"的新节点将添加到TreeView中。如果调用Add来添加节点,那么节点的排序顺序现在是"a"、"aa"、"b"、"c"——正如我所期望的那样。
如果调用AddRange来添加节点,则顺序为"a"、"b"、"aa"、"c"。造成这种差异的原因是什么?
public partial class Form1 : Form
{
TreeView treeView = null;
public Form1()
{
InitializeComponent();
treeView = new TreeView();
treeView.TreeViewNodeSorter = new TreeNodeComparer();
treeView.Nodes.Add("a");
treeView.Nodes.Add("b");
treeView.Nodes.Add("c");
Controls.Add(treeView);
Button button = new Button();
button.Text = "Add";
button.Location = new Point(treeView.Location.X, treeView.Location.Y + treeView.Height + 10);
button.Click += button_Click;
Controls.Add(button);
}
void button_Click(object sender, EventArgs e)
{
TreeNode node = new TreeNode();
node.Text = "aa";
//treeView.Nodes.Add(node);
treeView.Nodes.AddRange(new TreeNode[] { node });
}
}
public class TreeNodeComparer : IComparer
{
public int Compare(object x, object y)
{
TreeNode xNode = x as TreeNode;
TreeNode yNode = y as TreeNode;
if (xNode == null || yNode == null)
{
return 0;
}
if (xNode == null)
{
return -1;
}
if (yNode == null)
{
return 1;
}
return xNode.Text.CompareTo(yNode.Text);
}
}
这里有一篇文章很好地解释了这一点:
http://geekswithblogs.net/sdorman/archive/2007/09/21/Add-vs.-AddRange.aspx
基本上,.AddRange()
是批量性能版本,并努力使事情变得快速。之后,您可以在TreeView
上调用.Sort()
,对树进行应有的排序。(或更改文章中提到的.TreeViewNodeSorter
属性)