2017-08-06 10 views
0

我目前正在開發一個Winforms應用程序,其中包含驗證用戶輸入的各種方法,所有這些都必須符合,否則會提示失敗控件旁邊的ErrorProvider圖標。這是我的saveForm功能。這也從一個Click event如何一次評估多個條件,但檢測哪個控件失敗並顯示錯誤消息?

我的問題是,我需要檢查我所有的條件在同一時間,而不是一個接一個,因爲每次按保存它們在顯示一個新的錯誤,直到驗證觸發得到滿足。

我知道我明顯可以使用||運營商或&&但我需要使用SetError方法適當地顯示相應的消息。那麼,我將如何能夠同時評估驗證條件,然後檢測哪個控件失敗並顯示該控件的唯一消息。

SaveForm()方法:

try 
{ 
    var errorProviders = new List<ErrorProvider>() { epEmail, epAlternative, epMobile, epTown, epLandline, epHouseName, epForeName, epSurname, epPostcode, epCountry, epHouseName, epLocality, epCounty }; 

    if (string.IsNullOrWhiteSpace(txt_ForeName.Text) && string.IsNullOrWhiteSpace(txt_SurName.Text)) 
    { 
     epBothNames.SetError(txt_SurName, "Error:"); 
     epBothNames.SetError(txt_ForeName, "Error:"); 
     return false; 
    } 

    if (cmb_Title.SelectedIndex == -1) 
    { 
     epTitle.SetError(cmb_Title, "Title"); 
     return false; 
    } 

    if (cmb_PrefConTime.SelectedIndex == -1) 
    { 
     epPrefConTime.SetError(cmb_PrefConTime, "Error in: prefered contact time feild"); 
     return false; 
    } 

    if (!isPhoneNumber()) 
    { 
     epPrefConNumber.SetError(cmb_PrefConNumber, "Error"); 
     return false; 
    } 

    foreach (Control c in panel1.Controls) 
    { 
     if(c is SpellBox || c is TextBox) 
     { 
      if (!errorProviders.Any(e => e.GetError(c).Length > 0)) 
      { 
       return false; 
      } 
     } 
    } 
} 
catch (Exception ex) 
{ 
    MessageBox.Show(ex.ToString())+ "Error has occurred, Please cancel and try again!"); 
} 

return true; 
+1

很難從這段代碼中知道,但我認爲如果你刪除了if語句中的return語句,並在方法結尾處返回所有的消息,你可以設置你的字段有錯誤,返回消息。 – 2017-08-06 17:56:51

+0

爲什麼不創建一個整數,並用某個特定的結果/控件設置每個單獨的位?我的意思是,如果你必須設置20個控件,你可以考慮每一個控制一個比特,或者是1,最後檢查這個數字是否是2^20(所有比特都打開)。同時,您可以創建另一個錯誤消息數組,並將每個錯誤位置與上面的相同位位置鏈接,並在While循環中顯示錯誤消息,該循環檢查integer-var最終結果的每個位。 –

+0

@DavidBS我已經編輯了我的代碼。我有一個循環來檢查所有的錯誤,然後才能保存數據。我有我的所有errorProviders存儲在列表中。你能否提供一個例子說明我會如何保存消息並顯示正確的錯誤信息? –

回答

0

這是很難從剛纔這段代碼告訴我們,但我認爲,如果你刪除的if語句返回語句,並返回所有消息在結束該方法,您可以設置您的字段有錯誤並返回消息。

+0

感謝您的答案完美的作品,但我還沒有足夠的代表upvote所以會盡快做 –

+0

您可以選擇它作爲答案。 – 2017-08-08 16:31:12

相關問題