2012-06-22 44 views
0

對C#/ .NET/GUI編程比較新,但是這裏有。現在我正在使用WinForms編寫一個業務應用程序。我有大約5個文本框和1個組合框,我想驗證它是否爲空,如果是,請告訴用戶並將注意力集中在該控件上。我應該如何去做這件事?在異常中封裝控件

我既可以有一個,如果是檢查每個控制語句:

if (usernameField IsNullOrEmpty) then: 
    setFocus(UsernameField); 
    return; 

if (addressField IsNullOrEmpty) then: 
    setFocus(addressField); 
    return; 

continue with rest of application as normal... 

或者,我可以有例外做到這一點:

try { 
    if (usernameField IsNullOrEmpty) then: 
    throw new Exception(usernameField); 

    if (addressField IsNullOrEmpty) then: 
    throw new Exception(addressField); 

} catch (Exception e) { 
    setFocus(ControlField) // encapsulate in exception some way? 
} 

或防止代碼重複,只寫一個函數:

try { 
    checkField(usernameField); 

    checkField(addressField); 

} catch (Exception e) { 
    setFocus(ControlField) // encapsulate in exception some way? 
} 

void checkField(control ctrl) { 
    if (ctrl IsEmptyOrNull) 
    throw new Exception(ctrl); 
} 

對於GUI編程來說相對較新,文本字段爲空是否值得使用異常還是會被視爲正常的程序流?

回答

2

拋出程序流異常不建議。

寫一個幫手方法。

private bool IsTextboxValid(Textbox ctrl) 
{ 
    if(string.IsNullOrEmpty(ctrl.Text)) 
    { 
    ctrl.Focus(); 
    return false; 
    } 
    return true; 
} 

,並使用它:

if(!IsTextboxValid(addressBox)) return; 
if(!IsTextboxValid(nameBox)) return; 
+0

正是我在找的東西。那麼這樣的事情不值得異常處理? – keelerjr12

+0

輔助方法不需要異常處理程序,因爲它正在驗證已知控件的值。如果你懷疑ctrl有時是空的,你可以爲它添加一個檢查並做一些其他的事情,但是個人而言,我會離開空的ref異常或拋出一個ArgumentNullException。 –

2

使用異常,異常應在特殊情況下拋出,用戶不能在一個領域不計填充。至於實際檢測空白控件和設置焦點,有很多方法,比如簡單(如果您有檢查),更復雜的解決方案以及綁定和驗證等等。

+0

總是想學習新事物,所以我會檢查綁定和驗證。 – keelerjr12

+0

有像WPF這樣的東西,但一切都有它的複雜性和學習曲線的價格。取決於你的應用程序的複雜程度,保持簡單的香草(儘管稍微難看)贏取表單代碼可能更有意義。 – Bort