在c#winforms中填充树视图后对树视图的子节点进行排序

Sae*_*ani 4 c# sorting treeview winforms

我在winforms程序中排序树视图的子节点时遇到问题.我的树视图由一些XML文件填充,它使用xml文件中的内部文本作为节点的Text属性(所以我认为在将它们添加到树视图之前我无法对它们进行排序,或者如果可能的话,因为xml文件是大尺寸我不想浪费这个过程).我程序中的填充树视图如下所示:

在此输入图像描述

你可以猜到我希望子节点排序(我不希望HBM\D10在HBM\D1之后出现)而不是我想:

    HBM\D1
    HBM\D2
    HBM\D3
etc...
Run Code Online (Sandbox Code Playgroud)

我已经尝试过treeView1.Sort()并且还添加了beginUpdate和endUpdate,但我没有suceess :(

我正在使用.NET 4,任何提示都会受到关注

好吧,我用托马斯的建议把它整理出来:

    class NodeSorter : IComparer
{
        public int Compare(object x, object y) 
        {         
            TreeNode tx = (TreeNode)x; 
            TreeNode ty = (TreeNode)y;

            if (tx.Text.Length < ty.Text.Length)
            {
                return -1;
            }

            if (tx.Text.Length > ty.Text.Length)
            {
                return 1;
            }

            return 0;
        } 
}
Run Code Online (Sandbox Code Playgroud)

Tho*_*que 10

您需要创建自定义比较器并将其分配给TreeViewNodeSorter属性:

public class NodeSorter : System.Collections.IComparer
{
    public int Compare(object x, object y)
    {
        TreeNode tx = (TreeNode)x;
        TreeNode ty = (TreeNode)y;

        // Your sorting logic here... return -1 if tx < ty, 1 if tx > ty, 0 otherwise
        ...
    }
}


...

treeView.TreeViewNodeSorter = new NodeSorter();
treeView.Sort();
Run Code Online (Sandbox Code Playgroud)