[英]Can't set focus on a Windows Forms textbox
當標簽頁第一次出現時,我似乎無法將輸入焦點放在文本框上(我使用的是 Windows Forms、VB.NET 3.5)。
我在標簽頁的面板上有一個文本框,當標簽頁出現時,我希望焦點在文本框上。 我希望用戶能夠立即開始在焦點文本框中輸入,而無需單擊文本框。 我按我想要的順序設置了制表位,文本框是第一個制表位。 選項卡停止工作,除了當“選項卡”頁面出現時,焦點不在文本框上,即標簽順序中的第一個。
在標簽頁的 Enter 事件處理程序中,我調用了文本框的 Focus 方法,但它返回 False 並且什么都不做,沒有錯誤消息。 我知道我可以訪問文本框,因為在代碼中的同一點我可以設置文本框的文本。
如果重要的話,標簽頁的布局有點復雜:
frmFoo/TabControl1/TabPageX/Panel1/Panel2/TextBox1
我想將焦點放在 TextBox1 上。
我假設您正在嘗試在表單加載事件處理程序中設置焦點? 如果是這樣,您需要執行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
如果選擇的第一個字段是選項卡控件上的文本框,您仍然希望在加載事件中設置初始焦點,如上所示。
嘗試:
Me.ActiveControl = TextBox1
或者
TextBox1.Select()
在OnShown
事件中執行control.Focus()
。 你不需要任何對我不起作用的 DoEvents 邏輯。
您應該使用TabControl
的Selected
事件
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
事件可以設置 Select TextBox
。 我認為還有其他一些元素在竊取焦點。 請核實
當控件位於標簽頁上時,我在網上找到的任何解決方案都不能解決問題。
但是,這有效:
(1)設置控件的TabIndex為0。
(2) 在處理 tabpage 事件的代碼中,執行以下操作:
SendKeys.Send("{TAB}")
如果 SendKeys 似乎不是一個有效的語句,請確保在代碼文件的頂部有以下導入:
Imports System.Windows.Forms
我發現當 Selected 事件完成時 TabControl 獲得焦點。 為了完成這項工作,我使用 TabPage 的 Paint 事件來設置所需 object 的焦點。
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
嘗試如下形式的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
這是保證工作。
我曾經遇到過同樣的問題,但我使用Me.activate()
function 解決了它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.