2009-10-07 12 views
18

Aquí está mi código:Visual Studio - TabControl.TabPages.Insert no trabajar

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

En pocas palabras, se lee una sección en un archivo de configuración y crea una ficha para cada elemento de la sección.

Ya tengo una TabPage estática creada en el momento del diseño. Quiero que las pestañas dinámicas creadas se inserten antes de esta pestaña estática.

Al ejecutar este código, tabcontrol muestra solo el tabulador estático.

Si hago este cambio:

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

Usando el método Add muestra todas las páginas. Pero no obtengo el orden que quiero.

¿Hay algo que no entiendo con el método Insertar? ¿Por qué está funcionando?

Respuesta

37

Hay un comentario en social.msdn - aunque no pude encontrar nada como esto en la documentación:

El mango del TabControl se debe crear para el método Insert para trabajar

Prueba el mencionado código

IntPtr h = this.tabControl1.Handle; 

antes de bucle sobre sus servicios

+1

Gracias. Llamar a esto resolvió el problema. – vIceBerg

+2

No puedo creer que sea tan estúpido como eso ... de todos modos está funcionando! – Zyo

+0

Awesome answer. tan simple pero aún desconocido. +1 – mihirj

1

Está pasando el mismo índice al método Insert(). Si desea simplemente incrementar, esto debería funcionar:

// ... 

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

} 
Cuestiones relacionadas