2013-04-30 98 views
2

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

我发现工作是关闭,如果我循环所有的控件,并设置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(); 
    } 

回答

3

尝试增加在ASP这两个属性:按钮标签

的CausesValidation =“假” UseSubmitBehavior =“假”

的CauseValidation应该够了,但我相信,因为你有一台服务器您还需要指定SubmitBehavior。

马里奥

+3

-1问题是关于Windows窗体,而不是ASP.NET。 – 2013-10-15 17:49:48

+1

即使原来的问题是在Windows窗体方面,我发现这个解决方案对ASP.NET中的类似情况很有帮助。 – 2016-07-27 19:02:30

1

最有可能发生的情况是,文本框的一个必须在您尝试打了取消按钮的时间专注,所以验证已经发生。您的解决方案通过遍历控件并将CausesValidation属性设置为False来工作。

短切的方法是直接关闭窗体的AutoValidate属性:

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

对付这种情况的最有效的方法,以我的经验,是在控制设置的ValidationGroup来验证不存在的组名称。

**这是哈克,所以因人而异**

<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> 
0

类似的问题导致我在这里:在我的情况下按钮的父控件(在我的情况下,面板)具有的CausesValidation设置为true;将其设置为false允许按钮的点击被触发而无需验证。

0

对于任何人在这发疯,我刚刚有同样的问题。 只需设置按钮使用:data-validate-target =“none”

data-validate-target是您在aspx验证控件上寻找的标签,例如所需的等等,只要盒子失去了重点。

现在为我工作。

相关问题