c# - 在 c# winforms 中填充 TreeView 后对 TreeView 的子节点进行排序

标签 c# winforms sorting treeview

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

enter image description here

正如您猜到的那样,我希望子节点排序(我不希望 HBM\D10 在 HBM\D1 之后)而是我想要:

    HBM\D1
    HBM\D2
    HBM\D3
etc...

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

我正在使用 .NET 4,任何提示都会被应用

好吧,我根据 Thomas 的建议解决了这个问题:

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

最佳答案

您需要创建一个自定义比较器并将其分配给 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();

关于c# - 在 c# winforms 中填充 TreeView 后对 TreeView 的子节点进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5618506/

相关文章:

c# - 多次单击按钮时如何防止应用程序挂起?

winforms - Internet Explorer 9 RC 停止我的 WinForms WebBrowser 控件在编辑模式下工作

linux - En_US 和 en_US 之间的区别?

c# - 我正在尝试使用以下代码片段在 C# 中运行 R 脚本。但是输出会重复

c# - 支持基本类型和可空类型的两种方式可绑定(bind)条目

c# - C#中的SHA1形式.exe文件

c# - 使用 C# 设置 TreeView ForeColor

JavaScript 排序帮助

javascript - 如何编写内置原型(prototype)的替代品?

c# - 并行 Azure CloudBlockBlob 操作崩溃(访问冲突)