Ocultar encabezado de tabs en C # TabControl

Estoy desarrollando una aplicación Windows Form con varias páginas. Estoy usando un TabControl para implementar esto. En lugar de usar el encabezado para alternar entre las tabs, quiero que mi aplicación controle esto; por ejemplo, la siguiente pestaña debería abrirse después de que el usuario haya rellenado un cuadro de texto y haya hecho clic en el siguiente botón.

Puede reemplazar tabcontrol con un panel hecho a mano que imite como desee:

 class MultiPagePanel : Panel { private int _currentPageIndex; public int CurrentPageIndex { get { return _currentPageIndex; } set { if (value >= 0 && value < Controls.Count) { Controls[value].BringToFront(); _currentPageIndex = value; } } } public void AddPage(Control page) { Controls.Add(page); page.Dock = DockStyle.Fill; } } 

Y luego agrega páginas y establece la página visible actual:

 MultiPagePanel p; // MyTabPage is a Control derived class that represents one page on your form. MyTabPage page = new MyTabPage(); p.AddPage(page); p.CurrentPageIndex = 0; 

Agregue una nueva clase a su proyecto y pegue el código que se muestra a continuación. Comstackr. Coloque el nuevo control desde la parte superior de la caja de herramientas en su formulario. Muestra las tabs en el momento del diseño para que pueda cambiar fácilmente entre ellas mientras diseña. Están ocultos en tiempo de ejecución, use la propiedad SelectedTab o SelectedIndex en su código para cambiar de página.

 using System; using System.Windows.Forms; public class TablessControl : TabControl { protected override void WndProc(ref Message m) { // Hide tabs by trapping the TCM_ADJUSTRECT message if (m.Msg == 0x1328 && !DesignMode) m.Result = (IntPtr)1; else base.WndProc(ref m); } } 
 tabControl1.Appearance = TabAppearance.FlatButtons; tabControl1.ItemSize = new Size(0, 1); tabControl1.SizeMode = TabSizeMode.Fixed; 

Cree un nuevo UserControl, asígnele un nombre, por ejemplo, TabControlWithoutHeader y cambie el UserControl heredado a TabControl y agregue algún código. El código de resultado debería verse así:

 public partial class TabControlWithoutHeader: TabControl { public TabControlWithoutHeader() { InitializeComponent(); } protected override void WndProc(ref Message m) { if (m.Msg == 0x1328 && !DesignMode) m.Result = (IntPtr)1; else base.WndProc(ref m); } } 

Después de la comstackción, tendrá el control TabControlWithoutHeader en ToolBox. Déjalo caer en el formulario, en el diseñador verás encabezados, pero en tiempo de ejecución estarán ocultos. Si también desea ocultarlos en el diseñador, elimine && !DesignMode .

Espero que ayude.

http://social.msdn.microsoft.com/Forums/windows/en-US/c290832f-3b84-4200-aa4a-7a5dc4b8b5bb/tabs-in-winform?forum=winforms

Necesitaba este código pero en VB.net así que lo convertí. Si alguien necesita este código en VB.Net, allí está

 Imports System Imports System.Windows.Forms Public Class TablessControl Inherits System.Windows.Forms.TabControl Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) ' Hide tabs by trapping the TCM_ADJUSTRECT message If (m.Msg = Convert.ToInt32("0x1328", 16) And Not DesignMode) Then m.Result = CType(1, IntPtr) Else MyBase.WndProc(m) End If End Sub End Class 

y gracias a @Hans Passant por la respuesta en C #

Para complementar la respuesta existente de Hans Passant, he encontrado cuatro formas de ocultar las flechas al usuario cuando el número de tabs excede el ancho de TablessControl. Ninguna solución individual es necesariamente perfecta para todos, pero puede ser para usted (o al menos una combinación de ellas).

Solución 1:

Simplemente habilite Multiline . Esto evitará que las flechas aparezcan en primer lugar. Sin embargo, tenga en cuenta que puede perder WYSIWYG en el diseñador porque el espacio vertical se ajustará verticalmente hacia abajo, y los controles dentro de TablessControl pueden incluso cortarse en la parte inferior (nuevamente, solo en modo desarrollador).

Solución 2:

Una solución más avanzada que resuelve el problema WYSIWYG anterior es habilitar solo Multiline una vez que el progtwig se ejecuta. Simplemente agrega este constructor a la clase TablessControl:

 public TablessControl() { bool designMode = (LicenseManager.UsageMode == LicenseUsageMode.Designtime); if (!designMode) Multiline = true; } 

Para el desarrollador, seguirán apareciendo como una sola línea de tabs.

Solución 3:

Disminuya el tamaño de la fuente de TablessControl. Cada pestaña debería reducirse en consecuencia. Dado que el usuario nunca llega a ver las tabs, no debería importar mucho si configura los tamaños de fuente hasta 4pt.

Sin embargo, tenga cuidado, porque el contenido de TablessControl también puede cambiar de tamaño. Si esto sucede, vuelva a editar el tamaño de fuente para cada widget dentro, y en ese punto, afortunadamente se mantendrá en ese tamaño, incluso si luego decide volver a cambiar el tamaño de fuente principal de TablessControl.

Este enfoque también tiene la ventaja de mostrar más de cerca el verdadero inmueble vertical WYSIWYG al desarrollador (que puede verse bien para el usuario, pero puede cortarse ligeramente en la parte inferior del diseñador debido a la altura de las tabs).

Esta solución se puede combinar con la Solución 1 y 2 para ventajas acumuladas.

Solución 4:

Esta solución no es necesariamente tan buena si alguna de las tabs tiene un texto largo. Gracias a Hans por sugerirlo.

Primero establezca SizeMode de SizeMode en ‘Fixed’, y luego reduzca la propiedad Width Tamaño de ItemSize de ItemSize a un número más pequeño para reducir el ancho de cada pestaña. No dude en ajustar la propiedad Height ItemSize para ayudar a resolver el problema WYSIWYG antes mencionado, aunque la Solución 3 puede ser más útil para ese problema.

Esta solución se puede combinar con las soluciones anteriores para acumular más ventajas.

Si realmente quieres hacer esto, puedes hacer algo como esto

  tcActionControls.Region = new Region(new RectangleF( tbPageToShow.Left, tbPageToShow.Top, tbPageToShow.Width, tbPageToShow.Height) ); 

Donde tcActionControls es su TabControl y tbPageToShow es una TabPage para mostrar en este preciso momento.

Debería funcionar para usted.

Saludos.

Puede intentar eliminar TabPage de TabPageCollection:

TabControl.TabPageCollection tabCol = tabControl1.TabPages;

  foreach (TabPage tp in tabCol) { if(condition) { tabCol.Remove(tp); } }