0

嘿,所以我的所有代码都在工作,这很好。但我想稍微清理一下。

目前我只有一个消息框显示输入是否有错误,所以它会显示“请检查您的输入”,但我希望它显示类似“请检查以下内容:名字,第二名等。”

if  ((FirstnameText.Text.Trim().Length == 0) || (SurnameText.Text.Trim().Length == 0)
    || (DateOfBirthText.Text.Trim().Length == 0) || (CourseText.Text.Trim().Length == 0)
    || (MatricNoText.Text.Trim().Length == 0) || (YearMarkText.Text.Trim().Length == 0)
    || (int.Parse(MatricNoText.Text) < 10000 || int.Parse(MatricNoText.Text) > 99999)
    || (int.Parse(YearMarkText.Text) < 0 ||  int.Parse(YearMarkText.Text) > 100))

   {
      errorMessage();
      return;
   }

public void errorMessage()
{
   MessageBox.Show("Please check your input");
}

我知道这很乱,但是嘿,它有效

目前它只输出该消息,有没有一种简单的方法来输出有错误的特定文本框?

谢谢

4

4 回答 4

2

内置的 ErrorProvider 组件将为您的情况创造奇迹。将它从工具箱拖到表单的设计器上。它将出现在底部,NotificationIcons 和 ContextMenuStrips 出现。ErrorProvider 的伟大之处在于它提供了一个视觉反馈图标,鼠标悬停在控件旁边的工具提示上。

然后,您可以使用控件的“验证”事件来检查您需要什么:

private void FirstnameText_Validating (object sender, CancelEventArgs e)
{
    string error = null;

    if (FirstnameText.Text.Length == 0)
    {
        error = "You must enter a First Name";
        e.Cancel = true; // This is important to keep focus in the box until the error is resolved.
    }

    ErrorProvider.SetError((Control)sender, error); // FirstnameText instead of sender to avoid unboxing the object if you care that much
}

您也可以将其粘贴在“保存”按钮中,而不是在“验证”事件中引发它。要进一步清理代码,请创建一个验证输入的类,以将非 UI 内容排除在 UI 之外。

于 2012-10-18T14:38:07.487 回答
1

拆分您的代码将是一个开始:

if  ((FirstnameText.Text.Trim().Length == 0){
   errorMessage("firstname is empty");
}

if (SurnameText.Text.Trim().Length == 0){
   errorMessage("surname is empty");
}

明白了吗?

于 2012-10-18T12:39:58.570 回答
0

如果可能的话,你重写你的代码,如下所示

Control errorControl =null;
foreach (Control ctrl in this.Controls)
{
  if (ctrl is TextBox)
  {
    if (ctrl.Name == "MatricNoText")
    {
      if ((int.Parse(MatricNoText.Text) < 10000 || int.Parse(MatricNoText.Text) > 99999))
          {
            errorControl = ctrl;
          }
     }
     else if (ctrl.Name == "MatricNoText")
     {
       if (int.Parse(YearMarkText.Text) < 0 || int.Parse(YearMarkText.Text) > 100)
       {
         errorControl = ctrl;
        }
      }
      else
      {
        if (ctrl.Text.Length == 0)
        {
          errorControl = ctrl;
         }
       }
    }
  }

MessageBox.Show("Please check your input." + errorControl.Focus());
于 2012-10-18T12:45:59.743 回答
0

我经常使用 Fluent Validation。该WithMessage方法允许您指定错误消息。然后,验证器会向您返回所有错误消息的可枚举。对于您的特定问题,可能还有更好的拟合方法。

于 2012-10-18T12:50:10.347 回答