如何在C#中从Treeview的选定节点获取下一个直接节点?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C#中从Treeview的选定节点获取下一个直接节点?相关的知识,希望对你有一定的参考价值。
我在C #Windows窗体中有一个TreeView。如果用户选择了一个节点,那么我想要检索下一个节点以及树视图的前一个节点。不要考虑它是兄弟还是其他任何一个。我想要拿起来立即下一个节点,也是前一个节点。请指导我解决这个问题...
看到这张图:
假设用户选择以下情况==>我想要检索此节点
- 0 1.样本数据==> 1当多个代理人......
- 1当多个代理商... ===> 2第二个主要...
- 2第二个主要... ===> 3在这种情况下......
- 3在这种情况下.... ===> 4 2.Target设置......
等等.....
怎么弄这个...请帮帮我...
答案
使用e.Node.NextNode
和e.Node.PreNode
作为兄弟节点。
编辑
或者e.Node.NextVisibleNode
和e.Node.PrevVisibleNode
在你的情况下为可见节点。
TreeNode.NextVisibleNode Property
TreeNode.PrevVisibleNode Property
有关其他TreeNode
属性,请参阅MSDN:TreeNode Properties
另一答案
TreeView tr = new TreeView();
private void Form1_Load(object sender, EventArgs e)
{
tr.AfterSelect += new TreeViewEventHandler(tr_AfterSelect);
}
void tr_AfterSelect(object sender, TreeViewEventArgs e)
{
TreeNode PrevNode = e.Node.PrevNode;
TreeNode NextNode = e.Node.NextNode;
}
对于这种情况,您可以这样做:
void tr_AfterSelect(object sender, TreeViewEventArgs e)
{
TreeNode NextNode;
if (e.Node.Nodes.Count == 0)
{
NextNode = e.Node.NextNode;
}
else
{
NextNode = e.Node.Nodes[0];
}
}
另一答案
我知道这个问题现在已经有7年了,但是我遇到了同样的问题,所以这是我解决问题的方法:
假设start是TreeNode开始,则“向下”
if (start?.Nodes.Count > 0)
start = start?.Nodes[0]; //If there are childs, select the first
else if (start?.NextNode != null)
start = start?.NextNode; //If there is a sibling, select the sibling
else
{
//In this case, the next node is a sibling of one of the nodes ancestors
if (start?.Parent?.NextNode != null)
start = start?.Parent?.NextNode; //the parents sibling is our next node
else
{
//we go the paths along the parents up, until we can go to the next sibling,
//as long as there exist some parents
while(start.Level != 0)
{
start = start.Parent;
if (start.NextNode != null)
{
start = start.NextNode;
break;
}
}
}
}
以上是关于如何在C#中从Treeview的选定节点获取下一个直接节点?的主要内容,如果未能解决你的问题,请参考以下文章