Vb.net 设置焦点,在我之后形成。显示

Vb.net 设置焦点,在我之后形成。显示,vb.net,visual-studio-2015,focus,Vb.net,Visual Studio 2015,Focus,我遇到了一个特殊的焦点问题。我创建了以下“搜索”程序: 它在后台运行 双击Ctrl键时,它将可见 您可以键入文本框,因为表单具有焦点 如果窗体失去焦点(例如,我单击桌面),它将在3秒钟后消失 我再次双击Ctrl键,它再次变得可见 但这一次,不管我怎么做,表单都没有焦点,我无法在没有先手动点击表单的情况下输入文本框 特别有趣的是,当我在Visual Studio的调试模式下运行此程序时,双击Ctrl键并显示时,程序会重新聚焦,我可以立即开始在文本框中键入内容。但是,当我构建并单独运行该程序时,该程

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

  • 它在后台运行
  • 双击Ctrl键时,它将可见
  • 您可以键入文本框,因为表单具有焦点
  • 如果窗体失去焦点(例如,我单击桌面),它将在3秒钟后消失
  • 我再次双击Ctrl键,它再次变得可见
  • 但这一次,不管我怎么做,表单都没有焦点,我无法在没有先手动点击表单的情况下输入文本框
  • 特别有趣的是,当我在Visual Studio的调试模式下运行此程序时,双击Ctrl键并显示时,程序会重新聚焦,我可以立即开始在文本框中键入内容。但是,当我构建并单独运行该程序时,该程序会出现,但双击Ctrl键后不会重新获得焦点,因此在手动单击表单之前,我无法在文本框中键入内容

    在我之后。Show()我尝试过:

    • Me.Validate()
    • Me.Select()
    • Textbox1.Select()
    • Textbox1.Focus()
    表单是最顶层的,通常在administrator中运行,但无论如何都会出现相同的问题

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

    • 按钮(“按钮1”)
    • 文本框
    • 两个计时器(“hideForm”、“showForm”),间隔均为1000
    代码:

    单击按钮,然后立即单击另一个窗口(使窗体失去焦点)。等待窗体被隐藏并再次显示。文本框应该有焦点。试着打字

    如果该程序在Visual Studio中以调试模式运行,它将按预期工作。如果您构建程序并在VS之外运行,则表单将重新出现而不显示焦点,并且如果不手动选择表单,则无法在文本框中键入内容。


    对不起,我的解释太冗长了。这是一个很难正确描述的问题。

    尝试
    表单激活的事件处理程序,并在该处理程序中将焦点传递给文本框


    您也可以尝试
    TextBox1,而不是
    Focus
    。选择
    。提供一些附加信息以及有关
    焦点
    选择
    之间差异的信息,请尝试表单事件处理程序
    激活
    。在该方法中,您可以使用
    setFocus
    获得该特定文本框的焦点。我知道这个答案太晚了。但希望这能帮助别人

    Private Sub Form_Activate()
        TextBox1.SetFocus
    End Sub
    
    我尝试(并为我工作)的是在事件处理程序
    show()
    中设置文本框的
    Focus()


    注意:
    Select()。我希望这能帮助其他有同样问题的人。

    在“设计视图”窗口中选择要指定焦点的文本框。 在属性窗口下,将
    选项卡index
    设置为0(零)


    我甚至不必使用
    TextBox1.Focus()
    命令。
    TabIndex
    覆盖了Focus命令,这仍然困扰着我。

    我现在已经尝试过了。在“Form1_Activated”下,我使用了Textbox1.Focus(),但运气不好。文本框看起来是选中的(蓝色边框),但表单本身不是,因此不接受按键。有趣的是,事件实际上会触发,但表单肯定没有聚焦,因为按键仍然会传递到我在表单显示之前聚焦的内容,无论是这个网络浏览器还是我的桌面,等等。表单标题栏的颜色不适合表示具有焦点的表单。@Timothy:添加了另一个选项和有用的链接。
    form.Activate
    在表单接收焦点时发生。请尝试使用
    表单。改为显示
    。@VisualInventHello并感谢您的回复。我现在尝试使用
    Focus
    Select
    ,我在
    表单下都尝试过。Show
    表单。Activated
    您试图违反一个非常基本的Windows可用性规则,当用户与另一个窗口交互时,您不能将窗口推到用户的脸上。按CTRL键可使操作系统确信当前窗口需要保持焦点。你将不得不以不同的方式来实现这一点,谷歌“winforms热键”用于基本点击。NotifyIcon是另一个标准解决方案。@HansPassant嘿,谢谢你的反馈。同样值得注意的是,如果在我调用
    Me.Hide
    时程序有焦点,它将强制将焦点重新转移到
    Me.Show
    ,但是如果应用程序没有焦点使用
    Me.Hide
    ,这将不起作用。我将检查一些其他选项,但这个程序的想法是能够执行任务而不使用鼠标。我看看能找到什么。当你按Windows键时,“开始”菜单将窃取焦点。这正是我想要的。
    Private Sub Form_Activate()
        TextBox1.SetFocus
    End Sub
    
    Private Sub UsersForm_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown
        Me.UserText.Focus()
    End Sub