2009-10-07 33 views
18

Dưới đây là mã của tôi:Visual studio - TabControl.TabPages.Insert không làm việc

public MainForm() 
    { 
     InitializeComponent(); 

     MyServiceSettings obj = (MyServiceSettings)ConfigurationManager.GetSection("MyServiceSettings"); 

     foreach (MyServiceConfigElement service in obj.Services) 
      CreateServiceControl(service); 
    } 

    private void CreateServiceControl(MyServiceConfigElement service) 
    { 
     TabPage tp = new TabPage(service.Name); 
     tabControl1.TabPages.Insert(0, tp); 
     //tabControl1.TabPages.Add(tp); 
     tabControl1.Refresh();  
    } 

Tóm lại, nó đọc một phần trong một tập tin cấu hình và tạo ra một tab cho mỗi phần tử trong phần này.

Tôi đã có một TabPage tĩnh được tạo tại thời điểm thiết kế. Tôi muốn các tab được tạo động được chèn vào trước tab tĩnh này.

Chạy mã này, tabcontrol chỉ hiển thị trang tab tĩnh.

Nếu tôi làm thay đổi này:

 private void CreateServiceControl(SoftInfoServiceConfigElement service) 
    { 
     TabPage tp = new TabPage(service.Name); 
     //tabControl1.TabPages.Insert(1, tp); 
     tabControl1.TabPages.Add(tp); 
     tabControl1.Refresh(); 
    } 

Sử dụng phương thức Add cho thấy tất cả các trang. Nhưng tôi không nhận được thứ tự tôi muốn.

Có điều gì tôi không hiểu với phương pháp Chèn không? Tại sao nó không hoạt động?

Trả lời

37

Có một nhận xét về social.msdn - mặc dù tôi không thể tìm thấy bất cứ điều gì như thế này trong các tài liệu hướng dẫn:

xử lý của TabControl phải được tạo ra cho các phương pháp Insert để làm việc

Thử nêu mã

IntPtr h = this.tabControl1.Handle; 

trước khi bạn vòng qua dịch vụ

+1

Cảm ơn. Việc gọi này đã giải quyết được sự cố. – vIceBerg

+2

Tôi không thể tin rằng nó ngu ngốc như thế ... dù sao nó cũng hoạt động! – Zyo

+0

Câu trả lời thú vị. đơn giản nhưng chưa biết. +1 – mihirj

1

Bạn đang chuyển cùng một chỉ mục đến phương thức Insert(). Nếu bạn chỉ muốn tăng, điều này sẽ hoạt động:

// ... 

int i = 0; 
foreach (MyServiceConfigElement service in obj.Services) 
      CreateServiceControl(service, i++); 

// ... 

private void CreateServiceControl(MyServiceConfigElement service, int i) 
{ 
     TabPage tp = new TabPage(service.Name); 
       tabControl1.TabPages.Insert(i, tp); 
// ... 

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