Программно нажать на узел в виде дерева? - PullRequest
3 голосов
/ 30 октября 2009

Мне действительно нужно было бы программно нажимать на все узлы в коллекции, но я не могу понять, как это сделать. Я пытаюсь вызвать событие Node_Click, но не знаю, как использовать аргументы.

foreach (TreeNode node in treeView1.Nodes)
{
    //here I would need to "click" on each node
}

Редакция: Мне нужно поднять TreeNode_After select. Это потому, что древовидная структура представляет структуру БД, и если вы щелкнете по узлу, он может иметь или не иметь дочерние элементы (зависит от того, какую БД извлекает) Этот цикл должен служить ExpandAll.

Ответы [ 4 ]

3 голосов
/ 30 октября 2009

Чтобы каждый узел в дереве был выбран, сделайте это:

 void SelectAllNodes(TreeNodeCollection tnc)
 {
     foreach(TreeNode t in tnc)
     {
        treeView1.SelectedNode = t;
        SelectAllNodes(t.Nodes);
     }
 }

EDIT:
Также стоит отметить, что ваш код:

 foreach (TreeNode node in treeView1.Nodes)
 {
      //here I would need to "click" on each node
 }

Не будет запускаться на каждом узле в дереве, он вернет только узлы на самом верхнем уровне. Поэтому, если у любого из них есть дочерние узлы, они не будут видны вашим foreach выше. Если вы хотите получить КАЖДЫЙ узел во всем дереве, вам нужно будет пройти через них, как я делал в моем примере выше.

1 голос
/ 30 октября 2009

Достигнет ли это того, что вы ищете?

        foreach (TreeNode node in this.treeView1.Nodes)
        {
            this.treeView1.SelectedNode = node;
        }
1 голос
/ 30 октября 2009

Вы можете «подделать» клик, просто передав узел в «подобную обработчику» функцию:

foreach (TreeNode node in treeView1.Nodes)
{
   node_click(node, null)
}

protected void node_click(object sender, System.EventArgs e )
{
    //...Your code here

}
0 голосов
/ 30 октября 2009

Хорошо, у вас есть метод обработчика событий TreeView.NodeMouseClick, определенный и связанный? Если у вас есть этот метод, вы можете просто вызвать его в цикле foreach следующим образом:

foreach (TreeNode node in treeView1.Nodes)
{
    treeView1_NodeMouseClick(node, null);
}

выше этого утверждения, в моем конструкторе, например, у меня есть этот код

treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(treeView1_NodeMouseClick);

И у меня есть небрежный обработчик событий, такой как:

public void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    TreeNode node = sender as TreeNode;
    if (node != null)
        MessageBox.Show(node.Text);
}

Должно быть безопасно отправить null для TreeNodeMouseClickEventArgs, если вы не планируете фактически использовать аргументы событий.

РЕДАКТИРОВАТЬ в ответ на редактирование вопроса:

Похоже, что вы просто должны вызывать свой метод AfterSelect (...) посредством прямого вызова, когда ваш пользователь нажимает кнопку Развернуть все . Итак, если я правильно догадываюсь о вашей архитектуре, вы хотите добавить вызов AfterSelect в обработчике кликов вашей кнопки Развернуть все

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...