Ich habe Code, der um ein randloses Formular in winforms gezogen werden kann, die ich seit einigen Monaten verwende, was sehr gut funktioniert.Invalidate vs Update
Aber als ich zuerst den Code bekam, verwendeten sie this.Invalidate();
im MouseMove
Ereignis des Formulars, und die Form flackerte ein wenig und war langsam, wenn sie herumgezogen wurde. Also, ich ersetzte Invalidate()
durch Update()
im MouseMove
Ereignis, und zu meiner Überraschung kann das Formular jetzt sehr glatt gezogen werden und hat überhaupt kein Flackern.
Kann mir jemand erklären, warum Update den Code besser funktioniert als Invalidate, auch wenn Invalidate so klingt, als wäre es der richtige?
Thanks :)
P. S. Vielleicht würde es mehr helfen, wenn ich den Code hinzufügen würde ... Jetzt hinzufügen.
bearbeiten - Hier ist der Code:
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;
}
Danke ein Haufen Martin. :) –