错误消息显示哪些文本框为空C#

时间:2012-10-18 12:35:44

标签: c# validation input

嘿所以我的所有代码都正常工作,没关系。但是我想清理一下。

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

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 个答案:

答案 0 :(得分: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之外。

答案 1 :(得分:1)

拆分代码将是一个开始:

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

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

明白了吗?

答案 2 :(得分: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());

答案 3 :(得分:0)

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