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