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本身,而不仅仅是文本。该示例仍然使用文本
属性(按长度而不是内容排序),但我看不出有任何理由不使用标记
属性。我可能会在一个例子中编辑。你是对的!我正在传递节点的文本!真可怜!谢谢!