2012-05-09 4 views
1

У меня есть два текстовых поля. Мне нужно проверить их, прежде чем предпринимать какие-либо другие действия.Проверка TextBox не работает

private ErrorProvider _errorProviderEmail = new ErrorProvider(); 
private ErrorProvider _errorProviderPass = new ErrorProvider(); 
public FormLogin() 
{ 
    InitializeComponent(); 

    textBoxEmail.Validating += TextBoxEmailValidating; 
    textBoxPass.Validating += TextBoxPassValidating; 

    textBoxEmail.Validated += TextBoxEmailValidated; 
    textBoxPass.Validated += TextBoxPassValidated; 

    textBoxEmail.Text = ""; 
    textBoxPass.Text = ""; 
} 

void TextBoxPassValidated(object sender, EventArgs e) 
{ 
    _errorProviderPass.SetError(textBoxPass, ""); 
} 

void TextBoxEmailValidated(object sender, EventArgs e) 
{ 
    _errorProviderEmail.SetError(textBoxEmail, ""); 
} 

void TextBoxPassValidating(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    if (!string.IsNullOrEmpty(textBoxPass.Text)) return; 
    e.Cancel = true; 
    _errorProviderPass.SetError(textBoxPass,"Password is required!"); 
} 

void TextBoxEmailValidating(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    if (!string.IsNullOrEmpty(textBoxEmail.Text)) return; 
    e.Cancel = true; 
    _errorProviderEmail.SetError(textBoxEmail, "Email address is required!"); 
} 

Проблема заключается в том, что только событие для проверки textBoxEmail срабатывает, что может быть неправильно здесь, и почему проверочное мероприятие для textBoxPass не срабатывает?

+0

Вам необходимо заполнить этот вопрос .. так, как вы представили его нет никакого способа, кто может помочь вам. почему вы добавляете свои события динамичным, а не статическим? – gbianchi

+0

@gbianchi теперь более ясно для вас, что там происходит? – Constantin

+0

Второе событие не срабатывает при определенных условиях? Если первый из них не прошел проверку, делает ли второй огонь? Если первый _passes_ валидация, второй огонь? – David

ответ

2

Отдельные элементы управления TextBox проверяют только, когда они теряют фокус.

Try вызов ValidateChildren() функции формы, чтобы заставить каждый элемент управления, чтобы назвать их обработчик проверки:

private void button1_Click(object sender, EventArgs e) { 
    if (this.ValidateChildren()) { 
    this.Close(); 
    } 
} 

Кроме того, вам нужен всего лишь один ErrrorProvider компонента.

+0

спасибо, ваше решение работает:) – Constantin

0

Событие Validating возникает только тогда, когда элемент управления, получающий фокус, имеет свойство CausesValidation, равное true.

Например, если вы написали код в TextBox1 «s Validating события, и нажать кнопку OK (CausesValidation = true), то событие Validating поднимается, но если вы нажмете на кнопку (CausesValidation = false) Отменить то Validating событие не поднял.

Источник на CodeProject

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