0

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

4

2 回答 2

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;
于 2012-06-22T18:33:24.853 回答
2

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

于 2012-06-22T18:35:25.570 回答