2013-04-30 87 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驗證控件上尋找的標籤,例如所需的等等,只要盒子失去了重點。

現在爲我工作。

相關問題