对话框表格记住最后一个按钮焦点。如何重置?

时间:2015-03-21 19:47:50

标签: .net vb.net

我有一个以Form.ShowDialog()

打开的自定义表单

此表格作为确认表格。它询问您是否要接受或拒绝以前在ComboBox&中输入的输入的问题。文本框。

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

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

我遇到的问题是:

单击取消时。 form.ShowDialog()已关闭。 (没关系。)

但是当form.ShowDialog()再次打开时。它将重点放在取消按钮上。因此,如果您尝试使用“Enter”键确认输入,则取消它。

我的问题是。为什么Form.ShowDialog()会在关闭后保持对按钮的关注?

Form.ShowDialog()接受按钮“OK”[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

1 个答案:

答案 0 :(得分:5)

当您使用.ShowDialog()关闭时,表格不会像普通表格那样处理它。这是因为一旦Dialog"关闭"它实际上只是隐藏所以我们可以在它真正消失之前从中获取信息。

第二个问题是表单是类(它在每个表的顶部都是这样说的:)

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)遇到类似问题。只是对默认表单实例说不。