必须单击表格才能获得焦点
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()
我有一个主窗体,其中包含用于打开自定义消息框窗体的按钮。如果它只是一条消息并且用户只需单击“确定”,它就可以正常工作。但是如果那个消息框的答案很重要,比如 "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()