对话框窗体会记住最后一个按钮的焦点.如何重置



我有一个自定义表单,它以form.ShowDialog()的形式打开

此表单充当确认表单。它询问您是否要接受或拒绝以前在ComboBox&文本框。

如果单击"确定",则输入将保存到Excel文件中。

如果单击"取消",则不会保存输入。

我遇到的问题是:

单击"取消"时。窗体.ShowDialog()已关闭。(这很好。)

但是当窗体.ShowDialog()再次打开时。它将焦点保留在"取消"按钮上。因此,如果您尝试用"Enter"键确认输入,您将取消它。

我的问题是,为什么Form.ShowDialog()在关闭后仍将焦点放在按钮上?

Form.ShowDialog()具有接受按钮"OK"[tabindex=1]和取消按钮"cancel"[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.ShowForm1.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

最终,您将使用其他表单的默认实例(LForm.Show)遇到类似的问题。只对默认表单实例说不。

最新更新