Tôi có mã cho phép kéo xung quanh một hình dạng không biên giới trong các biểu mẫu winform mà tôi đã sử dụng trong vài tháng nay, hoạt động rất tốt.Invalidate vs Update
Nhưng khi lần đầu tiên tôi được cung cấp mã, họ đã sử dụng this.Invalidate();
trong sự kiện MouseMove
của Biểu mẫu và Biểu mẫu nhấp nháy một chút và chậm khi kéo xung quanh. Vì vậy, tôi đã thay thế Invalidate()
bằng Update()
trong sự kiện MouseMove
và, thật ngạc nhiên, Biểu mẫu giờ đây có thể được kéo rất mượt mà và không có nhấp nháy nào.
Ai đó có thể giải thích cho tôi lý do tại sao Cập nhật làm cho mã hoạt động tốt hơn Invalidate, ngay cả khi Invalidate âm thanh giống như đó là quyền phù hợp để sử dụng?
Xin cảm ơn :)
P.S. Có lẽ nó sẽ giúp ích nhiều hơn nếu tôi thêm mã ... Thêm nó ngay bây giờ.
Sửa - Dưới đây là các mã:
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;
}
Cảm ơn một loạt Martin. :) –