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.
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