Errorprovider показывает ошибку при использовании кнопки закрытия Windows (X)
-
21-09-2019 - |
Вопрос
Есть ли какой-нибудь способ отключить проклятого поставщика ошибок, когда я пытаюсь закрыть форму с помощью кнопки закрытия Windows (X).Он запускает проверку, и пользователь должен заполнить все поля, прежде чем он сможет закрыть форму .. это будет проблемой удобства использования, потому что многие склонны закрывать форму с помощью кнопки (X).
я поместил кнопку для отмены, которая приводит к проверке значения false, и она также запускает проверку.
я нашел, что кто-то говорит, что если вы используете функцию Form.Close(), выполняется проверка...как я могу обойти эту раздражающую функцию?
у меня есть структура MDI, и я показываю форму, используя
CreateExam.MdiParent = Me
CreateExam.Show()
в меню родительского элемента mdi щелкните
и сделайте это в качестве установленной проверки
Private Sub TextBox1_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
If String.IsNullOrEmpty(TextBox1.Text) Then
Err.SetError(TextBox1, "required")
e.Cancel = True
End If
If TextBox1.Text.Contains("'") Then
Err.SetError(TextBox1, "Invalid Char")
e.Cancel = True
End If
End Sub
Любая помощь очень ценится.поиск в Google показал результаты только там, где у пользователей возникали проблемы с использованием командной кнопки в качестве кнопки закрытия, и это тоже вызывает проблему в моем случае
Решение
Метод ValidateChildren() предотвращает закрытие формы.Вставьте этот код в свою форму, чтобы исправить это:
protected override void OnFormClosing(FormClosingEventArgs e) {
e.Cancel = false;
}
Другие советы
Это довольно простое исправление в вашей форме Closing
Событие, установите флаг, указывающий на выход из формы, например blnLeave
, когда Форма будет загружена, установите флаг на False
, когда Closing
событие запускается, установите это значение на True
внутри этого обработчика событий, тогда изменение следующим образом было бы
Private Sub TextBox1_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating If (blnLeave) Then e.Cancel = False; Return End If If String.IsNullOrEmpty(TextBox1.Text) Then Err.SetError(TextBox1, "required") e.Cancel = True End If If TextBox1.Text.Contains("'") Then Err.SetError(TextBox1, "Invalid Char") e.Cancel = True End If End Sub
Редактировать: Исправил этот ответ для включения в соответствии с комментариями OP.Мое предложение состоит в том, чтобы обработать Закрытое событие формы, как показано на рисунке
Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed blnLeave = True End Sub
И обработайте это здесь, в переопределении процедуры окна формы, как показано здесь....
Private Const SC_CLOSE As Integer = &HF060 Private Const WM_MENUSELECT As Integer = &H11F Private Function LoWord(ByVal Num As Integer) As Integer LoWord = Num & &HFFFF End Function Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) If m.Msg = WM_MENUSELECT Then If LoWord(m.WParam.ToInt32()) = SC_CLOSE Then ' Handle the closing via system Menu blnLeave = True End If End If MyBase.WndProc(m) End Sub