btnClose设置为CausesValidation = false但不起作用

时间:2013-04-30 01:57:16

标签: c# winforms

我的表单上有一个关闭按钮,我已设置为CausesValidation = false。但是,当我运行它并尝试使用ErrorProvider关闭它时,它不会让我关闭。我甚至尝试添加关闭例程errorProvider1.Clear()errorProvider1.Dispose() but,但在我处理错误之前仍然没有运气。

如果我循环遍历所有控件并设置CausesValidation=false,我发现工作即将结束,然后通过关闭表单尽管有任何错误,它仍能正常工作。

   private void btnAdd_Click(object sender, EventArgs e)
    {
        if (!this.ValidateChildren()) return;

        DoAddCommand();
    }

    private void DoAddCommand()
    {
        //input
        string input1 = textBox1.Text;
        string input2 = textBox2.Text;
        //process
        this.ValidateChildren();
        decimal sum = Class1.Add(input1, input2);

        //output
        lblSum.Text = sum.ToString();
    }

    private void textBoxNumberEntry_Validating(object sender, System.ComponentModel.CancelEventArgs e)
    {
        TextBox textBox = sender as TextBox;
        decimal number1 = 0;

        try
        {
            number1 = decimal.Parse(textBox.Text);
            errorProvider1.Clear();
        }
        catch (FormatException)
        {
            errorProvider1.SetError(textBox, "Enter a valid number");
            e.Cancel = true;
        }
    }

    private void btnClose_Click(object sender, EventArgs e)
    {
        foreach (Control item in this.Controls)
        {
            item.CausesValidation = false;
        }
        this.Close();
    }

5 个答案:

答案 0 :(得分:5)

尝试在asp:Button标记

中添加这两个属性

CausesValidation =“false”UseSubmitBehavior =“false”

CauseValidation应该足够了,但我相信因为你有一个服务器端OnCLick事件,你还需要指定SubmitBehavior。

马里奥

答案 1 :(得分:1)

最有可能发生的事情是,当您尝试点击“取消”按钮时,其中一个TextBox会有焦点,因此验证已经发生。您的解决方案通过控制并将CausesValidation属性设置回False来工作。

快捷方法是关闭表单的AutoValidate属性:

private void btnClose_Click(object sender, EventArgs e)
{
  this.AutoValidate = AutoValidate.Disable;
  this.Close();
}

答案 2 :(得分:1)

根据我的经验,处理此问题的最有效方法是将控件上的ValidationGroup设置为不存在的验证组名称。

**这是hacky,所以YMMV **

<asp:LinkButton ID="DoSomethingButton" runat="server"
    ValidationGroup="NonExistent" 
    OnClientClick="return confirm('Are you sure you want to do something?');" 
    Text="Do something" 
    OnClick="DoSomething_Click">
</asp:LinkButton>

答案 3 :(得分:1)

类似的问题导致我在这里:在我的情况下,按钮的父控件(在我的情况下是Panel)将CausesValidation设置为true;如果将其设置为false,则无需验证即可触发按钮的单击。

答案 4 :(得分:0)

对于任何对此感到愤怒的人,我刚才遇到了同样的问题。 只需设置按钮即可使用:data-validate-target =“none”

data-validate-target是您在aspx验证控件上寻找的标记,例如在框失去焦点时在客户端触发的必需等控件。

现在为我工作。