我在C#Windows窗体中有一个TreeView。如果用户选择了一个节点,那么我想要检索下一个节点以及树视图的前一个节点。不要考虑它是兄弟还是其他任何一个。我想要只需立即获取下一个节点以及前一个节点。请指导我解决此问题......
只看到这张图片:
假设用户选择以下情况==>我想要检索这个节点
0 1.Sample Data ==> 1当多个代理商......
1当多个代理商... ===> 2第二个主要...
2第二个主要... ===> 3在这种情况下....
3在这种情况下.... ===> 4 2.目标设置......
依旧.....
如何得到这个...... 请帮帮我......
答案 0 :(得分:2)
使用e.Node.NextNode
和e.Node.PreNode
作为兄弟节点。
修改强>
在你的情况下,或e.Node.NextVisibleNode
和e.Node.PrevVisibleNode
是可见节点。
TreeNode.NextVisibleNode Property
TreeNode.PrevVisibleNode Property
请参阅MSDN了解其他TreeNode
媒体资源:TreeNode Properties
答案 1 :(得分:2)
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];
}
}
答案 2 :(得分:0)
我知道这个问题现在已经有7年了,但是我遇到了同样的问题,所以这是我解决问题的方法:
假设开始是要开始的TreeNode,那么" down"
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;
}
}
}
}
答案 3 :(得分:0)
我认为这段代码非常有效。 NextVisibleNode-解决了问题
if (treeView.SelectedNode != null) {
var currentNode = treeView.SelectedNode;
while(currentNode.NextVisibleNode != null ) {
currentNode = currentNode.NextVisibleNode;
if (currentNode.Checked) { break; }
}
MessageBox.Show("Next checked node is " + currentNode.Text);
}