1

2つのテキストボックスがあります。他のアクションを実行する前に、それらを検証する必要があります。

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ないのはなぜですか。

4

2 に答える 2

3

個々のTextBoxコントロールは、フォーカスを失ったときにのみ検証します。

フォームのValidateChildren()関数を呼び出して、各コントロールに検証ハンドラーを呼び出させてみてください。

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

また、必要なErrrorProviderコンポーネントは1つだけです。

于 2012-05-09T15:29:48.747 に答える
0

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

たとえば、TextBox1Validatingイベントにコードを記述し、[OK]ボタン(CausesValidation = true)をクリックすると、検証イベントが発生しますが、[キャンセル]ボタン(CausesValidation = false)をクリックすると、Validatingイベントは発生しません。

CodeProjectのソース

于 2017-02-16T16:31:33.867 に答える