将控件封装在异常中

时间:2012-06-22 18:27:17

标签: c# .net

相对较新的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编程,文本字段为空是否应该例外,或者这会被视为正常的程序流?

2 个答案:

答案 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)

使用异常,异常情况下应抛出异常,不填写字段的用户不计算。至于实际检测空控制和设置焦点,有很多方法,如你所拥有的简单检查,以及带有绑定和验证的更复杂的解决方案等等。