我目前正在開發一個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;
很難從這段代碼中知道,但我認爲如果你刪除了if語句中的return語句,並在方法結尾處返回所有的消息,你可以設置你的字段有錯誤,返回消息。 – 2017-08-06 17:56:51
爲什麼不創建一個整數,並用某個特定的結果/控件設置每個單獨的位?我的意思是,如果你必須設置20個控件,你可以考慮每一個控制一個比特,或者是1,最後檢查這個數字是否是2^20(所有比特都打開)。同時,您可以創建另一個錯誤消息數組,並將每個錯誤位置與上面的相同位位置鏈接,並在While循環中顯示錯誤消息,該循環檢查integer-var最終結果的每個位。 –
@DavidBS我已經編輯了我的代碼。我有一個循環來檢查所有的錯誤,然後才能保存數據。我有我的所有errorProviders存儲在列表中。你能否提供一個例子說明我會如何保存消息並顯示正確的錯誤信息? –