FormClosing 事件中平板电脑和消息框之间的问题

Issue between tablet and messagebox on FormClosing event

我正在开发一个 WinForms 应用程序,运行 遇到了一个非常奇怪的错误。我在 FormClosing 事件中放置 MessageBox 时遇到问题,导致主窗体调整大小并终止我的自定义对话框上的显示。除了 MessageBox 之外,我取出了所有其他代码来确认问题。该问题未出现在 Windows PC 桌面上,但仅出现在 MS Surface Go 上。这是 FormClosing

的工作代码
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing

        If e.CloseReason = CloseReason.UserClosing Then
            Dim form As New frm_NumEnter
            form.isPassword = True
            form.String1 = closeString
            If form.ShowDialog(Me) = DialogResult.OK Then
                If form.result = "####" Then
                    form.Close()
                Else
                    'MessageBox.Show("Password is Wrong. Please Retry.") Do not turn this on. Causes display issues.
                    form.Close()
                    Form1_FormClosing(sender, e)
                End If
            Else
                e.Cancel = True
            End If
        End If

    End Sub

消息框目前已被注释掉,因为那是工作代码。

有人知道为什么会这样吗?我一直在寻找答案,但找不到。

试试这个

Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
    If e.CloseReason = CloseReason.UserClosing Then
        e.Cancel = True
        Dim form As New frm_NumEnter
        form.isPassword = True
        form.String1 = "closeString"
        If form.ShowDialog(Me) = DialogResult.OK Then
            If form.result = "####" Then
                form.Close()
                e.Cancel = False
            Else
                MessageBox.Show("Password is Wrong. Please Retry.")
                form.Close()
            End If
        End If
    End If
End Sub

基于汉斯的评论。

问题是 Surface Go 默认调用 WPF MessageBox class。使用更明确地调用 Forms.MessageBox.Show(...) 的 MessageBox class 解决了这个问题。这仅发生在与应用程序一起关闭的表单上。我不确定这是为什么,但我推测这是因为 WPF 不像 WinForms 那样使用 FormClosing 事件。