2011-06-09 94 views
13

當標籤頁首次出現時(我正在使用Windows窗體,VB.NET 3.5),似乎無法在文本框中獲得輸入焦點。無法在Windows窗體文本框中設置焦點

我在選項卡頁面上的面板上有一個文本框,我希望焦點在選項卡頁面出現時位於文本框中。我希望用戶能夠在焦點文本框中立即開始輸入,而無需點擊文本框。我按照我想要的順序設置了製表位,文本框是第一個製表位。該選項卡停止工作,只是當選項卡頁面出現時,焦點不在文本框上,即按Tab鍵順序排列的第一個。

在標籤頁的Enter事件處理程序中,我調用文本框的Focus方法,但它返回False並且什麼也不做,沒有錯誤消息。我知道我可以訪問文本框,因爲 在代碼中的同一點我可以設置文本框的文本。

如果它的事項,該標籤頁面的佈局有點複雜:

frmFoo/TabControl1/TabPageX/Panel1/Panel2/TextBox1 

我想設置重點TextBox1的。

  1. 什麼是最好的方式來關注所需的文本框?
  2. 如果設置焦點是最好的方法,爲什麼textbox.Focus()方法失敗?

回答

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 

您仍希望設置在加載事件的初始焦點如上所示,如果選擇了第一場是成爲標籤上的文本框控制。

+0

我試圖在標籤頁的Enter事件中設置焦點,認爲Enter事件是在標籤頁上的Load事件對窗體的作用,即它是您初始化事物的地方。 – RaleighBoy 2011-06-09 04:35:26

+0

您想要處理_SelectedIndexChanged事件: – 2011-06-09 04:57:23

+1

是的,在TabControl1_SelectedIndexChanged事件處理程序中設置焦點解決了問題。謝謝你的幫助。 – RaleighBoy 2011-06-09 16:21:32

11

嘗試之一:

Me.ActiveControl = TextBox1 

TextBox1.Select() 
+0

當我做第一個時,我看不到UI的影響;當我在調試器中查詢Me.ActiveControl時,它列出了TextBox1,所以我猜TextBox1是主動控件,但它不會將光標置於文本框中。 – RaleighBoy 2011-06-09 03:19:09

+0

當我做第二個(TextBox1.Select(0,0))時,沒有任何反應。 – RaleighBoy 2011-06-09 03:20:38

+0

對不起,試試'TextBox1.Select()' – keyboardP 2011-06-09 03:20:55

1

正如我已經簽入兩個TabControl.SelectedTabPage.Enter事件可以設置選擇TextBox你應該使用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 

。我認爲還有一些其他元素偷竊焦點。請變更

+1

的處理程序中通過在TabControl1.SelectedIndexChanged事件處理程序中設置焦點來解決此問題。謝謝你的幫助。 – RaleighBoy 2011-06-09 16:22:41

1

我在網上找到的任何解決方案都無法解決控件位於標籤頁上時的問題。

然而,這種工作原理:

(1)設置的TabIndex控制的爲0。

(2)在你的代碼處理該標籤頁時,請執行下列操作:

SendKeys.Send("{TAB}") 

如果的SendKeys似乎並沒有一個有效的statment,請確保您有以下進口在頂部您的代碼文件:

Imports System.Windows.Forms 
3

執行control.Focus()OnShown事件。無論如何,您都不需要任何DoEvents邏輯,這些邏輯對我無效。

+0

太好了。這工作。 – Alex 2013-09-04 19:28:59

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 
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 

這是保證工作。

0

我曾經有同樣的問題,但我解決了它使用Me.activate()函數。