2008-09-07 33 views
19

Giả sử tôi có một số Textbox được lồng trong một TabControl.Winforms C# - Đặt tiêu điểm cho điều khiển con đầu tiên của TabPage

Khi tải biểu mẫu, tôi muốn tập trung vào đó Textbox (theo mặc định tiêu điểm được đặt thành TabControl).

Chỉ cần gọi textbox1.focus() trong sự kiện Load của biểu mẫu có vẻ không hoạt động.

tôi đã có thể tập trung vào nó bằng cách làm như sau:

private void frmMainLoad(object sender, EventArgs e) 
{ 
    foreach (TabPage tab in this.tabControl1.TabPages) 
    { 
     this.tabControl1.SelectedTab = tab; 
    } 
} 

Câu hỏi của tôi là:

Có một cách thanh lịch hơn để làm điều này?

Trả lời

45

Sau đây là giải pháp:

private void frmMainLoad(object sender, EventArgs e) 
{ 
    ActiveControl = textBox1; 
} 

Câu hỏi tốt hơn sẽ được tuy nhiên tại sao ... Tôi không hoàn toàn chắc chắn về câu trả lời cho một trong đó là.

Chỉnh sửa: Tôi nghi ngờ đó là điều cần làm với thực tế là cả biểu mẫu và TabControl đều là vùng chứa, nhưng tôi không chắc chắn.

14

Thử đặt nó trong sự kiện Form_Shown(). Bởi vì nó nằm trong một container, việc đặt Form_Load hoặc thậm chí Form() constructor sẽ không hoạt động.

+2

Nó không làm việc ở tải vì sau khi tải, các điều khiển được tái tập trung theo thứ tự tab và kiểm soát tập trung là "ghi đè". Khi bạn tập trung điều khiển trong Được hiển thị, sẽ không có gì sẽ "ghi đè" cuộc gọi của bạn bằng cách tập trung một điều khiển khác. – Marek

1

Bạn chỉ cần thêm Control.Select() để kiểm soát mã này. Tôi đã sử dụng điều này để tập trung vào các điều khiển trong quá trình xác nhận khi có lỗi.

private void ShowControlTab(Control ControlToShow) 
    { 
     if (!TabSelected) 
     { 
      if (ControlToShow.Parent != null) 
      { 
       if (ControlToShow.Parent.GetType() == typeof(TabPage)) 
       { 
        TabPage Tab = (TabPage)ControlToShow.Parent; 
        if (WOTabs.TabPages.Contains(Tab)) 
        { 
         WOTabs.SelectedTab = Tab; 
         TabSelected = true; 
         return; 
        } 
       } 

       ShowControlTab(ControlToShow.Parent); 
      } 
     } 
    } 
4

Cố gắng sử dụng textbox1.Select() thay vì textbox1.Focus(). Điều này đã giúp tôi vài lần.

1

Tôi có quyền kiểm soát người dùng trong một điều khiển người dùng khác. textbox1.Select() làm việc cho tôi nhưng textbox1.Focus() không hoạt động.

Bạn cũng có thể thử đặt Tabstop thành false, textbox1.Focus(), TabStop là true.

0
private void ChildForm1_Load(object sender, EventArgs e) 
     { 
      ActiveControl = txt_fname; 

     } 

tôi sử dụng mã này nó hoạt động tốt trên điều khiển tab chiến thắng hoặc DotNetBar supertab contrl

Các vấn đề liên quan