Tôi đã suy nghĩ đếm pixel nếu biểu mẫu thực sự là kéo, nhưng phải có một cách tốt hơn.
Không, đó chính xác là cách bạn phải thực hiện.
Đây không chỉ là giới hạn phần mềm; nó cũng rất thực tế. Nếu bạn nghĩ qua vấn đề từ góc nhìn của người dùng, bạn sẽ thấy ngay vấn đề cũng như giải pháp. Hãy tự hỏi, sự khác nhau giữa nhấp chuột và kéo là gì?
Cả hai bắt đầu bằng nút chuột di chuyển xuống đối tượng, nhưng một trong số đó kết thúc bằng nút chuột quay lại đối tượng ở cùng vị trí và nút kia kết thúc bằng nút chuột sẽ sao lưu một vị trí hoàn toàn khác.
Vì các máy thời gian chưa được hoàn thiện, bạn không có cách nào biết điều này trước. Vì vậy, có, bạn cần phải duy trì một số loại ngưỡng khoảng cách và nếu con trỏ di chuyển ra ngoài ngưỡng khoảng cách đó trong khi nó rơi xuống đối tượng thì bạn sẽ xem xét việc kéo. Nếu không, bạn xem nó là một cú nhấp chuột.
Ngưỡng khoảng cách đó không được bằng 0. Người dùng không được yêu cầu giữ chuột hoàn toàn vẫn là để bắt đầu kéo. Rất nhiều người sử dụng được mệnh cận. Họ rất có khả năng co giật nhẹ khi cố gắng bấm. Nếu ngưỡng là 0, thì cuối cùng chúng sẽ thực hiện rất nhiều thao tác kéo vô ý khi họ cố gắng nhấp.
Tất nhiên, bạn không thực sự phải lo lắng về bất kỳ điều này hoặc tự tính ngưỡng kéo.Thay vào đó, hãy sử dụng các giá trị mặc định của Windows, có thể lấy được bằng cách gọi hàm GetSystemMetrics
và chỉ định SM_CXDRAG
hoặc SM_CYDRAG
. (Đây có thể được tiếp xúc ở đâu đó bởi khuôn khổ WinForms, nhưng tôi không nghĩ vậy. Nó chỉ là dễ dàng để P/Gọi chúng mình.)
const int SM_CXDRAG = 68;
const int SM_CYDRAG = 69;
[DllImport("user32.dll")]
static extern int GetSystemMetrics(int index);
Point GetDragThreshold()
{
return new Point(GetSystemMetrics(SM_CXDRAG), GetSystemMetrics(SM_CYDRAG));
}
Nguồn
2013-03-10 12:57:56
"đếm pixel" là khá phổ biến, bởi vì trong hầu hết các trường hợp bạn thực sự ** không muốn ** kéo để bắn ra khi 'khoảng cách chuyển động' ngắn hơn, ví dụ: 7,15 pixel. Ngay cả máy tính để bàn của windows cũng có ngưỡng pixel nhỏ như vậy. – quetzalcoatl
Không sử dụng 'Nhấp vào' và sử dụng' MouseUp' thay thế? – Neolisk
Tôi đã tạo bản trình diễn và tôi không nhận được hành vi này. Sau khi nhấp chuột vào MouseDown đạt được. Bạn có thể đăng một số mã không? –