我有代码可以在我已经使用了几个月的winforms中拖动无边框表单,效果非常好。
但是当我第一次得到代码时,它们this.Invalidate();
在Form的MouseMove
事件中使用,并且Form在拖动时有点闪烁并且很慢。因此,我在事件中替换Invalidate()
为,令我惊讶的是,表单现在可以非常流畅地拖动并且没有任何闪烁。Update()
MouseMove
有人可以向我解释为什么 Update 使代码比 Invalidate 更好地工作,即使 Invalidate 听起来它是正确的使用?
谢谢 :)
PS如果我添加代码可能会有所帮助......现在添加它。
编辑- 这是代码:
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;
}