【问题标题】:TreeView sort behaviour Add versus AddRangeTreeView 排序行为 Add 与 AddRange
【发布时间】:2015-12-02 21:06:26
【问题描述】:

我在空白表单上有一个 TreeView 和一个 Button。我分别用文本“a”、“b”和“c”将三个节点添加到 TreeView。 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);
    }
}

【问题讨论】:

    标签: c# winforms treeview


    【解决方案1】:

    这里有一篇文章很好地解释了事情:

    http://geekswithblogs.net/sdorman/archive/2007/09/21/Add-vs.-AddRange.aspx

    基本上.AddRange() 是批量性能版本,力求让事情变得更快。之后您可以在TreeView 上调用.Sort() 以按应有的方式对树进行排序。 (或如文章中所述更改.TreeViewNodeSorter 属性)

    【讨论】:

      猜你喜欢
      • 2020-08-16
      • 1970-01-01
      • 1970-01-01
      • 2018-01-16
      • 2013-03-26
      • 2018-03-19
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      相关资源
      最近更新 更多