visual texto sharp propiedades parpadeante blinking c# winforms flicker createparams

c# - texto - Parpadeo en una aplicación de Windows Forms



propiedades de timer en visual basic (5)

Acabo de encontrar este post y me doy cuenta de que es un poco viejo. Sin embargo, estoy teniendo el mismo problema con mi formulario y descubrí (para XP, de todos modos) que una solución poco elegante no parece permitir los estilos visuales.

Tengo una aplicación que tiene un montón de controles en ella. Y tiene una gran cantidad de parpadeo, especialmente en el inicio.

Le apliqué esta fix .

protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x02000000; // WS_EX_COMPOSITED return cp; } }

Esto funcionó muy bien, el parpadeo se redujo en una cantidad bastante increíble. Sin embargo, el efecto secundario es que los botones Minimizar, Maximizar y Cerrar en la parte superior derecha de la ventana no se animan cuando muevo el mouse o los hago clic (aún funcionan). Esto le da a la aplicación una sensación colgada.

¿Cómo mantengo el WS_EX_COMPOSITED mientras sigo manteniendo la facilidad de uso de los botones Maximizar, Minimizar y Cerrar?

Esto sucede en Windows XP. Como señaló @fallenidol, esto no es un problema en Windows 7.




Prueba el siguiente código. Esto debe ir en el formulario principal y en cualquier otro control de usuario personalizado que tenga.

// Enable double duffering to stop flickering. this.SetStyle(ControlStyles.DoubleBuffer, true); this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); this.SetStyle(ControlStyles.UserPaint, true); this.SetStyle(ControlStyles.SupportsTransparentBackColor, false); this.SetStyle(ControlStyles.Opaque, false); this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); this.SetStyle(ControlStyles.ResizeRedraw, true);


Sé que esta pregunta es un poco vieja, pero mejor tarde que nunca. Utilicé tu ejemplo original que vinculaste para encontrar uno que lo active al cambiar el tamaño, luego lo desactiva para dibujar todo lo demás perfectamente. Esperemos que ayude a otros a buscar una solución a este problema. Como sabe el OP, las propiedades de DoubleBuffering por sí solas no resuelven problemas de parpadeo.

Aquí hay una solución alternativa para dejar de parpadear cuando un usuario cambia el tamaño de un formulario, pero sin desordenar el dibujo de controles como DataGridView, NumericUpDown, etc. Siempre que el nombre de su formulario sea "Form1":

int intOriginalExStyle = -1; bool bEnableAntiFlicker = true; public Form1() { ToggleAntiFlicker(false); InitializeComponent(); this.ResizeBegin += new EventHandler(Form1_ResizeBegin); this.ResizeEnd += new EventHandler(Form1_ResizeEnd); } protected override CreateParams CreateParams { get { if (intOriginalExStyle == -1) { intOriginalExStyle = base.CreateParams.ExStyle; } CreateParams cp = base.CreateParams; if (bEnableAntiFlicker) { cp.ExStyle |= 0x02000000; //WS_EX_COMPOSITED } else { cp.ExStyle = intOriginalExStyle; } return cp; } } private void Form1_ResizeBegin(object sender, EventArgs e) { ToggleAntiFlicker(true); } private void Form1_ResizeEnd(object sender, EventArgs e) { ToggleAntiFlicker(false); } private void ToggleAntiFlicker(bool Enable) { bEnableAntiFlicker = Enable; //hacky, but works this.MaximizeBox = true; }