Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TreeView排序行为添加与添加范围_C#_Winforms_Treeview - Fatal编程技术网

C# TreeView排序行为添加与添加范围

C# TreeView排序行为添加与添加范围,c#,winforms,treeview,C#,Winforms,Treeview,我有一张树视图和一张空白表格上的Button。我在树视图中添加了三个节点,分别使用文本“a”、“b”和“c”。TreeView有一个TreeViewNodeSorter,如下所示,它基于节点文本进行排序 单击按钮后,一个文本为“aa”的新节点将添加到树视图中。如果调用Add来添加节点,那么节点的排序顺序现在是“a”、“aa”、“b”、“c”——正如我所期望的那样 如果调用AddRange来添加节点,则顺序为“a”、“b”、“aa”、“c”。造成这种差异的原因是什么 public partial

我有一张树视图和一张空白表格上的Button。我在树视图中添加了三个节点,分别使用文本“a”、“b”和“c”。TreeView有一个TreeViewNodeSorter,如下所示,它基于节点文本进行排序

单击按钮后,一个文本为“aa”的新节点将添加到树视图中。如果调用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);
    }
}

这里有一篇文章解释得很好:

基本上,
.AddRange()
是批量性能版本,并努力使事情变得快速。您可以在
树视图
上调用
.Sort()
,对树进行应有的排序。(或更改文章中提到的
.TreeViewNodeSorter
属性)