2011-08-27 60 views
6

Các tiêu đề nói lên tất cả. Tôi có một bảng điều khiển hoạt động như một bảng trắng. Khi di chuyển chuột, hãy vẽ theo dõi chuột .. hoạt động tốt, nhưng nếu con chuột rời khỏi các cạnh của bảng điều khiển, tôi muốn gọi sự kiện chuột lên và sự kiện chuột nếu con chuột hoặc nhập bảng điều khiển trong khi nút bên trái được nhấpC# mouseleave và sự kiện mouseenter sẽ không kích hoạt nếu nút chuột được nhấp

private void panel2_MouseLeave(object sender, EventArgs e) 
    { 
     if (mousedraw == true) 
     { 
      panel2_MouseUp(sender, new MouseEventArgs(System.Windows.Forms.MouseButtons.Left, 0, MousePosition.X, MousePosition.Y, 0)); 
     } 
    } 

    private void panel2_MouseEnter(object sender, EventArgs e) 
    { 
     if (mousedraw == true) 
     { 
      panel2_MouseDown(sender, new MouseEventArgs(System.Windows.Forms.MouseButtons.Left, 0, MousePosition.X, MousePosition.Y, 0)); 
     } 
    } 

mousedraw là một bool cho biết nếu nút trái được nhấp.

Các vấn đề là:

Thời gian nghỉ và nhập các sự kiện sẽ không cháy nếu nút chuột xuống.

+0

Đây là một tác dụng phụ đối với lớp Cơ sở điều khiển, đặt thuộc tính Capture thành true trên sự kiện di chuột. Điều này không * cần * sửa chữa, vẽ bên ngoài của Bounds kiểm soát không hiển thị anyway. –

Trả lời

7

MouseEnter và MouseLeave không bắn trong khi một nút được nhấn. Tuy nhiên, khi nút cuối cùng được nhả ra, chuột hoặc sự kiện mouseLeave thích hợp sẽ kích hoạt nếu chuột di chuyển vào hoặc ra khỏi bảng điều khiển trong khi nút bị tắt. Miễn là nút được nhấn, sự kiện mouseMove sẽ tiếp tục kích hoạt, ngay cả bên ngoài giới hạn của bảng điều khiển. Điều này cho phép chuột tiếp tục kéo hoặc bất cứ điều gì ngay cả sau khi nó vượt ra ngoài ranh giới của điều khiển, và là cách mà hầu hết các ứng dụng Windows hoạt động.

Nếu bạn có thể sử dụng hành vi này trong ứng dụng của mình, nó sẽ là giao diện người dùng "chuẩn" hơn.

Nếu bạn chắc chắn cần kích hoạt chuột khi chuột rời khỏi bảng điều khiển, bạn có thể kiểm tra vị trí chuột trong sự kiện mouseMove và gọi chuột lên bất cứ khi nào nó nằm ngoài bảng điều khiển và nhấn nút. Trong trình xử lý MouseMove, bạn có thể sử dụng e.X và e.Y cho vị trí và e.Button cho trạng thái nút.

Khi nút chuột được nhấn bên ngoài điều khiển và di chuyển vào bên trong, bảng điều khiển không có quyền hạn trên chuột, vì chuột được coi là di chuyển trong biểu mẫu hoặc bất kỳ điều khiển nào trong khi nhấn nút. Vì vậy, bạn có thể gặp khó khăn khi sử dụng mouseDown để kích hoạt khi nút chuột được nhấn bên ngoài bảng điều khiển và sau đó di chuyển bên trong bảng điều khiển.

+0

cảm ơn bạn, đó là thông tin và hữu ích, tôi thấy bây giờ tìm kiếm giải pháp không đơn giản như tôi nghĩ, nếu (khi) tôi xử lý này tôi sẽ đăng các giải pháp ở đây cho người khác bình luận và hưởng lợi từ. – Osama

-1

tôi donnt nghĩ [mousedraw] có thể làm tốt

click = mouseDown + mouseUp 

vậy,

When mouseDown : mousedraw = false; 

When mouseUp : mousedraw = true; 
+0

có lẽ tôi không giải thích đủ, hoặc tôi không hiểu bạn. [mousedraw] là một bool được thay đổi bất cứ khi nào một con chuột hoặc chuột lên sự kiện được nhấn, vì vậy trong chuột xuống tôi đặt mousedraw thành true, và trên chuột lên tôi đặt nó thành false. – Osama

+0

Tôi không hiểu cách sử dụng này, có lẽ bạn nên thêm một số giải thích – Breeze

Các vấn đề liên quan