2012-10-18 33 views
0

嘿所以我有我所有的代码工作,它很好。但我想稍微清理一下。显示哪些文本框为空的错误消息C#

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

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"); 
} 

我知道这很凌乱,但嘿它的工作原理

目前,它只是输出一个消息,有一个简单的方法来输出,有错误的具体文本?

感谢

回答

1

分裂你的代码是一个开始:

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

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

有此想法?

+0

我担心它必须是,只是一个负载的if语句 啊好,感谢 – AppleAssassin

+0

这是一个开始,当要拆分(重构)你的代码,你应该注意到,应该给你一些想法的模式进一步改进 – lboshuizen

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()); 
0

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

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之外。