gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:36:02 25 4
gpt4 key购买 nike

我有一个自定义表单,作为 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.ShowForm1.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com