繁体   English   中英

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

[英]Correct usage of OnClick vs. MouseClick events in Windows Forms applications using C#

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

如果我没记错的话,单击会同时单击鼠标和“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
}

希望这可以帮助。

-努尔基

您不需要同时拥有这两个事件...只需保留 OnClick。

另外,我已经有一段时间没有做 Windows 窗体了,但我认为有比在单击事件上手动设置它更好的接受焦点的方法,但我不能具体告诉你它是什么......我认为有它的属性或其他东西。

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

OnClick 和 CustomControl_MouseClick是同一个事件

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM