在我之后将焦点设置为形式。显示

时间:2018-03-16 06:22:40

标签: vb.net visual-studio-2015 focus

我遇到了一个特殊的聚焦问题。我创建了以下“搜索”程序:

  1. 它在后台运行。
  2. 当您双击 Ctrl 键时,它会变为可见。
  3. 您可以输入文本框,因为表单具有焦点。
  4. 如果表单失去焦点(例如我点击我的桌面),它会在3秒后消失。
  5. 我再次双击 Ctrl 键,再次显示它。
  6. 但是这一次,无论我尝试什么,表单都没有聚焦,如果没有先手动点击表单,我就无法输入文本框。
  7. 特别有趣的是,当我从Visual Studios以调试模式运行该程序时,该程序重新关注双击 Ctrl 键并变为可见,我可以立即开始输入文本框。但是,当我构建此程序并单独运行时,程序会出现,但在双击 Ctrl 键时不会重新获得焦点,因此在手动单击表单之前我无法键入文本框。

    在Me.Show()之后我尝试过:

    • Me.Focus()
    • Me.Validate()
    • Me.Select()
    • Textbox1.Select()
    • Textbox1.Focus()

    表单是最顶层的,通常在管理员中运行,但无论如何都会出现同样的问题。

    可以以更简单的方式重新创建问题。使用

    创建表单
    • 按钮(“Button1”)
    • 文本框
    • 两个定时器(“hideForm”,“showForm”),间隔为1000

    代码:

    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之外运行它,则表单将重新出现而不会聚焦,并且您无法在不手动选择表单的情况下键入文本框。

    很抱歉这个冗长的解释。这是一个难以正确描述的问题。

4 个答案:

答案 0 :(得分:2)

尝试使用表单事件处理程序Activate。在该方法内,您可以使用setFocus来获得该特定文本框的焦点。我知道这个答案为时已晚。希望这对某人有帮助。

Private Sub Form_Activate()
    TextBox1.SetFocus
End Sub

答案 1 :(得分:0)

尝试Form_Activate的事件处理程序,并在该处理程序中将焦点传递给文本框。

您可以尝试Focus而不是TextBox1.SelectThis SO link提供了一些有关FocusSelect之间差异的其他信息。

答案 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 命令,这仍然困扰着我。