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

本文关键字:单击 程序 ASP winform 处理 一次 自定义控件 调用 | 更新日期: 2023-09-27 18:34:56

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

当然,罐装的通知按钮不会发生。

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

任何帮助将不胜感激。 谢谢!

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

如果你点击得足够快,你就进入了DoubleClick领域。

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

发生

此类用户操作时,控件会引发以下一系列事件:

  1. 鼠标按下事件。
  2. 单击事件。
  3. 鼠标单击事件。
  4. 鼠标向上事件。
  5. 鼠标按下事件。
  6. 双击事件。
  7. 鼠标双击事件。
  8. 鼠标向上事件

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


有关禁用它的方法,请尝试查看此讨论控件样式的 MSDN 页面。

从上面的链接:

标准单击 -- 如果为 true,则控件实现标准单击行为。
StandardDoubleClick -- 如果为 true,则控件实现标准的 DoubleClick 行为。如果标准单击位未设置为 true,则忽略此样式。

因此,请在控件构造函数或加载事件中尝试此操作:

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

由于SetStyle似乎不在紧凑框架中,因此您可以添加一个 DoublClick 事件,并让它像这样以编程方式触发 Click 事件。

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

当您足够快地单击控件时,它会调用双击而不是单击。因此,您应该在单击函数中执行以下操作:

{
    control.Enabled = false; 
    ......
    control.Enabled = true;
}