2009-10-07 19 views
18

Oto mój kod:Visual Studio - TabControl.TabPages.Insert nie działa

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();  
    } 

W skrócie, odczytuje sekcję w pliku konfiguracyjnym i tworzy zakładkę dla każdego elementu w sekcji.

Mam już jedną statyczną kartę TabPage utworzoną w czasie projektowania. Chcę, aby dynamiczne zakładki zostały wstawione przed tą zakładką statyczną.

Uruchamiając ten kod tabControl pokazuje tylko stronę statyczną statyczną.

Jeśli zrobię tę zmianę:

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

Stosując metodę Add pokazuje wszystkie strony. Ale nie dostaję zamówienia, którego chcę.

Czy jest coś, czego nie rozumiem za pomocą metody Insert? Dlaczego to działa?

Odpowiedz

37

Jest komentarz na social.msdn - chociaż nie mogę znaleźć czegoś takiego w dokumentacji:

obsłużyć TabControl muszą być tworzone dla metody Insert pracować

Spróbuj wymienić Kod

IntPtr h = this.tabControl1.Handle; 

zanim ty pętli nad swoimi usługami

+1

Dzięki. Dzwonienie to rozwiązało problem. – vIceBerg

+2

Nie mogę uwierzyć, że jest tak głupi, jak to ... w każdym razie działa! – Zyo

+0

Niesamowita odpowiedź. takie proste, ale jeszcze nieznane. +1 – mihirj

1

Przechodzisz ten sam indeks do metody Insert(). Jeśli chcesz po prostu zwiększyć wartość, powinno to zadziałać:

// ... 

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); 
// ... 

} 
Powiązane problemy