gpt4 book ai didi

c# - 仅在填充后重新排序 TreeView 节点 [0]

转载 作者:行者123 更新时间:2023-11-30 15:06:41 25 4
gpt4 key购买 nike

我有以下树:

Animals
|
|___Zebra
| |__Head
| |__Arms
| |__Legs
|
|___Monkey
|__Head
|__Arms
|__Legs

每只动物都有一个 ID 号存储在 Tag 字段中,它们的名字在节点的 Name 字段中。我想按下一个显示“按 ID 排序”的按钮,并将上面的“Zebra”变成“14”等, 然后用数字求助。但是,我希望 children 保持头、 ARM 、腿的顺序。当我使用下面的代码时,它起作用了,但它也将头臂腿重新分类为臂、头、腿。我试过 NodeSorter,但没有得到任何不同的结果。我也是 C# 的新手,所以我可能没有正确实现它。 :) 我还使用带有一些额外字段的自定义节点来存储数据和 bool 值。这就是下面的“JacksNode”所指的。

代码如下:

public static void sortByAnimalID(TreeView tv)
{
tv.BeginUpdate();
foreach (TreeNode treeNode in tv.Nodes[0].Nodes)
{
if (((JacksNode)treeNode).IsAnimal)
{
treeNode.Text = Convert.ToString(treeNode.Tag);
treeNode.Name = Convert.ToString(treeNode.Tag);
}
}
tv.Sort();
tv.EndUpdate();
}

关于我做错了什么的任何想法?我在网上搜索了两个星期,对所有 TreeView 文章不知所措。然而,没有一个是这样具体的。谢谢大家的任何建议。

最佳答案

使用 TreeNode.Level 属性来确定如何比较节点属性。像这样:

    private void SortButton_Click(object sender, EventArgs e) {
if (treeView1.TreeViewNodeSorter == null) {
treeView1.TreeViewNodeSorter = new NodeSorter();
}
}
private class NodeSorter : System.Collections.IComparer {
public int Compare(object x, object y) {
TreeNode node1 = (TreeNode)x;
TreeNode node2 = (TreeNode)y;
if (node1.Level == 1) {
return Convert.ToInt32(node1.Tag).CompareTo(Convert.ToInt32(node2.Tag));
}
else {
return node1.Index.CompareTo(node2.Index);
}
}
}

关于c# - 仅在填充后重新排序 TreeView 节点 [0],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7473204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com