2014-10-30 3 views
1

Я новичок в C#, я изучил программу 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)); 
    } 

Есть ли какие элегантные или оптимизированные способы сделать это правильно? Я нашел некоторых поставщиков ошибок, но, видимо, поставщики ошибок открыли всплывающее окно, и мне просто нужно «красное сообщение об ошибке ниже кнопок».

Можете ли вы мне помочь? :)

+0

проверить эту статью http://www.codeproject.com/Articles/13922/Validate-user-input-in- Windows-Forms –

+0

Поскольку у вас есть только 4 текстовых поля для проверки, рассмотрели ли вы возможность написать функции, которые проверяют все, и вызывать эту функцию в коде за кнопкой «Подтверждение»? – smr5

ответ

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 и не длина == 0)

0

Вы можете использовать ErrorProvider. Он показывает значок ошибки после вашего текстового поля.

Для одного из ваших текстовых полей, например:

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

Ссылка: http://www.dotnetperls.com/errorprovider

Смежные вопросы