我想以编程方式模拟 TreeView 控件中节点上的点击。到目前为止,我看不到可点击的方法(corresponding to other controls),我想我需要选择当前选定的节点。
所以我尝试了以下内容:
christmasTreeView.SelectedNode. ???
然而,intellisense没有给我任何提示,以便点击节点上的clickety-点击。怎么办呢?
答案 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
)。它更接近“模型”类,这意味着它主要关注数据的层次结构。虽然某些表示抽象在Color
,Bounds
,Handle
等类似的属性中泄露,但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
}