如何在C#中从Treeview的选定节点获取下一个直接节点?

时间:2011-06-15 09:24:52

标签: c# winforms c#-4.0 treeview

我在C#Windows窗体中有一个TreeView。如果用户选择了一个节点,那么我想要检索下一个节点以及树视图的前一个节点。不要考虑它是兄弟还是其他任何一个。我想要只需立即获取下一个节点以及前一个节点。请指导我解决此问题......

只看到这张图片:

enter image description here

假设用户选择以下情况==>我想要检索这个节点

  1. 0 1.Sample Data ==> 1当多个代理商......

  2. 1当多个代理商... ===> 2第二个主要...

  3. 2第二个主要... ===> 3在这种情况下....

  4. 3在这种情况下.... ===> 4 2.目标设置......

  5. 依旧.....

    如何得到这个...... 请帮帮我......

4 个答案:

答案 0 :(得分:2)

使用e.Node.NextNodee.Node.PreNode作为兄弟节点。

TreeNode.NextNode Property

TreeNode.PrevNode Property

修改

在你的情况下,

e.Node.NextVisibleNodee.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);
}