如何取消winform按钮点击事件?

时间:2014-07-22 23:56:59

标签: c# button onclick click

我有一个从System.Windows.Forms.Button继承的自定义按钮类。

我想在winform项目中使用此按钮。

此类名为" ConfirmButton",它显示带有是或否的确认消息。

但问题是当用户选择No并确认消息时,我不知道如何停止点击事件。

这是我的班级来源。

using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace ConfirmControlTest
{
    public partial class ConfirmButton : System.Windows.Forms.Button
    {
        public Button()
        {
            InitializeComponent();

            this.Click  += Button_Click;
        }

        void Button_Click(object sender, EventArgs e)
        {
            DialogResult res    = MessageBox.Show("Would you like to run the command?"
                , "Confirm"
                , MessageBoxButtons.YesNo
                );
            if (res == System.Windows.Forms.DialogResult.No)
            {
                // I have to cancel button click event here

            }
        }
    }
}

如果用户从确认消息中选择否,则不再触发按钮单击事件。

3 个答案:

答案 0 :(得分:4)

您需要覆盖点击事件。

class ConfirmButton:Button
    {
    public ConfirmButton()
    {

    }

    protected override void OnClick(EventArgs e)
    {
        DialogResult res = MessageBox.Show("Would you like to run the command?", "Confirm", MessageBoxButtons.YesNo
            );
        if (res == System.Windows.Forms.DialogResult.No)
        {
            return;
        }
        base.OnClick(e);
    }
}

答案 1 :(得分:2)

这是处理这种一般问题的另一种方法。 (这并不意味着与之前的答案竞争,但只是值得深思。)将按钮的dialogResult属性设置为none,然后在代码中处理它。这里有一个OK按钮示例:

private void OKUltraButton_Click(object sender, Eventargs e)
{
    {
    //Check for the problem here, if true then...
        return;
    }

    //Set Dialog Result and manually close the form
    this.DialogResult = System.Windows.Forms.DialogResult.OK;
    this.Close();
}

答案 2 :(得分:0)

我猜你可以用 return

using System;
using System.ComponentModel;
using System.Windows.Forms;

namespace ConfirmControlTest
{
    public partial class ConfirmButton : System.Windows.Forms.Button
    {
        public Button()
        {
            InitializeComponent();

            this.Click  += Button_Click;
        }

        void Button_Click(object sender, EventArgs e)
        {
            DialogResult res    = MessageBox.Show("Would you like to run the command?"
                , "Confirm"
                , MessageBoxButtons.YesNo
                );
            if (res == System.Windows.Forms.DialogResult.No)
            {
                return;

            }
        }
    }
}

那样