0

我在使用图片框作为按钮时遇到了一些困难。我想要自定义按钮图形,而不是使用普通的 Windows 窗体 Button 控件。

它工作得很好,除了快速按下单个按钮时按钮似乎滞后。我希望每次单击图片框时立即调用 OnClick 方法,但它似乎正在注册一个双击事件,即使我没有使用该事件。

简短的版本是我想:

  • (理想)禁用双击事件,因为这似乎是控件在每次交替单击图片框时等待的内容,而我从不使用它。或者,
  • (可接受)编写一个通用的 DoubleClick 事件,我可以将其用于我计划用作按钮的所有图片框。

我确实编写了一个测试程序,它表明这实际上是正在发生的事情。我编写了一个使计数器加 1 的 MouseUp 事件,并且还添加了一个 OnClick,即使它使不同的计数器加 1。当快速单击链接到这些事件的图片框时,MouseUp 计数器正好是 OnClick 计数器的两倍。

然后我添加了一个调用 OnClick 事件的 DoubleClick 事件。这虽然不理想,但很好地解决了这个问题。如果有办法编写所有按钮都可以使用的通用 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.
    }

我可以为每个图片框单独编写一个特殊的 DoubleClick 事件,但这远非理想,而且看起来很麻烦,所以如果没有必要,我宁愿不这样做。

这是我第一个发布的问题,所以感谢任何花时间阅读本文的人。任何建议将不胜感激。

编辑:这个程序是为 Windows CE 开发的,所以对象的属性和事件选项非常有限。我仍然可能遗漏了一些东西,但据我所知,按钮的属性列表直接从 GenerateMember 到 Location,没有可用的 Image 选项。对于没有在原帖中说明目标平台,我深表歉意。

4

3 回答 3

1

它是通过 Control.SetStyle() 方法完成的,如下所示:

using System;
using System.Windows.Forms;

class MyButton : PictureBox {
    public MyButton() {
        this.SetStyle(ControlStyles.StandardDoubleClick, false);
    }
}
于 2012-05-04T20:02:16.660 回答
0

好吧,我原来的答案是垃圾。我的更新:

这是有关如何获取控件方法名称的链接: 链接

在链接中它有一个 Control c。要获得您的控制权(发件人),请使用以下命令:

PictureBox picbox = (PictureBox) sender;

接下来,使用字符串调用方法(您的 class.Method.Name):Link

现在应该可以了。希望确实如此。

于 2012-05-04T02:46:13.370 回答
0

为什么不创建自己的控件?这样,您无需执行任何操作即可获得所需的行为。

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;
于 2012-05-04T15:38:33.673 回答