2011-10-29 23 views
1

我已經做了以下類的if else代碼,一次又一次地避免重複:ErrorProvider控件使用類

public class Error 
{ 

    private ErrorProvider errProvider; 


    public void SetError(Control control, string value) 
    { 

     errProvider = new ErrorProvider(); 

     if (control.Text.Trim().Length == 0) 
     { 
      errProvider.SetError(control, value); 
     } 
     else 
     { 
      errProvider.SetError(control, ""); 

     } 

    } 


} 

和文本框代碼驗證是

private void textBox1_Validating(object sender, CancelEventArgs e) 
    { 

      erp.SetError(textBox1, "Please Enter Name"); 

    } 
  1. 鍵入文本後在texbox中,當我按下回車鍵時,它工作正常;
  2. 沒有在文本框中輸入任何東西,因爲我按下回車鍵,它也 工作正常意味着出現紅色的圖標;但
  3. 警告後,因爲我在文本框中輸入文本後按下標籤, 警告圖標不會消失,它應該被刪除。

沒有一流的IT工作正常使用相同的代碼

更新?

回答

2

使用字段初始

private readonly ErrorProvider errProvider = new ErrorProvider(); 

您應該使用字段初始爲errProvider,因爲每次調用Error.SetError時間,ErrorProvider控件將建設和構建ErrorProvider控件不但沒有消失,但也只是分層。


[更新]

public class Error 
{ 
    private readonly ErrorProvider errProvider = new ErrorProvider(); 
    public void SetError(Control control, string value) 
    { 

     if (control.Text.Trim().Length == 0) 
     { 
      errProvider.SetError(control, value); 
     } 
     else 
     { 
      errProvider.SetError(control, ""); 
     } 
    } 
} 
+0

我將不勝感激,如果您在提供的代碼中進行更改後向我提供完整代碼。我是新來的c# –

+0

我明白了。請檢查我的更新答案。 –

0

移動你的ErrorProvider控件的聲明線的建設。所以改變:

private ErrorProvider errProvider; 

到:

private ErrorProvider errProvider = new ErrorProvider(); 

,擺脫那個成員當前在您SETERROR方法的初始化。

向我們展示如何以及何時創建並存儲對您正在使用的類實例的錯誤的引用可能也很有用。

此外,將您的驗證代碼放在名爲SetError的方法中有點誤導(使您的代碼難以維護)。我會把它命名爲ValidateControlHasValue或類似的東西。

相關問題