C# 如何以编程方式单击节点?
我希望通过编程模拟在TreeView控件中单击节点。就我所能看到的(某物)而言,没有可单击的方法,我想我需要转到当前选定的节点 因此,我尝试了以下方法:C# 如何以编程方式单击节点?,c#,winforms,events,treeview,C#,Winforms,Events,Treeview,我希望通过编程模拟在TreeView控件中单击节点。就我所能看到的(某物)而言,没有可单击的方法,我想我需要转到当前选定的节点 因此,我尝试了以下方法: christmasTreeView.SelectedNode. ??? 然而,intellisense并没有给我任何提示,告诉我要调用什么才能在节点上单击鼠标。如何做到这一点?您需要为TreeView.NodeMouseClick使用事件处理程序。 此事件获取了可在EventHandler中调用的参数,如下所示: void MyTreevie
christmasTreeView.SelectedNode. ???
然而,intellisense并没有给我任何提示,告诉我要调用什么才能在节点上单击鼠标。如何做到这一点?您需要为TreeView.NodeMouseClick使用事件处理程序。 此事件获取了可在EventHandler中调用的参数,如下所示:
void MyTreeview_NodeMouseClick(object sender,
TreeNodeMouseClickEventArgs e)
{
// do something with e.Node
}
您可以执行以下操作:
// 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();
可能的方法(虽然不是很顺利)
您的主要问题是Windows窗体
树节点
不像树视图
那样从控件
派生(或者,例如,按钮
)。它更接近于“模型”类,这意味着它主要关注数据的层次结构组织。尽管一些表示抽象在属性中泄漏,如Color
、Bounds
、Handle
等,但TreeNode
不知道如何绘制自身,也不知道如何处理单击事件
另一方面,TreeView
是一个实际的控件
,这意味着您可以从中派生并能够覆盖其受保护的OnClick
方法,如中所示
如果要遵循该路径,可以从中创建派生的TreeView
类,并覆盖受保护的OnNodeMouseClick
方法。此方法特定于TreeView
,并在单击某个节点时由其WndProc
方法调用
但是,在阅读了您对其他答案的评论后,似乎这并不是您真正需要完成的目标。您需要将
SelectedNode
设置为您想要模拟的节点,然后单击以获取。所以它应该是这样的christmasTreeView.SelectedNode=nodeyouwanttoselect
。为什么?你想达到什么目标?也许有更好的办法……这不是答案。单击节点时会发生这种情况。它不执行点击。哦,我理解错了,但等一下,他为什么要这样做?我认为他应该给我们提供更多的信息,这样我们就可以给他提供比点击更好的解决方案。正如@t3chb0t所指出的,这是我已经做过的。现在我需要以编程的方式“按需”完成这项工作。至于为什么的问题,我看不出它对如何回答这个问题有什么影响。不过,我不是在寻找解决办法,所以很遗憾,在这种特殊情况下,改变方法是不够的。在这种特殊情况下,改变方法是不够的。我们无法判断这一点,因为你没有向我们透露这一点的真正目的,但如果你认为没有其他办法。。。就这样吧……如果是这样的话,那么你最好使用一个UI测试工具,在那里你可以记录/编程这样的点击。很抱歉不清楚。我需要模拟*单击节点。切换相当于折叠/展开父节点。我需要模拟点击树叶(无折叠/展开)。我需要使用签名私有void treeView1_AfterSelect(对象发送方,treevieventargs eventArgs)启动该方法。@KonradViltersten我编辑了我的答案,尝试一下。嗯。。。不知道我们是否在这里想念对方。在SelectedNode上,似乎没有这样的方法。不过,这些方法存在于christmasTreeView中。但是,调用它们似乎不会触发事件,因为方法private void ChristmasTreeView_AfterSelect(对象发送方,TreeViewEventArgs eventArgs)没有在断点上停止。如果我实际点击一片叶子,它确实会击中要害,不过…@KonradViltersten我看不到我在SelectedNode
上执行方法的位置?顺便说一句,我刚刚创建了一个项目(WinForms),它似乎工作得很好,除非我完全忽略了这个问题?没有必要。我可以用我使用的奇怪代码更新你的答案。如果你觉得合适,就换一个+1表示持久性。这是完美的信息。我没注意到那不是一个控制。你指出了我被误导的地方,你还解释了我是如何被误导的。分析结果是+1。另外,你需要改变你的昵称,伙计。这不适合你,呵呵。没有这样的回复。
private void christmasTreeView_AfterSelect(object sender, TreeViewEventArgs e) {
// awesome
}
TreeNode preSelected = ChristmasTreeView.SelectedNode;
ChristmasTreeView.SelectedNode = null;
ChristmasTreeView.SelectedNode = preSelected;
ChristmasTreeView.Select();