1

ErrorProviderコンポーネントを使用しようとしています。

フォームに閉じるボタンがあります。もちろん、フォームのNEコーナーに「X」の閉じるボタンもあります。

ただし、エラーが「発生」すると、[閉じる]ボタンまたは[閉じる]ボックス(またはそのドゥーヒッキーと呼ばれるもの)をクリックしても応答しなくなり、機能しなくなります。

エラーが発生したときにユーザーがフォームを閉じることができるようにするには、どうすればよいですか?

アップデート:

これが私が今「閉じる」ボタンのOnClick()ハンドラーで試しているコードです-それでも閉じることを拒否します:

private void buttonCancel_Click(object sender, EventArgs e) {
  formValidation.SetError(this, String.Empty);
  Close();
}

再度更新:しかめっ面のために、「閉じる」ボタンで「DialogResult」プロパティを「キャンセル済み」から「なし」に変更しようとしましたが、それは役に立ちませんでした(期待していませんでした-ストローをつかむ)

ボタンの「CausesValidation」プロパティをTrueからFalseに変更しませんでした...

もう一度更新:

投稿に適している場合とそうでない場合があるすべての関連事項は次のとおりです。

        . . .
              const int MINIMUM_PASSWORD_LENGTH = 5;

        private string originalPassword {
            get { return textCurrentPassword.Text; }
        }

        private string newCandidatePassword1 {
            get { return textNewPassword.Text; }
        }

        private string newCandidatePassword2 {
            get { return textNewPasswordRepeated.Text; }
        }

        public ChangePassword() {
            InitializeComponent();
        }

        private void textCurrentPassword_Validating(object sender, CancelEventArgs e) {
            string error = null;

            if (originalPassword.Equals(String.Empty)) {
                error = currentPasswordInvalid;
                e.Cancel = true;
                //textCurrentPassword.Focus(); probably unnecessary because of .SetError() below
            };

            // TODO: Replace 1==2 with call that compares password with the current user's confirmed password
            if (1 == 2) {
                error = currentPasswordDoesNotMatchCurrentUser;
                e.Cancel = true;
            }

            formValidation.SetError((Control)sender, error);
            if (null != error) {
                ;
            }
        }

        private void textNewPassword_Validating(object sender, CancelEventArgs e) {
            string error = null;

            if (newCandidatePassword1.Length < 5) {
                error = newPasswordInvalid;
                e.Cancel = true;
            }

            formValidation.SetError((Control)sender, error);
            if (null != error) {
                ;
            }
        }

        private void textNewPasswordRepeated_Validating(object sender, CancelEventArgs e) {
            string error = null;

            // Long enough?
            if (newCandidatePassword2.Length < MINIMUM_PASSWORD_LENGTH) {
                error = newPasswordInvalid;
                e.Cancel = true;
            }

            // New passwords match?
            if (!newCandidatePassword2.Equals(newCandidatePassword1)) {
                error = newPasswordsDoNotMatch;
                e.Cancel = true;
            }

            // They match, but all three match (undesirable)
            if (!originalPassword.Equals(newCandidatePassword1)) {
                error = newPasswordSameAsOld;
                e.Cancel = true;
            }

            // Unique across the user base?
            // TODO: Replace 1==2 with call that verifies this password is unique 
            if (1 == 2) {
                error = newPasswordNotUnique;
                e.Cancel = true;
            }

            formValidation.SetError((Control)sender, error);
            if (null != error) {
                ;
            }
        }

        private void buttonCancel_Click(object sender, EventArgs e) {
            foreach (Control ctrl in this.Controls) { 
                formValidation.SetError(ctrl, string.Empty); 
            } 
            Close(); 
        }
4

1 に答える 1

3

[閉じる]ボタンハンドラーでSetErrorをクリアしてみてください。

private void buttonCancel_Click(object sender, EventArgs e)
{
    foreach (Control ctrl in this.Controls)
    {
        formValidation.SetError(ctrl, string.Empty);
    }
    Close();
}

また、buttonCancelが実際にこのハンドラーに接続されていることを再確認してください。ブレークポイントを設定し、少なくともこの関数を使用していることを確認してください。

于 2012-04-12T23:05:23.593 に答える