У меня есть код, который позволяет перетаскивать форму без полей в 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;
}