C#:自定义控件每隔一次单击调用一次单击处理程序(winform,不是 ASP)

标签 c# winforms controls mouseevent

我已经用 C# 编写了一个自定义控件(继承自 Forms.Control),它似乎工作正常,但如果您按下按钮的速度足够快,则会出现问题:只有每隔一次单击才会调用单击事件处理程序。如果您不快速按下它(少于每秒一次),则不会发生这种情况。无论您点击按钮的速度有多快,mouseUp 和 mouseDown 处理程序总是会被调用。

当然,固定的 winform 按钮不会发生这种情况。

我无法使用固定按钮,因为我正在为 .net 紧凑型框架编写应用程序,所以我需要自定义控件以使 UI 更美观。另外,我在完整版的 .net 框架上测试了我的代码,但我仍然遇到同样的问题。

如有任何帮助,我们将不胜感激。谢谢!

最佳答案

如果您点击的速度足够快,您将进入 DoubleClick领土。

根据上面的 MSDN 页面,事件的顺序是:

当这样的用户操作发生时,控件会引发以下一系列事件:

  1. MouseDown 事件。
  2. 点击事件。
  3. 鼠标点击事件。
  4. MouseUp 事件。
  5. MouseDown 事件。
  6. 双击事件。
  7. MouseDoubleClick 事件。
  8. MouseUp 事件

如果您注意到每个 DoubleClick 只有一个 Click 事件


有关禁用它的方法,请尝试查看此 MSDN 页面讨论 ControlStyles .

来自上面的链接:

StandardClick -- If true, the control implements the standard Click behavior.
StandardDoubleClick -- If true, the control implements the standard DoubleClick behavior. This style is ignored if the StandardClick bit is not set to true.

所以在您的控件构造函数或加载事件中试试这个:

this.SetStyle(ControlStyles.StandardClick, true );
this.SetStyle(ControlStyles.StandardDoubleClick, false);

由于 SetStyle 似乎不在 Compact Framework 中,您可以添加一个 DoublClick 事件并让它以编程方式触发 Click 事件,就像这样。

YourClickEvent(sender, new MouseEventArgs(System.Windows.Forms.MouseButtons.Left,1,0,0,0));

关于C#:自定义控件每隔一次单击调用一次单击处理程序(winform,不是 ASP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10712478/

相关文章:

c# - 如何验证n个方法是否并行执行?

c# - 异常处理

c# - 当用户输入更改为有效时清除错误提供程序消息

c# - 为 RichTextBox 字符串的不同部分着色

php - 何时需要担心并发控制 PHP mysql

c# - 我可以创建一个返回 Task<T> 的方法来同步运行吗?

c# - 如何等到使用 HttpWebRequest 的 Web 请求完成?

winforms - 是否可以在VB6表单上直接使用Windows表单控件?

delphi - Delphi有 'joystick'控件吗?

c++ - 我可以在我自己的应用程序中使用在 Windows 资源管理器中看到的搜索框控件吗?