Errorprovider показывает ошибку при использовании кнопки закрытия Windows (X)

StackOverflow https://stackoverflow.com/questions/2481706

Вопрос

Есть ли какой-нибудь способ отключить проклятого поставщика ошибок, когда я пытаюсь закрыть форму с помощью кнопки закрытия 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top