我有一个自定义窗体,以Form.ShowDialog()打开
此表格作为确认表格.它询问您是否要接受或拒绝以前在ComboBox和TextBox中输入的输入的问题.
如果单击"确定",则输入将保存到Excel文件中.
如果单击"取消",则不会保存输入.
我遇到的问题是:
单击取消时.form.ShowDialog()已关闭.(没关系.)
但是当form.ShowDialog()再次打开时.它将重点放在取消按钮上.因此,如果您尝试使用"Enter"键确认输入,则取消它.
我的问题是.为什么Form.ShowDialog()在关闭后保持对按钮的关注?
Form.ShowDialog()具有接受按钮"OK"[tabindex = 1],取消按钮"取消"[tabindex = 2],它们被设置为Enter键和Esc键.
(再次注意)关闭表格后,按钮的焦点仍然存在.
使用Dialog的代码部分:
ElseIf ComboBoxBP.SelectedItem = ComboBoxBP.SelectedItem And TextBoxBP.Text = TextBoxBP.Text Then
form.Label1.Text = ComboBoxBP.SelectedItem
form.Label2.Text = TextBoxBP.Text
form.ShowDialog()
If form.DialogResult = Windows.Forms.DialogResult.Yes Then
SiE()
ElseIf form.DialogResult = Windows.Forms.DialogResult.No Then
LabelBPBot.Text = "Canceled."
End If
End If
Run Code Online (Sandbox Code Playgroud)
当您使用.ShowDialog()关闭时,表格不会像普通表格一样处理它.这是因为一旦Dialog"关闭"它实际上只是隐藏所以我们可以在它实际消失之前从中获取信息.
第二个问题是表单是类(它在每个表单的顶部都是这样:)
Public Class Form1
...
Run Code Online (Sandbox Code Playgroud)
因此,应该创建它们的实例.VB允许Form1.Show或Form1.ShowDialog()使用"默认实例",这是一种耻辱.
结合这两个花絮和你所拥有的是你上次展示的形式仍然处于与你上次使用时相同的状态,包括最后一个聚焦控制.您只是第一次使用表单的"新副本",之后,您只是重用旧实例.补救:
Using Dlg As New Form1 ' form1 is the class, dlg is the instance
... do stuff
Dim res As DialogResult = Dlg.ShowDialog()
If res = Windows.Forms.DialogResult.OK Then
'... do stuff
End If
End Using ' dispose of Dlg
Run Code Online (Sandbox Code Playgroud)
最终,您将使用其他表单的默认实例(LForm.Show)遇到类似的问题.只是对默认表单实例说不.