2010-04-01 11 views
8

¿Cómo reordeno programáticamente las pestañas en un TabControl? Necesito ordenar las pestañas dependiendo de algunas condiciones.Programmatically change the tab order

Si es posible hacer el reordenamiento a través del diseñador, creo que también debemos poder hacerlo a través del código en tiempo de ejecución.

Respuesta

7

Tiene que volver a definir su colección de páginas de pestañas, para cambiar el índice de sus pestañas.

+0

redefine? puedes elaborar un poco? ¿Es como si tuviera que eliminar todas las pestañas disponibles y luego agregarlas en el orden que quiero? – Aneef

+0

Es posible que haya visto algo como: tabControl.Controls.Add (tabPage); Simplemente tiene que cambiar el orden de las páginas de pestañas en el ControllCollection (como lo haría con cualquier otra colección). – thelost

+0

bueno, esto es lo que hice, como dije en mi comentario anterior eliminarlos y reordenar como quisiera, pensé que podríamos hacer algo de clasificación o smt * suspiro *: P, gracias de todos modos – Aneef

9
  1. Crea un nuevo formulario.
  2. Crea un nuevo TabControl.
  3. Tenga en cuenta que tiene dos controles TabPage, y TabPage1 es la primera pestaña.
  4. En el evento Load del formulario, agregue
    • this.TabControl1.TabPages.Remove(this.TabPage2)
    • this.TabControl1.TabPages.Insert(0, this.TabPage2)
  5. Ejecutar el formulario.
  6. Aviso TabPage2 ahora es la primera pestaña.

Tenga en cuenta que si no puede quitar la página de pestañas, aún se mostrará en su ubicación anterior. En otras palabras, tendrá dos pestañas de la misma página de pestañas.

5

thelost is right. A continuación se muestra un código de muestra rápido.

I tienen un control de ficha con 2 pestañas (TabPage1, tabpag2)

Entonces declarar dos TabPages y almacenar las pestañas existentes en el tabcontrol en ella.

abPage tbp1 = new TabPage(); 
TabPage tbp2 = new TabPage(); 

tbp1 = tabControl1.TabPages[0]; 
tbp2 = tabControl1.TabPages[1]; 

Luego, en un clic de botón He quitado las pestañas utilizando

tabControl1.TabPages.Remove(tabControl1.TabPages[0]); 

Ahora bien, si desea cambiar el orden, entonces tendrá la parte superior añadirlo a la pestaña en ese orden

//Order changed  
tabControl1.TabPages.Add(tbp2); 
tabControl1.TabPages.Add(tbp1); 

Nota: Este es un código rápido no probado.

1

ir dentro Designer.cs el archivo

Allí encontrará

/// [Your TabControl Name] 
yourTabControl.Controls.Add(yourPage1); 
yourTabControl.Controls.Add(yourPage2); 
yourTabControl.Controls.Add(yourPage3); 

El orden de adición es para sus TabPages' en el tabcontrol. Cambia el orden como quieras Elimine y agregue funciones de TabControl. Los controles lo ayudarán cuando Shoban responda.

+1

¿No se supone que sendToBack y BringToFront cambien la posición de zorder? es decir, si hay un control directamente en la parte superior de este tabulador, y usted trajo ToFront en el tabulador, entonces vería el tabulador no el objeto que estaba previamente encima de él. Suena aquí como si estuvieras sugiriendo que estas funciones reordenan la posición de las pestañas. – Chris

+0

@Chris Lo comprobaré mañana, puede que tengas razón. – icaptan

+0

@Chris tienes razón, he probado BringToFront. Funciona para FlowLayoutPanel, pero no para TabControl. – icaptan

1

intente esto después de Initilizacomponent(). este código le dará la libertad de cambiarlo programáticamente en un archivo .cs.

 this.tabReceive.Controls.Remove(this.metroTabPage4); 
     this.tabReceive.Controls.Remove(this.metroTabPage5); 

     this.tabReceive.Controls.Add(this.metroTabPage4); 
     this.tabReceive.Controls.Add(this.metroTabPage5); 
3

Las siguientes líneas de código también puede hacer el truco, este tipo de solución también funciona para otro tipo de datos que no tiene forma directa de clasificar: - convertir a una lista - ordenar la lista - devuélvala

public static void Sort(TabControl tabControl) 
{ 
    var tabList = tabControl.TabPages.Cast<TabPage>().ToList(); 
    tabList.Sort(new TabPageComparer()); 
    tabControl.TabPages.Clear(); 
    tabControl.TabPages.AddRange(tabList.ToArray()); 
} 

public class TabPageComparer : IComparer<TabPage> 
{ 
    public int Compare(TabPage x, TabPage y) 
    { 
     return string.Compare(x.Text, y.Text); 
    } 
} 
+0

¡Qué fantástica solución! –

0

A veces tengo tabControls con varias tabPages. En el tiempo de ejecución, las pestañas de tabulación se vuelven invisibles (al eliminarlas) y se agregan más tarde de nuevo.

Después de esto, las tabulaciones pueden estar en orden incorrecto. Utilizo este código para redorderlos de nuevo:

public void ReorderTabPages() 
{ 
    // Demo code to reorder tabControl with tabPages 
    // where some tabPages may be unwanted at the moment 

    // caution: events like "SelectedIndexChanged" does fire! 

    // List of wanted tab pages 
    List<TabPage> wantedTabPages = new List<TabPage>(); 

    // remember the current selected tab 
    TabPage currentTabPage = this.tabControl.SelectedTab; 

    // check if all possibly active tabs are currently visible 
    // check it in the order they should be displayed 
    // after that they are in the correct order in "wantedTabPages" 
    if (this.tabControl.TabPages.IndexOf(this.tabPage_01) >= 0) 
     wantedTabPages.Add(this.tabPage_01); 
    if (this.tabControl.TabPages.IndexOf(this.tabPage_02) >= 0) 
     wantedTabPages.Add(this.tabPage_02); 
    if (this.tabControl.TabPages.IndexOf(this.tabPage_03) >= 0) 
     wantedTabPages.Add(this.tabPage_03); 
    if (this.tabControl.TabPages.IndexOf(this.tabPage_04) >= 0) 
     wantedTabPages.Add(this.tabPage_04); 

    this.tabControl.SuspendLayout(); 

    // remove all currently visible tab pages 
    for (int i = this.tabControl.TabPages.Count - 1; i >= 0; i--) 
     this.tabControl.TabPages.RemoveAt(i); 

    // add the tabPages in the correct order 
    foreach (var wantedPage in wantedTabPages) 
     this.tabControl.TabPages.Add(wantedPage); 

    // restore the currently selected tabPage 
    this.tabControl.SelectedTab = currentTabPage; 

    this.tabControl.ResumeLayout(); 
}