首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

WinForms 表單載入時 TextBox 無法獲得焦點?重新設計 TabIndex 順序即可解決

     編輯:程式設計綜合問答

現象

在 Form_Load 或建構子中呼叫 textBox1.Focus()、ActiveControl = textBox1,表單顯示後焦點仍不在目標 TextBox。

根本原因:控件建立順序與 TabIndex 決定初始焦點

  • WinForms 在 InitializeComponent() 依序建立控件,第一個可聚焦且 TabStop=true 的控件會自動獲得初始焦點。
  • 若設計面上目標 TextBox 不在第一順位,後續程式碼設定焦點易被佈局引擎覆蓋。

最簡解法:調整 TabIndex 讓目標 TextBox 為 0

  1. 設計檢視中選取目標 TextBox。
  2. 屬性視窗將 TabIndex 設為 0(或確保它是最小值)。
  3. 其餘控件依序遞增。

無需寫任何程式碼,表單載入即自動聚焦。

進階:若必須動態決定焦點

protected override void OnShown(EventArgs e) {
    base.OnShown(e);
    this.BeginInvoke((Action)(() => textBox1.Focus()));
}

在 OnShown 階段用 BeginInvoke 延遲到 UI 執行緒空閒時設定,成功率 100%。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved