.net winforms resize tablelayoutpanel

.net - ¿Cómo evitar que los controles se retrasen visualmente al redimensionar dentro de TableLayoutPanel?



winforms resize (3)

El problema con los controles nativos en Windows es que cada control es responsable de dibujarse, lo que significa pintar un mapa de bits en la pantalla. A medida que se cambia el tamaño de cada control en un control de contenedor, la región de la ventana que ocupa se invalida, por lo que no solo cada control en el contenedor se vuelve a pintar, sino que el contenedor debe volver a pintarse. Además, los eventos de redimensionamiento / repintado se producen en el subproceso de interfaz de usuario, por lo que se trata de una operación de subproceso único. Los mecanismos básicos detrás del dibujo de ventana nativo no han cambiado desde que lo introdujeron las ventanas de 16 bits.

Hay muchos trucos (hacks) que las personas emplean para tratar de solucionar el problema, como el doble almacenamiento en memoria intermedia, la representación fuera de pantalla o simplemente deshabilitar el cambio de tamaño.

Para ver cómo debería ser, mira WPF. MS lo desarrolló como un medio para resolver este problema.

Si WPF no es una opción y está utilizando formularios de Windows, consulte la documentación relacionada con el diseño de microsoft. Puede implementar su propio motor de diseño en lugar de confiar en las ofertas de Microsoft de fábrica.

Tengo un diseño de complejidad media basado en varios TableLayoutPanel s anidados. Cambiar el tamaño de la forma hace que los controles dentro de las tablas anidadas más profundas se retrasen visualmente detrás del cambio de tamaño. En primer lugar, esto les hace parecer que se mueven mientras se cambia el tamaño de la forma, pero, lo que es peor, los bordes de los controles se recortan visiblemente cuando se retrasan lo suficiente como para dejar sus celdas asignadas de la tabla.

¿Hay alguna manera de evitar esto o es esto lo mejor que TableLayoutPanel puede hacer?

Editar : Después de haber experimentado con un montón de programas, llegué a la conclusión de que el retraso en el cambio de tamaño es un problema omnipresente. Para mí, parece que todos han renunciado a que esto es inevitable y aceptable . Por supuesto, si es realmente inevitable , aceptar esto es mucho más fácil :)

La forma más fácil de ver el desfase en su programa favorito de "UI buena": cambie el tamaño manteniendo el límite izquierdo y observe cómo todos los controles alineados a la derecha brincan (o alternativamente, controles de borde superior e inferior, como barras de estado). Está roto por todos lados.

Si alguien puede proporcionar buenas razones por las cuales esto es inevitable al usar controles nativos de Windows, aceptaré esa respuesta. Además, si encuentra un programa que usa controles nativos que no lo padece, dígalo, esto podría ayudar ...


Esto no parece posible en absoluto, incluido WPF (que en realidad es aún peor - vea esta pregunta). Qt puede evitar tal retraso, excepto si Aero está habilitado. Suspiro...


Establecer DoubleBuffered = true . Puede configurarlo en los formularios.