如何以编程方式单击节点?

时间:2014-12-11 10:14:24

标签: c# winforms events treeview

我想以编程方式模拟 TreeView 控件中节点上的点击。到目前为止,我看不到可点击的方法(corresponding to other controls),我想我需要选择当前选定的节点。

所以我尝试了以下内容:

christmasTreeView.SelectedNode. ???

然而,intellisense没有给我任何提示,以便点击节点上的clickety-点击。怎么办呢?

3 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

// find the node you want to select and make it the SelectedNode
christmasTreeView.SelectedNode = christmasTreeView.Nodes[1]; // <-- the index you need
// Now trigger a select
christmasTreeView.Select();
// or
//christmasTreeView.Focus();

这将触发:

private void christmasTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
   // awesome
}

可能的方法(虽然不是很顺利)。

TreeNode preSelected = ChristmasTreeView.SelectedNode;
ChristmasTreeView.SelectedNode = null;
ChristmasTreeView.SelectedNode = preSelected;
ChristmasTreeView.Select();

答案 1 :(得分:1)

您的主要问题是Windows窗体TreeNode不是来自Control,而是TreeView(或者,例如,Button)。它更接近“模型”类,这意味着它主要关注数据的层次结构。虽然某些表示抽象在ColorBoundsHandle等类似的属性中泄露,但TreeNode不知道如何绘制自己,也不知道如何处理点击活动。

另一方面,TreeView是实际Control,这意味着您可以从中派生并能够覆盖其受保护的OnClick方法,如{{3 }}

如果要遵循该路径,可以从中创建派生的TreeView类,并覆盖受保护的OnNodeMouseClick方法。此方法特定于TreeView,并在单击某个节点时由其WndProc方法调用。

但是在阅读了您对其他答案的评论之后,似乎这不是您真正需要做的事情来实现目标。

答案 2 :(得分:0)

您需要为TreeView.NodeMouseClick使用事件处理程序。 此事件有参数,您可以在您的EventHandler中调用,如下所示:

void MyTreeview_NodeMouseClick(object sender,  
TreeNodeMouseClickEventArgs e)
{
// do something with e.Node
}