Как получить следующий непосредственный узел из выбранного узла TreeView в C #? - PullRequest
0 голосов
/ 15 июня 2011

У меня есть TreeView в C # Windows Form. Если пользователь выбрал один узел, то я хочу получить ближайший следующий узел, а также непосредственно предыдущий узел древовидной структуры. просто выберите ближайший следующий узел, а также непосредственно предыдущий узел. Пожалуйста, подскажите мне, как выйти из этой проблемы ...

просто посмотрите эту картинку:

enter image description here

Предположим, пользователь выбирает следующий регистр ==> Я хочу получить этот узел

  1. 0 1. Пример данных ==> 1 Когда несколько агентов ...

  2. 1 Когда несколько агентов ... ===> 2 Второй мажор ...

  3. 2 Второй майор ... ===> 3 В данном случае ....

  4. 3 В этом случае .... ===> 4 2.Настройка цели ...

и так далее .....

Как это получить ... Пожалуйста, помогите мне ...

Ответы [ 3 ]

2 голосов
/ 15 июня 2011
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 голосов
/ 15 июня 2011

используйте e.Node.NextNode и e.Node.PreNode для узла-брата.

TreeNode.NextNode Свойство

TreeNode.PrevNode Свойство

EDIT

или e.Node.NextVisibleNode и e.Node.PrevVisibleNode в вашем случае для видимого узла.

Свойство TreeNode.NextVisibleNode

TreeNode.PrevVisibleNode Свойство

Пожалуйста, обратитесь к MSDN для других TreeNode свойств: TreeNode Properties

0 голосов
/ 26 мая 2018

Я знаю, что этому вопросу уже 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;
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...