2012-05-09 20 views
1

私は2つのテキストボックスを持っています。私は他の行動をとる前にそれらを検証する必要があります。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

2番目のイベントは特定の条件下では起動しませんか?最初の検証が失敗した場合、2番目の検証は失敗しますか?最初のものが妥当性検査を通過した場合、第2のものは発火しますか? – David

答えて

2

個々のTextBoxコントロールは、フォーカスが失われたときだけ検証します。

は、その検証ハンドラを呼び出すために、各コントロールを強制するために、フォームのValidateChildren()関数を呼び出してみてください。

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

はまた、あなただけの1 ErrrorProviderのコンポーネントを必要としています。

+0

ありがとう、 ) – Constantin

0

Validatingイベントは、フォーカスを受け取るコントロールにCausesValidationプロパティがtrueに設定されている場合にのみ発生します。

たとえば、あなたがTextBox1さんValidatingイベントにコードを書かれている、とあなたはOKボタン(CausesValidation = true)をクリックした場合、その後Validatingイベントが発生していますが、キャンセルボタン(CausesValidation = false)をクリックした場合、その後Validatingイベントがあります育ちません。

あなたはこの質問を埋めるために必要CodeProject

関連する問題