如何在错误提供程序组件上安装枪口

本文关键字:组件 安装 程序 错误 | 更新日期: 2023-09-27 18:30:52

我正在尝试使用ErrorProvider组件。

我在表单上有一个关闭按钮,当然它在表单的 NE 角也有"X"关闭的东西。

但是,一旦"引发"错误,单击"关闭"按钮或"关闭"框(或任何称为doohicky的东西)都是无响应/无功能的。

我必须执行哪些操作才能允许用户在表单上有错误时将其关闭?

更新:

这是我现在在"关闭"按钮的 OnClick() 处理程序中尝试的代码 - 它仍然拒绝关闭:

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

再次更新:只是为了做鬼脸,我尝试在"关闭"按钮上将"DialogResult"属性从"已取消"更改为"无",但这没有帮助(没想到它会 - 抓住稻草)

也没有将按钮的"原因验证"属性从 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(); 
        }

如何在错误提供程序组件上安装枪口

您可以尝试清除关闭按钮处理程序中的 SetError:

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

还要仔细检查您的按钮取消是否确实连接到此处理程序。放置一个断点,并确保至少进入此函数。