C#通过填写简单的注册表单显示错误消息

时间:2014-10-30 21:30:28

标签: c# forms window errorprovider

我是关于C#的新手,我现在已经学习了一年的C编程。

我创建了一个窗口表单,要求用户填写注册表单。

My registration form

我希望在未填写字段或字段未充分使用时在按钮下方显示错误消息。

我使用了这个基本代码:

private void button1_Click(object sender, EventArgs e)
    {
        if (!isOkay(userTextBox.Text))
        {
            label5.Text = "Please, enter an username.";
            label5.Visible = true;
        }
        else if (!isOkay(mailTextBox.Text))
        {
            label5.Text = "Please, enter a mail address.";
            label5.Visible = true;
        }
        else if (!confirmMailTextBox.Text.Equals(mailTextBox.Text) || !isOkay(confirmMailTextBox.Text))
        {
            label5.Text = "Please, match both mails addresses.";
            label5.Visible = true;
        }
        else if (!isOkay(passwordTextBox.Text))
        {
            label5.Text = "Please, enter a password.";
            label5.Visible = true;
        }
        else
        {
            label5.Text = "Valid form, yay !";
            label5.Visible = true;
        }
    }

    private Boolean isOkay(string textBoxContent)
    {
        return (textBoxContent.Length > 0 || textBoxContent.Equals(null));
    }

有没有优雅或优化的方法来正确地做到这一点?我找到了一些错误提供程序,但显然错误提供程序打开了一个弹出窗口,我只想在按钮"下面找到一条红色错误消息。

你可以给我一些帮助吗? :)

2 个答案:

答案 0 :(得分:0)

鉴于此类

public class RequiredFieldsError
{
    private List<string> errors;
    public RequiredFieldsError()
    {
         errors =  new List<string>();
    }
    public int Count
    {
        get{return errors.Count;}
    }
    public void AddField(string errorField)
    {
        errors.Add(errorField);
    }
    public override string ToString()
    {
        if(errors.Count == 0)
           return string.Empty;
        else
        {
           string fields = string.Join(Environment.NewLine, errors);
           fields = "The following fields contains errors:" + Environment.NewLine + fields;
           return fields;
        }
    }
}

然后您可以将代码更改为

private void button1_Click(object sender, EventArgs e)
{
    RequiredFieldsError rfe = new RequiredFieldsError();

    if (!isOkay(userTextBox.Text))
       rfe.AddField("User name missing, Please, enter an username.";
    if (!isOkay(mailTextBox.Text))
       rfe.AddField("Email address missing, Please, enter a mail address.";
    if (!confirmMailTextBox.Text.Equals(mailTextBox.Text) || !isOkay(confirmMailTextBox.Text))
       rfe.AddField("Email address doesn't match the confirmation email");
    if (!isOkay(passwordTextBox.Text))
       rfe.AddField("Password missing, Please, enter a password.";

    if(rfe.Count > 0)
    {
        // MessageBox.Show(rfe.ToString());
        label5.Text = rfe.ToString()
        label5.Visible = true;
    }     
}

这种方法可以避免(当您的用户)收到错误消息时的不安情况,他/她修复它只是为了在下次尝试确认表单时收到另一条错误消息。

当然,您的标签应足够高,以显示所有可能的消息,或只使用消息框。

我建议您将IsOkay功能更改为

private Boolean isOkay(string textBoxContent)
{
    return !string.IsNullOrWitheSpace(textBoxContent));
}

这也将处理由一个或多个空格组成的字符串。 (不是null而不是length == 0)

答案 1 :(得分:0)

您可以使用ErrorProvider。它会在您的文本框后显示错误图标。

例如,对于您的一个文本框:

     if (!isOkay(userTextBox.Text))
    {
        errorProvider1.SetError(userTextBox "yourmessage");
    }
    else{
        errorProvider1.Clear();
    }

链接:http://www.dotnetperls.com/errorprovider