Tôi sử dụng sự kiện MouseMove để di chuyển đối tượng (nói nhãn).Độ nhạy MouseMove
nguyên tắc đơn giản (sơ đồ):
OnMouseMove(e MouseEventArgs)
if e.Button == Left
deltaX = e.X - lastX
foreach label in labels
label.Location.X += deltaX
lastX = e.X
Khi tăng nhãn số, tôi bắt đầu thấy các nhãn dấu vết dọc theo quỹ đạo chuyển động. Tôi có một cái gì đó như I I I II III II I I III II, nhưng muốn có một cái gì đó giống như tôi I I I như dấu vết. Tôi muốn biết khi nào chuột "bắt đầu" và "dừng lại để di chuyển" một cái gì đó như thế này.
Tôi di chuyển các nhãn dọc theo trục ngang. MouseDown
(đặt LastX) và tiếp tục. Không ai biết khi nào dừng lại, chỉ có cảm giác di chuyển chuột. Chắc chắn tôi có thể sử dụng MouseUp
để biết thời điểm chuyển động kết thúc, tuy nhiên nếu người dùng duy trì nút này và ngừng di chuyển, tôi muốn phản ánh vị trí nhãn mới nhất.
Có cách nào để ngăn chặn loại dấu vết này không?
thử
label.Visible = false
label.Location.X += deltaX
label.Visible = true
không giúp.
parent.SuspendLayout and ResumeLayout không giúp được gì nhiều, bởi vì tôi cần thực hiện việc này ở mọi chuyển động của chuột, vì vậy có hiệu lực.
hm. Vấn đề là tôi di chuyển nhãn rất thường xuyên. Tôi có một cái gì đó như tôi I II II III II I I III II, nhưng muốn có một cái gì đó như tôi Tôi Tôi Tôi Tôi Tôi như dấu vết. Tôi muốn biết khi nào chuột "bắt đầu" và "dừng lại để di chuyển" một cái gì đó như thế này. Tôi cũng có thể làm cho parent.Suspend/ResumeLayout() nhưng ... khi nào? – serhio
@serhio: Tôi đã chỉnh sửa để bao gồm ví dụ về cách bạn có thể sử dụng SuspendDrawing/ResumeDrawing. Nếu tôi hiểu chính xác bạn, các nhãn không di chuyển "cùng nhau" (bạn thấy chúng di chuyển riêng). Giải pháp này sẽ giải quyết vấn đề đó. –
@Zach. Vâng. nhưng...vấn đề là tôi muốn làm thay vì làm 10 chuyển động (nói từ 1 đến 20) chỉ 5. En gros, khi di chuyển "nhãn chứa" Tôi không cần phải nhìn thấy nhãn di chuyển, chỉ bắt đầu cuối cùng, và có thể một điểm trung gian là đủ. – serhio