使用C#在Windows窗体应用程序中正确使用OnClick与MouseClick事件

我正在开发一个自定义控件,并意识到我的代码正在运行两次。 这不是一个很大的问题(它只是一个Focus方法调用)。 但是,我想了解它。

从阅读MSDN描述中点击| onclick事件 ,它声明:

当用户在对象上单击鼠标左键时触发。

所以我添加了OnClick事件和MouseClick事件来处理左右点击。 但在调试代码后,我发现OnClick处理左右键单击事件。

为什么OnClick处理这两个并且我是否需要将这两个事件保存在我的代码中由于某些原因我忽略了?

protected override void OnClick(EventArgs e) { this.Focus(); base.OnClick(e); } private void CustomControl_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { rightClickMenu(e); } } 

根据MSDN ,Click事件不仅在单击鼠标时被调用,而且在按下Enter按钮时也被调用。 如果您只需要处理鼠标点击,我会在MouseClick事件中移动您的所有代码。 你不能反过来做因为Click事件不告诉你点击了哪个鼠标按钮(如果有的话)。

首先,你的链接不正确,它链接到HTML和DHTML参考,而不是WinForms :)正确的链接是Control.MouseClick事件
您只需要覆盖一个方法。 如果您只想处理鼠标单击 – 覆盖OnMouseClick()并且不处理MouseClick事件,否则 – 覆盖OnClick()并且不要覆盖OnMouseClick()。

您不应该同时拥有这两个事件……只需保持OnClick即可。

此外,我还没有在很长一段时间内完成Windows Forms,但我认为有一种更好的方式来接受焦点而不是在click事件上手动设置它,但我不能具体告诉你它是什么…我认为这是它或某物的财产。

在Winforms中,单击任一鼠标键时会引发Click事件。

如果我的记忆正确,请单击鼠标点击和“Enter”键,或者甚至使用“Tab”键将焦点设置在控件上,然后使用“Space”或“Enter”来“点击”它。

如果这种行为是可接受/期望的,您可以执行以下操作。

我有一个DoubleClick事件的解决方法……

 void ControlClick(object sender, EventArgs e) { MouseEventArgs mEvt=e as MouseEventArgs; // or (MouseEventArgs)e; // now mEvt has the same properties as 'e' in MouseClick event } 

希望这可以帮助。

-Nurchi

OnClick和CustomControl_MouseClick 是同一个事件

您可以将多少种方法附加到事件上(this.Click + = …)