gpt4 book ai didi

c# - TreeView 排序行为 Add 与 AddRange

转载 作者:行者123 更新时间:2023-11-30 16:51:15 27 4
gpt4 key购买 nike

我在空白表单上有一个 TreeView 和一个按钮。我向 TreeView 添加了三个节点,分别带有文本“a”、“b”和“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 属性)

关于c# - TreeView 排序行为 Add 与 AddRange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34052986/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com