Datapayasadas

agosto 26, 2008

Bug gráfico: TabControl dentro de un SplitContainer

Filed under: .Net, C#, Desarrollo — Etiquetas: , , — Matías @ 1:54 pm

Hola,

Como recordarán, o no, en un artículo pasado nos ocupamos de solucionar el parpadeo molesto de los ListView, pero lo que nos convoca hoy, es la necesidad de solucionar otro pequeño, aunque también molesto, bug gráfico que incluye el TabControl … bug que se encuentra reportado desde la versión 2005 (al menos), pero que aún no se ha solucionado en la 2008.


El problema se puede visualizar cuando colocamos un TabControl dentro de un SplitContainer, es decir, un contenedor. Independientemente si le asignamos los cuatro bordes como anclas (anchor) o si usamos la propiedad Dock = DockStyle.Fill, veremos que cuando redimensionamos el Panel donde se encuentra éste control, es como que el mismo no se enterara de que ha ocurrido un cambio y que debe redibujarse.

Veamos que es lo que sucede:

¿Cómo podemos solucionar esto?

La forma simple, sería crearnos un control personalizado, así lo dejamos ya en nuestro Toolbox para la próxima vez que lo necesitemos. Lo único que necesitaríamos cambiar, o mejor dicho, agregar, sería invocar un Refresh en el Tab seleccionado cuando el control cambia su tamaño. Para ello haremos un override del método OnResize:

using System;

class TabControlM : System.Windows.Forms.TabControl
{
    protected override void OnResize(EventArgs e)
    {
        base.OnResize(e);
        this.SelectedTab.Refresh();
    }
}

Y voilà, con ese pequeño pedacito de código ya hemos solucionado el problema.

Espero que les sea útil.
Nos vemos la próxima.

Anuncios

2 comentarios »

  1. asi es, después de romperme la cabeza un buen tiempo, me dije es un bug…. -.- jajja

    Comentario por Manuel Silva — septiembre 3, 2009 @ 3:27 pm

  2. hola que tal creo que tu me puedes ayudar en lo siguiente tengo un problema con respecto a un TabControl , este lo tengo con 2 paginas y en cada una tengo un ReportViewer lo problema es el siguiente cuando le paso parametros a los reportes el que se encuentrea en la pagina 1 carga perfectamente pero cuando paso a la pagina 2 no deja de cargar y si queda colgado en el loading , pense que que tenia algun error en el pase de parametros pero el reporte que esta en la pagina 2 lo he sacado de TabControl y dejado en el form me he dado cuenta que carga bn los parametros, probablemente tenga algo que ver con el evento paint ?¿ ojala m puedas ayudar t lo agradeceria demasiado
    de antemano muchas gracias y espero una repuesta
    que tengas un excelente dia

    PD:el lenguaje es C# es visual studio 2005

    Comentario por Omar — enero 5, 2010 @ 2:44 am


RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Crea un blog o un sitio web gratuitos con WordPress.com.

A %d blogueros les gusta esto: