У меня есть код, который позволяет перетаскивать формы без полей в winforms, которые я использую уже несколько месяцев, и это работает очень хорошо.
Но когда мне впервые дали код, они использовали this.Invalidate();
в событии MouseMove
формы, и форма немного мерцала и была медленной при перетаскивании. Итак, я заменил Invalidate()
на Update()
в событии MouseMove
, и, к моему удивлению, теперь форму можно перетаскивать очень плавно и без мерцания.
Может кто-нибудь объяснить мне, почему Update заставляет код работать лучше, чем Invalidate, даже когда звучит Invalidate, как будто это правильный вариант для использования?
Спасибо:)
P.S. Может быть, это помогло бы больше, если бы я добавил код ... Добавление сейчас.
Редактировать - Вот код:
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;
}