[英]Using a Picture Box as a button, how do I ignore/disable double-click events?
使用图片框作为按钮时遇到一些困难。 我想拥有自定义的按钮图形,而不是使用普通的Windows窗体的Button控件。
它工作得很好,除了快速按下单个按钮时按钮似乎滞后。 我希望每次单击“图片框”时都立即调用OnClick方法,但是它似乎正在注册一个双击事件,即使我没有使用该事件也是如此。
短版是我想要的:
我确实编写了一个测试程序,该程序实际上表明正在发生的事情。 我编写了一个MouseUp事件,该事件使计数器增加1,并且还添加了一个OnClick,即使该计数器使其他计数器也增加1。当快速单击链接到这些事件的图片框时,MouseUp计数器恰好是OnClick计数器的两倍。
然后,我添加了一个DoubleClick事件,该事件调用了OnClick事件。 这虽然不理想,但可以很好地解决问题。 如果有一种方法可以编写所有按钮都可以使用的通用DoubleClick事件,那么我认为这是可以接受的。
现在我的DoubleClick事件只是
private void pb_DoubleClick(object sender, EventArgs e)
{
pbOK_Click(sender, e); //This needs to be generic
}
我想至少将DoubleClick行替换为
private void pb_DoubleClick(object sender, EventArgs e)
{
(Sender.ToString)_Click(sender, e); // Doesn't work quite like this.
}
我可以为每个Picture Box分别编写一个特殊的DoubleClick事件,但这并不理想,而且看起来很麻烦,所以我宁愿在不需要时也不这样做。
这是我第一个发布的问题,感谢所有花时间阅读此问题的人。 任何建议将不胜感激。
编辑:此程序是为Windows CE开发的,因此对象的属性和事件选项非常有限。 我可能仍会丢失一些内容,但据我所知,按钮的“属性”列表直接从GenerateMember转到Location,而没有可用的Image选项。 对于未在原始帖子中说明目标平台,我深表歉意。
这是通过Control.SetStyle()方法完成的,如下所示:
using System;
using System.Windows.Forms;
class MyButton : PictureBox {
public MyButton() {
this.SetStyle(ControlStyles.StandardDoubleClick, false);
}
}
您为什么不创建自己的控件? 这样,您无需执行任何操作即可获得所需的行为。
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public class ButtonPictureBox : PictureBox
{
protected override void OnDoubleClick(System.EventArgs e)
{
OnClick(e);
}
}
}
我不知道这在Windows CE上是否可行。
如果您还想在表单设计器中隐藏DoubleClick
事件,则可以将其添加到类中:
[Browsable(false)]
public new event EventHandler DoubleClick;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.