当标签页首次出现时,我似乎无法将输入焦点放在文本框上(我使用的是Windows Forms,VB.NET 3.5)。
我在标签页的面板上有一个文本框,我希望在标签页出现时焦点位于文本框上。我希望用户能够立即开始在聚焦文本框中键入,而无需单击文本框。我按照我想要的顺序设置制表位,文本框是第一个制表位。标签停止工作,除了当标签页出现时,焦点不在文本框上,即标签顺序中的第一个。
在标签页的Enter事件处理程序中,我调用文本框的Focus方法,但它返回False并且什么都不做,没有错误消息。我知道我可以访问文本框,因为 在代码的同一点,我可以设置文本框的文本。
如果重要,标签页的布局有点复杂:
frmFoo/TabControl1/TabPageX/Panel1/Panel2/TextBox1
我想将焦点放在TextBox1上。
答案 0 :(得分: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
如果您不执行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事件中设置初始焦点,如上所示。
答案 1 :(得分:11)
尝试:
Me.ActiveControl = TextBox1
或
TextBox1.Select()
答案 2 :(得分:3)
执行control.Focus()
活动中的OnShown
。你不需要任何对我不起作用的DoEvents逻辑。
答案 3 :(得分:1)
您应该使用Selected
TabControl
事件
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.Selected
和TabPage.Enter
,因此可以设置选择TextBox
。我认为还有其他一些因素可以引起人们的关注。请变种
答案 4 :(得分:1)
当控件在标签页上时,我在网上找到的任何解决方案都无法解决问题。
然而,这有效:
(1)将控件的TabIndex设置为0。
(2)在处理tabpage事件的代码中,执行以下操作:
SendKeys.Send("{TAB}")
如果SendKeys似乎不是有效的声明,请确保在代码文件的顶部有以下导入:
Imports System.Windows.Forms
答案 5 :(得分:0)
我发现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
答案 6 :(得分:0)
尝试以下形式的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
这保证可行。
答案 7 :(得分:0)
我曾遇到同样的问题,但我使用Me.activate()
函数解决了这个问题。