我真的需要以编程方式单击集合中的所有节点,但我看不出如何操作的方式。我最终尝试调用Node_Click事件,但我不知道如何使用参数。
foreach (TreeNode node in treeView1.Nodes)
{
//here I would need to "click" on each node
}
EDITED: 我需要提取TreeNode_After选择。这是因为treeview代表数据库结构,如果你单击节点,它可能有也可能没有子节点(取决于数据库检索的内容)。这个周期应该作为ExpandAll。
答案 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的调用