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

时间:2009-06-01 20:15:48

标签: c# .net winforms events

我正在开发一个自定义控件,并意识到我的代码正在运行两次。这不是一个很大的问题(它只是一个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);
   }
}

6 个答案:

答案 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 + = ...)