将CauseValidation设置为false但不起作用

时间:2013-05-13 05:32:16

标签: c# winforms validation

我有验证事件。

    private void EmployeeIDtextBox_Validating(object sender, CancelEventArgs e)
    {

        if (EmployeeIDtextBox.Text == "")
        {
            MessageBox.Show("Please Enter EmployeeID.", "Invalid EmployeeID");
        }

    }

并将我的cancelbutton causevalidation设置为false但是当我点击取消按钮时,消息框仍会显示。

2 个答案:

答案 0 :(得分:0)

您需要将Cancel按钮层次结构中所有控件的CausesValidation属性设置为false。

例如:Form1包含Panel1,Panel1包含取消按钮。您需要将Form1,Panel1和Cancel按钮的CausesValidation属性设置为false。

CausesValidation是Control类的属性。详细了解here

如果CausesValidation为true,则控件允许触发验证事件,这是默认值。

如果层次结构中的控件具有ReasonValidation为true并且在您单击取消按钮之前它们会获得焦点,则将触发验证事件。

为了避免在panel1中的控件到处禁用它,你应该使用单独的面板或者不使用取消按钮。

希望它有所帮助。

修改: 我检查了我的结局。移动到取消按钮时,无论哪个控件获得焦点,都应该使CausesValidation为false。

将TextBox层次结构的CausesValidation设置为false,但TextBox本身除外。

答案 1 :(得分:0)

    bool IsCancelBtnClicked = false;
    private void EmployeeIDtextBox_Validating(object sender, CancelEventArgs e)
    {
        if (EmployeeIDtextBox.Text == "")
        {
            MessageBox.Show("Please Enter EmployeeID.", "Invalid EmployeeID");
        }
    }

    private void button3_Click(object sender, EventArgs e)
    {
        IsCancelBtnClicked = true;
        EmployeeIDtextBox.Validating -= new CancelEventHandler(textBox4_Validating);
        this.Close();
    }      

感谢https://stackoverflow.com/a/16113700/2322994。 :)