以编程方式单击treeview中的节点?

时间:2009-10-30 15:17:57

标签: c# winforms treeview

我真的需要以编程方式单击集合中的所有节点,但我看不出如何操作的方式。我最终尝试调用Node_Click事件,但我不知道如何使用参数。

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

EDITED: 我需要提取TreeNode_After选择。这是因为treeview代表数据库结构,如果你单击节点,它可能有也可能没有子节点(取决于数据库检索的内容)。这个周期应该作为ExpandAll。

4 个答案:

答案 0 :(得分:3)

要使树中的每个节点都被选中,请执行以下操作:

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

修改
值得注意的是你的代码:

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

不会在树中的每个节点上触发,它只会返回最上层的节点。因此,如果他们中的任何一个有子节点,他们不会被你的foreach看到。如果你想在整个树中获得每个节点,你需要通过它们进行递归,就像我在上面的例子中所做的那样。

答案 1 :(得分:1)

只需将节点传递给“类似处理程序”的函数,就可以“伪造”点击:

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

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

}

答案 2 :(得分:1)

这会实现你想要的吗?

        foreach (TreeNode node in this.treeView1.Nodes)
        {
            this.treeView1.SelectedNode = node;
        }

答案 3 :(得分:0)

那么,您是否已定义并连接了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的调用