Tengo un código que permite arrastrar una forma sin bordes en winforms que llevo usando desde hace varios meses, que funciona muy bien.Invalidar vs Actualizar
Pero cuando me dieron el código por primera vez, usaron this.Invalidate();
en el evento MouseMove
de la Forma, y la Forma parpadeó un poco y fue lenta al arrastrarla. Por lo tanto, reemplacé Invalidate()
con Update()
en el evento MouseMove
y, para mi sorpresa, ahora se puede arrastrar el Formulario sin problemas y no parpadea en absoluto.
¿Alguien puede explicarme por qué Update hace que el código funcione mejor que Invalidar, incluso cuando Invalidate parece que es el correcto para usar?
Gracias :)
P. S. Tal vez sería más útil si añadiera el código ... Agregándolo ahora.
Editar - Aquí está el código:
private void titlebar_MouseDown(object sender, MouseEventArgs e)
{
this.IsMouseDown = true;
this.LastCursorPosition = new Point(e.X, e.Y);
if (this.BackColor == Color.White)
{
this.BackColor = Color.GhostWhite;
tbox.BackColor = Color.GhostWhite;
tbox.ForeColor = Color.Black;
}
else
{
this.BackColor = Color.FromArgb(20, 20, 20);
tbox.BackColor = Color.FromArgb(20, 20, 20);
tbox.ForeColor = Color.White;
}
}
private void titlebar_MouseMove(object sender, MouseEventArgs e)
{
if (this.IsMouseDown == true)
{
//Move the form
this.Location = new Point(this.Left - (this.LastCursorPosition.X - e.X), this.Top - (this.LastCursorPosition.Y - e.Y));
// Update works better than Invalidate();.
Update();
}
}
private void titlebar_MouseUp(object sender, MouseEventArgs e)
{
this.IsMouseDown = false;
this.BackColor = fc;
tbox.BackColor = fc;
}
Gracias un montón Martin. :) –