2015-12-02 135 views
3

我在一個空白窗體上有一個TreeView和一個Buttton。我將三個節點分別添加到TreeView中,分別爲文本「a」,「b」和「c」。 TreeView具有如下所示的TreeViewNodeSorter,它根據節點文本進行排序。TreeView排序行爲添加與AddRange

當按鈕被點擊時,一個帶有文本「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); 
    } 
} 

回答