必须单击表格才能获得焦点

Have to Click Form To Give Focus

我有一个主窗体,其中包含用于打开自定义消息框窗体的按钮。如果它只是一条消息并且用户只需单击“确定”,它就可以正常工作。但是如果那个消息框的答案很重要,比如 "Are you sure you want to delete this file?" 我使用 while 循环等待用户响应,一旦他们响应,然后将标志从 false 设置为 true 并记录响应。

由于某种原因,任何使用 while 循环等待的响应都会导致消息框表单在被调用后没有焦点。要求用户先点击表格,然后点击确定。

到目前为止,我已经尝试使用 form.Activate() 而不是 form.Show(),并在 while 循环中调用 Application.DoEvents(),因为我认为 while 循环正在将焦点从被调用后立即消息形式。都没有解决问题。

来自按预期工作的消息框的代码:

If cmbLoadProgram.SelectedItem = "" Then
    frmMessageBox.lblHeader.Text = "Set-Up"
    frmMessageBox.lblMessageText.Text = "No Program Selected!"
    frmMessageBox.Show()
    Exit Sub
End If

需要点击两次的消息框代码:

If btnGetHexStart.Visible = False And cmbStartCondition.SelectedItem = "Pixel" Then
    frmMessageBox.lblHeader.Text = "Hex Set-Up"
    frmMessageBox.lblMessageText.Text = "Reset Hex Code Data?"
    frmMessageBox.Show()
    Me.Hide()
        While Flag = False
            If frmMain.OKCancel = "OK" Then
                btnGetHexStart.Visible = True
                btnGetHexStart.Enabled = True
                btnGetHexStart.PerformClick()
                Flag = True
            End If
        frmMain.delay(20)
        End While
End If

我希望这两个选项只需单击一次即可确认或取消操作。而不是 while 循环问题需要点击两次。

不需要创建表单,可以使用DialogResult和MessageBox.Show,代码:

  Dim Result As DialogResult = MessageBox.Show("Set-Up" & vbCrLf & "No Program Selected!", "Warning", MessageBoxButtons.OKCancel)

    If Result = DialogResult.OK Then

    ElseIf Result = DialogResult.Cancel Then

    End If

这只是我的一个想法,如何打开msgboxform,这里我们需要MessageForm和一个module1,例如:

Public Class MessageForm
    'You can assign any variable to show any data in messageform display
    Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click
        theResult = MsgBoxResult.Ok
        Me.Close()
        Me.Dispose()
    End Sub

    Private Sub bttcancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttcancel.Click
        theResult = MsgBoxResult.Cancel
        Me.Close()
        Me.Dispose()
    End Sub
End Class

Module Module1
    Public theResult As MsgBoxResult

    'You can add some parameter here to submit to MessageForm
    Public Function myMessageBox() As MsgBoxResult
        myMessageBox = MsgBoxResult.Cancel
        MessageForm.ShowDialog()
        myMessageBox = theResult
    End Function
End Module

然后您可以像这样在任何地方调用 myMessageBox:

'if myMessageBox procedure have parameter, apply the paramters too
dim myRslt = myMessageBox()