2011-12-09 46 views
2

排序TreeView节点我写了一个比较器,我想在TreeView的父节点上实现它,但我需要比较的是Node.Tag.ToString()而不是Text。据我看,有没有超载或其他功能使用TreeView.Sort()做到这一点。通过比较theire标签属性

我想知道你是否有办法或解决方法吗?

回答

4

如果你有一个IComparer,它看起来像你可以设置TreeViewNodeSorter属性,然后调用Sort按照你的意愿对节点进行排序。基于该链接的

示例 - 没试过,没有null检查等,但它应该工作:

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 = new NodeSorter();某处您的设置。

+0

是的,但我相信这种类型的节点基于theire'文本'而不是'Tag' –

+0

@ Sean87:如果您在该链接底部的示例中查看'public class NodeSorter',则传递给'IComparer'本身就是'TreeNode',而不仅仅是文本。该示例仍然使用“Text”属性(按长度排序而不是内容),但我没有看到任何理由不应使用“Tag”属性。我可以在一个例子中编辑。 – Rawling

+0

你是对的!我正在传递节点的文本!多么可怜!非常感谢! –