Я пытаюсь использовать компонент ErrorProvider.
У меня есть кнопка «Закрыть» в форме, и, конечно, у нее также есть «X» для закрытия в северо-восточном углу формы.
Однако после того, как ошибка была «поднята», нажатие кнопки «Закрыть» или окна «Закрыть» (или как там это ни называется) не отвечает/не работает.
Что я должен сделать, чтобы пользователь мог закрыть форму, если в ней есть ошибки?
Обновлять:
Вот код, который я сейчас пробую в обработчике 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();
}