我遇到了一个特殊的聚焦问题。我创建了以下“搜索”程序:
特别有趣的是,当我从Visual Studios以调试模式运行该程序时,该程序重新关注双击 Ctrl 键并变为可见,我可以立即开始输入文本框。但是,当我构建此程序并单独运行时,程序会出现,但在双击 Ctrl 键时不会重新获得焦点,因此在手动单击表单之前我无法键入文本框。
在Me.Show()之后我尝试过:
表单是最顶层的,通常在管理员中运行,但无论如何都会出现同样的问题。
可以以更简单的方式重新创建问题。使用
创建表单代码:
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
hideForm.Start()
sender.Enabled = False
End Sub
Private Sub hideForm_Tick(sender As Object, e As EventArgs) Handles hideForm.Tick
Me.Hide()
hideForm.Stop()
showForm.Start()
End Sub
Private Sub showForm_Tick(sender As Object, e As EventArgs) Handles showForm.Tick
showForm.Stop()
Me.Show()
Me.Activate()
End Sub
End Class
单击按钮,然后立即单击其他窗口(以便表单失去焦点)。等到表单被隐藏并再次显示。文本框应该有焦点。尝试输入。
如果程序在Visual Studio中以调试模式运行,则按预期工作。如果您构建程序并在VS之外运行它,则表单将重新出现而不会聚焦,并且您无法在不手动选择表单的情况下键入文本框。
很抱歉这个冗长的解释。这是一个难以正确描述的问题。
答案 0 :(得分:2)
尝试使用表单事件处理程序Activate
。在该方法内,您可以使用setFocus
来获得该特定文本框的焦点。我知道这个答案为时已晚。希望这对某人有帮助。
Private Sub Form_Activate()
TextBox1.SetFocus
End Sub
答案 1 :(得分:0)
尝试Form_Activate
的事件处理程序,并在该处理程序中将焦点传递给文本框。
您可以尝试Focus
而不是TextBox1.Select
。 This SO link提供了一些有关Focus
和Select
之间差异的其他信息。
答案 2 :(得分:0)
我尝试(并为我工作)的是在事件处理程序Focus()
中设置文本框的Shown()
:
Private Sub UsersForm_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
Me.UserText.Focus()
End Sub
注意:Select()
方法只是没有完成任务。希望这对与此问题相同的其他人有所帮助。
答案 3 :(得分:0)
在“设计视图”窗口中选择要为其分配焦点的文本框。
在“属性”窗口下,将 TabIndex
设置为 0(零)。
我什至不必使用 TextBox1.Focus()
命令。 TabIndex
覆盖了 Focus 命令,这仍然困扰着我。