【问题标题】:The Dialog Form remembers last button focus. How to reset it?对话框表单会记住最后一个按钮焦点。如何重置它?
【发布时间】:2015-03-21 19:47:50
【问题描述】:

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

此表格用作确认表格。它会询问您是要接受还是拒绝先前在 ComboBox 和 TextBox 中输入的输入。

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

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

我遇到的问题是:

当您单击取消时。 form.ShowDialog() 已关闭。 (这很好。)

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

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

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

【问题讨论】:

  • 我很确定我知道为什么,但是没有看到你的代码我不能确定,所以...
  • 我实际上避免发布代码,因为它有点……凌乱。我需要从一个表单发布代码,然后是另一个表单,最后是对话框表单。所以这就是我试图用文字表达的原因。
  • 问题出在你的代码而不是你的单词。只需要您如何使用/显示表单
  • 我用代码更新了我的帖子。
  • 最后一点,对吧?您真的有一个名为form 的表单吗?这是一个类型名称

标签: .net vb.net


【解决方案1】:

当您使用.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) 时遇到类似问题。对默认表单实例说不。

【讨论】:

  • 我会试试这个,然后会回复你。
  • 感谢您的简洁解释,以及如何解决它。
  • @WelcomeOverflow...您的解决方案终于帮了我...可以用同样的方式完成:Dim res As DialogResult = Form1.ShowDialog() : '*if dialogOK do stuff*' : Form1.Dispose() 还是使用Using/End Using 块的更好方法?谢谢。
猜你喜欢
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
相关资源
最近更新 更多