- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个自定义表单,作为 Form.ShowDialog() 打开
此表格充当确认表格。它询问您是否要接受或拒绝先前在 ComboBox 和 TextBox 中输入的输入。
如果单击“确定”,输入将保存到 Excel 文件中。
如果单击“取消”,则不会保存输入。
我遇到的问题是:
当您单击“取消”时。 form.ShowDialog() 关闭。 (这很好。)
但是当 form.ShowDialog() 再次打开时。它将焦点保留在“取消”按钮上。因此,如果您尝试使用“Enter”键确认输入,则会取消它。
我的问题是。为什么 Form.ShowDialog() 关闭后焦点仍保留在按钮上?
Form.ShowDialog() 具有接受按钮“确定”[tabindex = 1] 和取消按钮“取消”[tabindex = 2],它们设置为 Enter 键,以及 Esc 键。
(再次注意)关闭表单后按钮的焦点仍然存在。
使用对话框的代码部分:
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
最佳答案
当您使用 .ShowDialog()
关闭表单时,不会像普通表单那样将其丢弃。这是因为一旦对话框“关闭”,它实际上只是隐藏起来,这样我们就可以在它真正消失之前从中获取信息。
第二个问题是表单是类(它在每个类的顶部都这么说:)
Public Class Form1
...
因此,应该创建它们的实例。 VB 允许 Form1.Show
或 Form1.ShowDialog()
使用“默认实例”,但遗憾的是它确实这样做了。
结合这 2 个花絮,您会发现上次显示的表单仍处于与上次使用它时相同的状态,包括上次获得焦点的控件。您只是第一次使用表单的“新鲜副本”,之后,您只是重用旧实例。补救措施:
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
最终,您在使用其他表单的默认实例 (LForm.Show
) 时也会遇到类似的问题。对默认表单实例说不。
关于.net - 对话框窗体会记住最后一个按钮焦点。如何重置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29187270/
我是一名优秀的程序员,十分优秀!