相对较新的C#/ .NET / GUI编程,但这里有。现在我正在使用WinForms编写业务应用程序。我有大约5个文本框和1个组合框,我想验证它是否为空,如果是,那么告诉用户并设置焦点在该控件上。我应该怎么做呢?
我可以使用if语句检查每个控件:
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编程,文本字段为空是否应该例外,或者这会被视为正常的程序流?
答案 0 :(得分: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;
答案 1 :(得分:2)
我不使用异常,异常情况下应抛出异常,不填写字段的用户不计算。至于实际检测空控制和设置焦点,有很多方法,如你所拥有的简单检查,以及带有绑定和验证的更复杂的解决方案等等。