C#:自定义控件每隔一次单击调用单击处理程序(winform,而不是 ASP)
本文关键字:单击 程序 ASP winform 处理 一次 自定义控件 调用 | 更新日期: 2023-09-27 18:34:56
我用 C# 编写了一个自定义控件(继承自 Forms.Control(,它似乎工作正常,但是如果您按按钮的速度足够快,就会出现问题:只有每隔一次单击才会调用单击事件处理程序。 如果您不快速按下它(每秒少于一次(,则不会发生这种情况。 无论您单击按钮的速度有多快,鼠标向上和鼠标向下处理程序始终会被调用。
当然,罐装的通知按钮不会发生。
我无法使用预制按钮,因为我正在为 .net 紧凑框架编写应用程序,因此我需要一个自定义控件以使 UI 更美观。 另外,我在完整版的.net框架上测试了我的代码,但我仍然有同样的问题。
任何帮助将不胜感激。 谢谢!
如果你点击得足够快,你就进入了DoubleClick
领域。
根据上面的 MSDN 页面,事件的顺序为:
发生此类用户操作时,控件会引发以下一系列事件:
- 鼠标按下事件。
- 单击事件。
- 鼠标单击事件。
- 鼠标向上事件。
- 鼠标按下事件。
- 双击事件。
- 鼠标双击事件。
- 鼠标向上事件
如果您注意到每个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;
}