2

CancelButton_Clicked由于我的事件,我在将表单留在事件中时遇到问题Validating

我有一个文本框,它有自己的验证方法,e.Cancel = true如果输入字符串为空或为空,则返回,否则返回e.Cancel = false

现在,我有这个CancelButton只是一个常规按钮,我想为此关闭当前表单,有点像这样:

CancelButton_Clicked(Object sender, EventArgs e)
{
this.Close();
}

但是,如果我这样做,并且如果文本框为空,则它不会通过验证,并且我无法关闭表单。验证图标一直闪烁。我尝试设置CausesValidationfalse,我也尝试了这个:

private void btnCancel_Click(object sender, EventArgs e)
{
    // Stop the validation of any controls so the form can close.
    AutoValidate = AutoValidate.Disable;
    Close();
}

但这些都没有帮助。希望你能。干杯

4

3 回答 3

3

我假设,您已经btnCancel.CausesValidation=false;通过代码或设计器进行了设置。

的设置CausesValidation=falsebutton将允许您调用Click eventbutton

现在你可以做很多事情。

  1. 只需在ie中取消注册您的textbox validating事件btn_Cancel

    private void btnCancel_Click(object sender, EventArgs e)
    {
        textBox1.Validating -= new CancelEventHandler(textBox1_Validating);
        this.Close();
    }
    
  2. 只需使用布尔标志。在您的 btnCancel 事件中将其设置为 true 并在验证事件中使用它

    bool IsCancelBtnClicked=false;
    private void btnCancel_Click(object sender, EventArgs e)
    {
        IsCancelBtnClicked=true;
        this.Close();
    }
    private void textBox1_Validating(object sender, CancelEventArgs e)
    {
        e.Cancel=!IsCancelBtnClicked;
    }
    
于 2013-04-19T21:23:50.987 回答
0

添加一个私有布尔成员,在 CancelButtonClicked 中将其设置为 true,然后在验证中使用它

于 2013-04-19T21:10:52.150 回答
-1

你错过了这条线吗this.Close()

于 2013-04-19T21:07:51.530 回答