2017-07-19 10 views
0

が、私はそれにいくつかの要素を持つカスタムユーザーコントロールを持ってトリガされたテキストボックスのイベントを検証した後、解雇されることはありませんので、以下のようになります。私はボタンをクリックした場合のように、今ボタンのClickイベントは

UserControl 
    Textbox 
    Button 
    .... 

を私はタイトルで述べたように、テキストボックスはフォーカスを失い、Validatingイベントが発生します...しかし、ボタンのクリックは発動しません...これは通常の動作だと思います...しかし、ボタンを実行する適切な方法は何ですか?検証が失敗しなかった場合は、イベントをクリックしますか?ここで

私が検証に使用コードです:

private void txtPassword_Validating(object sender, CancelEventArgs e) 
     { 
      string errorMessage = _uiValidator.ValidatePassword(txtPassword.Text); 

      errRegistration.SetError(txtPassword, errorMessage); 
     } 

だからerrRegistration.SetError()が正常に実行されていた - にErrorMessageは、nullで検証エラーを意味していないので、私は、私はこれをチェックし(それで大丈夫だと思いますブレークポイントを置くことによって)。

そして、これは、ボタンのClickイベントの実装です:

private void btnRegisterUser_Click(object sender, EventArgs e) 
    { 
     _uiValidator.ValidatePassword(txtUsername.Text); 
     //validate other fields here... 

     if (_uiValidator.IsValid()) 
     { 
      this._controller.Save(); 

     }else{ 
      MessageBox.Show("...", "Title", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 
+0

テキストボックスのデータはバインドされていますか?あなたが '_Validating'ハンドラ本体をコメントアウトするとどうなりますか?イベントを取り消すものがなければなりません( 'e.Cancel'を' true'に設定する) –

+0

データがバインドされていません...テキストボックスのText値を手動で設定します。私は、私のコードでe.Cancel = trueを持っていないとかなり肯定的です。 – Whirlwind

答えて

0
private void btnRegisterUser_Click(object sender, System.EventArgs e) 
{ 
    foreach (Control control in this.Controls) 
    { 
     // Set focus on control 
     control.Focus(); 
     // Validate causes the control's Validating event to be fired, 
     // if CausesValidation is True 
     if (!Validate()) 
     { 
      DialogResult = DialogResult.None; 
      return; 
     } 
    } 
} 

はそのような何かを試してみてください。

+0

私の質問を追加コードで更新しました... – Whirlwind

+0

検証エラーの原因となるデータを入力しようとしましたか? – WabbitHunter

+0

私の更新されたコードをチェックして、あなたが達成しようとしていることを理解していると思います。 Windowsフォームでは、ASP.NETより多くの検証コーディングが必要です。 – WabbitHunter