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);
}
}