Utilizo este método para crear una nueva TabPage en un TabControl ( TabManager ) si no existe una TabPage con el texto especificado, o simplemente la selecciono si ya existe:
private void AddControls(UserControl uc, string TabCaption) { Boolean TabFound = false; if (TabManager.TabCount == 0) { TabPage tp = new(TabCaption); TabManager.TabPages.Add(tp); uc.Dock = DockStyle.Fill; tp.Controls.Add(uc); TabManager.SelectedTab = tp; } else { TabPage tp = new(TabCaption); foreach (TabPage tp1 in TabManager.TabPages) { if (tp1.Text == TabCaption) { TabFound = true; } } if (TabFound != true) { TabManager.TabPages.Add(tp); uc.Dock = DockStyle.Fill; tp.Controls.Add(uc); TabManager.SelectTab(tp); //tp.Show(); //tp.BringToFront(); } else { TabManager.SelectedTab = TabManager.TabPages[tp.Name]; return; } } }El problema es que TabPage no está seleccionado, sino que se muestra una página vacía.
El código ofensivo parece ser:
TabManager.SelectedTab = TabManager.TabPages[tp.Name]; Como solo mostrará una TabPage vacía.
Busqué documentación pero no encontré ninguna solución hasta ahora.
Si crea una nueva TabPage con el texto proporcionado (como en TabPage tp = new(TabCaption); ), su objeto tp no es lo mismo que una TabPage existente con el mismo título, por lo que TabManager.SelectTab(tp); no lo seleccionará (no es el mismo objeto).
Verá un fondo en blanco porque cuando usa el método TabControl.SelectedTab() y la TabPage especificada no existe, ninguna TabPage es la actual, por lo que solo ve el fondo de TabControl.
Para determinar si agregar o simplemente seleccionar una TabPage, puede verificar si TabControl no tiene TabPages (como lo está haciendo) y también verificar si ya existe una TabPage con el mismo nombre .
Puede utilizar el método TabPageCollection.IndexOfKey() para realizar esta comprobación.
Debe asignar un Nombre a su nueva TabPage, no solo un Título, como sucede cuando crea una nueva TabPage en el Diseñador.
Esto simplifica la creación y/o selección de TabPages. Su código podría ser entonces:
private void AddControls(Control uc, string tabCaption) { if (TabManager.TabCount == 0 || TabManager.TabPages.IndexOfKey(tabCaption) < 0) { var tp = new TabPage(tabCaption); // or TabPage tp = new(tabCaption); tp.Name = tabCaption; uc.Dock = DockStyle.Fill; tp.Controls.Add(uc); TabManager.TabPages.Add(tp); } TabManager.SelectedTab = TabManager.TabPages[tabCaption]; }