usar pestañas como c# winforms tabcontrol tabpage

c# - pestañas - Visual studio-TabControl.TabPages.Insert no funciona



como usar tabcontrol c# (2)

Aquí está mi código:

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, lee una sección en un archivo de configuración y crea una pestaña para cada elemento de la sección.

Ya tengo un TabPage estático creado 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, el control de tabulación solo muestra la página de pestañas estática.

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 se muestran todas las páginas. Pero no consigo el pedido que quiero.

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


Estás 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); // ... }


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

El control TabControl debe crearse para que el método Insert funcione.

Prueba el código mencionado

IntPtr h = this.tabControl1.Handle;

antes de pasar por encima de sus servicios