无法将焦点设置在Windows窗体文本框中

Ral*_*Boy 13 vb.net winforms

当标签页首次出现时,我似乎无法将输入焦点放在文本框上(我使用的是Windows Forms,VB.NET 3.5).

我在标签页的面板上有一个文本框,我希望在标签页出现时焦点位于文本框上.我希望用户能够立即开始在聚焦文本框中键入,而无需单击文本框.我按照我想要的顺序设置制表位,文本框是第一个制表位.选项卡停止工作,除了当标签页出现时,焦点不在文本框上,即在Tab键顺序中的第一个.

在标签页的Enter事件处理程序中,我调用文本框的Focus方法,但它返回False并且什么都不做,没有错误消息.我知道我可以访问文本框,因为在代码中的同一点我可以设置文本框的文本.

如果重要,标签页的布局有点复杂:

frmFoo/TabControl1/TabPageX/Panel1/Panel2/TextBox1
Run Code Online (Sandbox Code Playgroud)

我想把重点放在TextBox1上.

  1. 什么是关注所需文本框的最佳方式?
  2. 如果设置焦点是最好的方法,为什么textbox.Focus()方法失败?

Rob*_*ien 24

我假设您正在尝试在表单加载事件处理程序中设置焦点?如果是这样,您需要Me.Show()在设置焦点之前执行实际创建屏幕控制.有点像:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
    Me.Show()
    Application.DoEvents()
    TextBox1.Focus()
End Sub
Run Code Online (Sandbox Code Playgroud)

如果您不这样做Me.Show(),则在加载事件完成之前不会显示表单.

对于选项卡控件,处理_SelectedIndexChanged事件:

Private Sub TabControl1_SelectedIndexChanged(sender As Object, e As System.EventArgs) _
  Handles TabControl1.SelectedIndexChanged

    If TabControl1.SelectedTab.Name = "TabPage1" Then
        TextBox2.Focus()
    End If
    If TabControl1.SelectedTab.Name = "TabPage2" Then
        TextBox4.Focus()
    End If
Run Code Online (Sandbox Code Playgroud)

如果选择的第一个字段是选项卡控件上的文本框,您仍然需要在load事件中设置初始焦点,如上所示.

  • 您也可以在"Me.Shown"的处理程序中执行此操作 (3认同)

key*_*rdP 11

尝试:

Me.ActiveControl = TextBox1
Run Code Online (Sandbox Code Playgroud)

要么

TextBox1.Select()
Run Code Online (Sandbox Code Playgroud)

  • Me.ActiveControl = TextBox1为我工作.谢谢! (2认同)