doble buffer c#
Doble Buffering de Winforms (1)
Agregué esto al código de constructor de mi formulario:
this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true);
Pero todavía muestra artefactos feos cuando carga los controles, cada vez que cambian (la forma y sus componentes cambian (necesitan actualización) a menudo).
¿Qué debo hacer de manera diferente?
Esto solo tiene un efecto en el formulario en sí, no en los controles secundarios. Si tienes muchos de ellos, entonces el tiempo que necesitan para tomar turnos para pintarse se vuelve notable, deja un agujero rectangular donde va el control que no se llena hasta que el control del niño lo hace girar.
Lo que necesitarías para combatir esto es duplicar el buffer de toda la forma y los controles. Esa es una opción disponible desde Windows XP que hizo que el indicador de estilo WS_EX_COMPOSITED esté disponible. Pegue esto en su formulario para activarlo:
protected override CreateParams CreateParams {
get {
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
No acelera la pintura en absoluto, pero la forma se ajusta a la pantalla después de un retraso. Eliminando los artefactos de pintura visibles. Realmente arreglar el retraso requiere no usar controles. Lo cual harías usando el método OnPaint para dibujar los ''controles'' y hacer que el evento OnMouseClick sea inteligente sobre en qué ''clic'' el usuario hizo clic en ''control''.