2016-10-19 18 views
0

我創建了一個驗證表單的方法。此方法使用另一個類的擴展。驗證其他表單的代碼工作相同,但它阻止我驗證日誌記錄表單。代碼幾乎相同,但不適用於此實例。在自己的錯誤提供程序擴展中驗證c#中的表格

這裏是我的驗證方法:

public bool ValidateForm() 
    { 
     bool isValid = true; 
     errProv.ClearErrors(txtUsername, txtPassword); 
     if(String.IsNullOrEmpty(txtUsername.Text)) { errProv.SetError(txtUsername, LangRes.FieldIsRequired); isValid = false; } 
     if(String.IsNullOrEmpty(txtPassword.Text)) { errProv.SetError(txtPassword, LangRes.FieldIsRequired); isValid = false; } 
     return isValid; 
    } 

這是我的錯誤提供的類:

public static class ErrorProviderExtension 
{ 
    /// <summary> 
    /// To Clear all errors associated with controls 
    /// </summary> 
    /// <param name="errProv"></param> 
    /// <param name="controls"></param> 
    public static void ClearErrors(this ErrorProvider errProv, params Control[] controls) 
    { 
     if (controls!=null & controls.Length>0) 
     { 
      foreach(Control c in controls) 
      { 
       errProv.SetError(c, String.Empty); 
      } 
     } 
    } 
} 

的問題是不設置到對象的實例對象的引用,但我不瞭解它,以及如果另一個工作沒有這個問題,我不明白爲什麼這一個給我這個例外。有人可以幫忙嗎?

+0

如果你恰好表示*,其中*發生了誤差,這將有助於?你嘗試過調試嗎?什麼變量爲null並拋出異常? –

+0

@ rory.ap'errProv.SetError(c,String.Empty);'< - 這是一個行,它會導致異常。我不擅長調試。我認爲錯誤來自'errProv.ClearErrors(txtUsername,txtPassword);'這行 – UZIERSKI

+0

是否真的有效代碼? 我可以看到如果(controls!= null&controls.Length> 0)只有一個&不行,你應該有&&。 –

回答

1

它看起來像你沒有實例化errProv。定義在哪裏?你有沒有在任何地方叫它的構造函數

您正在嘗試使用errProv(即SetError)的方法,但errProv爲空。你不能在不存在的東西上調用方法。

有關更多信息,請參見本:What is a NullReferenceException, and how do I fix it?

+0

使用mHotRes.DesktopPresentation.Extensions;這是我定義使用它的地方。我沒有在其他課上做其他任何事情來進行驗證,並且工作正常。 – UZIERSKI

+0

你是正確的登錄表單設計器它說'私人System.Windows.Forms.ErrorProvider errProv;'< - 它從來沒有分配,它將始終將其默認值爲null。那我該如何分配呢? – UZIERSKI

+0

您可以在窗體的構造函數中指定它。 –

相關問題