簡體   English   中英

無法在 Windows Forms 文本框上設置焦點

[英]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 上。

  1. 將焦點放在所需文本框上的最佳方法是什么?
  2. 如果設置焦點是最好的方法,為什么 textbox.Focus() 方法會失敗?

我假設您正在嘗試在表單加載事件處理程序中設置焦點? 如果是這樣,您需要執行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 邏輯。

您應該使用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事件可以設置 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM