如何取消winform按钮点击事件

本文关键字:按钮 事件 winform 何取消 取消 | 更新日期: 2023-09-27 18:14:21

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

我想在我的winform项目中使用这个按钮。

这个类被称为"ConfirmButton",它显示确认消息Yes或No。

但问题是,我不知道如何停止点击事件,当用户选择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
            }
        }
    }
}

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

如何取消winform按钮点击事件

你需要重写点击事件。

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);
    }
}

这里有另一种处理这种一般问题的方法。(这并不是要与前一个答案竞争,只是供你思考。)将按钮的dialgresult属性设置为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();
}

我想你可以用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;
            }
        }
    }
}
这样的