C# 通过比较树视图节点的标记属性对其进行排序

C# 通过比较树视图节点的标记属性对其进行排序,c#,winforms,treeview,treenode,C#,Winforms,Treeview,Treenode,我编写了一个比较器,我想在树视图的父节点上实现它,但我需要比较的是节点.Tag.ToString(),而不是它们的文本。据我所知,使用TreeView.Sort()没有重载或其他函数来执行此操作 我想知道您是否想到了一种方法或解决方法?如果您有一个IComparer,那么您可以将属性设置为它,然后调用Sort以按照您的意愿对节点进行排序 基于该链接的示例-未尝试、无空检查等,但应能正常工作: public class NodeSorter : IComparer { public int

我编写了一个比较器,我想在
树视图的父节点上实现它,但我需要比较的是
节点.Tag.ToString()
,而不是它们的
文本。据我所知,使用
TreeView.Sort()
没有重载或其他函数来执行此操作


我想知道您是否想到了一种方法或解决方法?

如果您有一个IComparer,那么您可以将属性设置为它,然后调用Sort以按照您的意愿对节点进行排序

基于该链接的示例-未尝试、无空检查等,但应能正常工作:

public class NodeSorter : IComparer
{
    public int Compare(object x, object y)
    {
        TreeNode tx = x as TreeNode;
        TreeNode ty = y as TreeNode;
        return string.Compare(tx.Tag.ToString(), ty.Tag.ToString());
    }
}

然后
treeView1.TreeViewNodeSorter=newnodesorter()
在您的设置中的某个位置。

是的,但我认为这种节点排序是基于它们的
文本
而不是
标记
@Sean87:如果您查看示例中链接底部的
公共类节点排序器
,传递给
IComparer
的对象是
TreeNode
s本身,而不仅仅是文本。该示例仍然使用
文本
属性(按长度而不是内容排序),但我看不出有任何理由不使用
标记
属性。我可能会在一个例子中编辑。你是对的!我正在传递节点的文本!真可怜!谢谢!