Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以编程方式单击节点?_C#_Winforms_Events_Treeview - Fatal编程技术网

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

C# 如何以编程方式单击节点?,c#,winforms,events,treeview,C#,Winforms,Events,Treeview,我希望通过编程模拟在TreeView控件中单击节点。就我所能看到的(某物)而言,没有可单击的方法,我想我需要转到当前选定的节点 因此,我尝试了以下方法: christmasTreeView.SelectedNode. ??? 然而,intellisense并没有给我任何提示,告诉我要调用什么才能在节点上单击鼠标。如何做到这一点?您需要为TreeView.NodeMouseClick使用事件处理程序。 此事件获取了可在EventHandler中调用的参数,如下所示: void MyTreevie

我希望通过编程模拟在TreeView控件中单击节点。就我所能看到的(某物)而言,没有可单击的方法,我想我需要转到当前选定的节点

因此,我尝试了以下方法:

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();