我正在开发一个自定义控件,并意识到我的代码正在运行两次。这不是一个很大的问题(它只是一个Focus方法调用)。但是,我想了解它。
通过阅读MSDN description for click | onclick event,它指出:
当用户在对象上单击鼠标左键时触发。
所以我添加了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);
}
}
答案 0 :(得分:11)
According to MSDN,不仅在单击鼠标时调用Click事件,而且在按下Enter按钮时调用Click事件。如果您只需要处理鼠标点击,我会在MouseClick事件中移动您的所有代码。你不能反过来做因为Click事件不会告诉你点击了哪个鼠标按钮(如果有的话)。
答案 1 :(得分:6)
首先,你的链接不正确,它链接到HTML和DHTML参考,而不是WinForms :)
正确的链接是Control.MouseClick event
您只需要覆盖一个方法。如果你只想处理鼠标点击 - 覆盖OnMouseClick()并且不处理MouseClick事件,否则 - 覆盖OnClick()并且不要覆盖OnMouseClick()。
答案 2 :(得分:0)
你不应该同时拥有这两个事件......只需保持OnClick。
另外,我还没有在很长一段时间内完成Windows窗体,但我认为有更好的方法来接受焦点,而不是在click事件上手动设置它,但我不能具体告诉你它是什么...我认为这里有一个属性。
答案 3 :(得分:0)
在Winforms中,单击任一鼠标键时会引发Click事件。
答案 4 :(得分:0)
如果我的记忆正确,请点击鼠标左键和“回车”键,或者使用“标签”键将焦点设置在控件上,然后使用“空格”或“输入”来“点击”它。 / p>
如果这种行为是可接受/期望的,您可以执行以下操作。
我有一个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
答案 5 :(得分:-3)
OnClick和CustomControl_MouseClick 是同一个事件
您可以将多少种方法附加到某个事件(this.Click + = ...)