【发布时间】:2021-04-05 06:53:24
【问题描述】:
我有一个使用AfterSelect 事件触发的事件,它工作得很好,但是如果用户选中或取消选中此或树中任何节点的复选框,我不希望此事件触发。或者,该事件可以触发,但是我需要知道事件内部是否由于选中或取消选中复选框而触发它。我尝试使用 NodeMouseClick,但得到了相同的不需要的结果,我还尝试使用 BeforeCheck 删除事件处理程序并使用 AfterCheck 将其添加回来,如下所示:
private void MyTree_BeforeCheck(object sender, TreeViewCancelEventArgs e)
{
this.MyTree.AfterSelect -= new System.Windows.Forms.TreeViewEventHandler(this.MyTree_AfterSelect);
}
private void MyTree_AfterCheck(object sender, TreeViewEventArgs e)
{
this.MyTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.MyTree_AfterSelect);
}
private void MyTree_AfterSelect(object sender, TreeViewEventArgs e)
{
ShowMyInfo(e.Node);
}
但 AfterSelect 事件仍会触发。
我不能依赖AfterCheck,因为如果您只是选择节点,它就不会触发。我也不能依赖检查 e.Node.Selected == true,因为节点可能已经被检查,如果节点实际上是故意选择的,我希望事件触发。
是否有任何我可以使用的事件处理程序,它只会在节点被选中,而不是被选中或未被选中时触发,或者我可以通过任何方式检测刚刚被选中的节点是否被选中或取消选中。
将 Visual Studio 2019 与 C# WinForms .NET Framework 应用程序结合使用。
【问题讨论】:
-
IIRC,
AfterSelect在用户选中/取消选中节点时不会引发。仅当/当单击节点时,而不是 CheckBox。 -
正如吉米所说。这永远不会发生,除非您有一些代码选择节点,无论它是否被选中。就像在
MouseClick或NodeMouseClick或其他地方选择一个节点一样。现在,检查AfterSelect事件中的TreeViewEventArgs.Action 属性和return;是否返回TreeViewAction.Unknown,看看情况如何。