winforms 无法在Windows窗体文本框上设置焦点

qco9c6ql  于 2023-03-24  发布在  Windows
关注(0)|答案(9)|浏览(149)

当一个标签页第一次出现时,我似乎无法将输入焦点放在文本框上(我使用的是Windows窗体,VB.NET 3.5)。
我在标签页的面板上有一个文本框,我希望当选项卡页面出现时焦点在文本框上。我希望用户能够立即在焦点文本框中开始键入,而不必单击文本框。我按照我想要的顺序设置了制表位,文本框是第一个制表位。选项卡停止工作,除了当选项卡页面出现时,焦点不在文本框上,即选项卡顺序中的第一个。
在选项卡页面的Enter事件处理程序中,我调用了文本框的Focus方法,但它返回False,什么也不做,没有错误消息。我知道我可以访问文本框,因为在代码的同一点,我可以设置文本框的文本。
如果重要的话,标签页的布局有点复杂:

frmFoo/TabControl1/TabPageX/Panel1/Panel2/TextBox1

我想将焦点设置在TextBox1上。
1.什么是最好的方法来获得所需的文本框的焦点?
1.如果设置焦点是最好的方法,为什么textbox.focus()方法失败了?

hfsqlsce

hfsqlsce1#

我假设你正在尝试在表单加载事件处理程序中设置焦点?如果是这样,你需要执行Me.Show()来实际创建屏幕控件,然后才能设置焦点。沿着如下:

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

如果不执行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

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

gjmwrych

gjmwrych2#

尝试以下两种方法之一:

Me.ActiveControl = TextBox1

TextBox1.Select()
hrirmatl

hrirmatl3#

OnShown事件中执行control.Focus()。你不需要任何DoEvents逻辑,反正我也不需要。

wvt8vs2t

wvt8vs2t4#

您应该使用TabControlSelected事件

Private Sub TabControl1_Selected(ByVal sender As Object, ByVal e As System.Windows.Forms.TabControlEventArgs) Handles TabControl1.Selected
    If e.TabPage.Name = "TabPage1" Then
        TextBox1.Select()
    End If
End Sub

正如我在检查TabControl.SelectedTabPage.Enter事件可以设置选择TextBox .我认为有一些其他元素窃取焦点.请varify

qlvxas9a

qlvxas9a5#

我在网上找到的任何解决方案都不能解决控件位于选项卡页上的问题。
然而,这起作用:
(1)将控件的TabIndex设置为0。
(2)在处理tabpage事件的代码中,执行以下操作:

SendKeys.Send("{TAB}")

如果SendKeys似乎不是有效的语句,请确保在代码文件的顶部有以下导入:

Imports System.Windows.Forms
up9lanfz

up9lanfz6#

我发现TabControl在Selected事件完成时获得焦点。为了使此工作正常,我使用TabPage的Paint事件来设置所需对象的焦点。

Private Sub TabChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tab1.Paint, Tab2.Paint, Tab3.Paint

    Select Case sender.Name
        Case "Tab1"
            Textbox1.Focus()
        Case "Tab2"
            T3extbox2.Focus()
        Case "Tab3"
            Textbox3.Focus()
    End Select

End Sub
63lcw9qa

63lcw9qa7#

尝试如下形式的Activated事件:

Private Sub Form2_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
    'SendKeys.Send("{TAB}") this line works too
    TextBox1.Focus()
End Sub

这是保证工作。

3xiyfsfu

3xiyfsfu8#

我曾经遇到过同样的问题,但我使用Me.activate()函数解决了它。

33qvvth1

33qvvth19#

你要试试这些吗?

Me.Activate()
            TextBox1.Focus()
            TextBox1.SelectAll()

相关问题