2011-08-27 13 views
6

Tytuły mówią wszystko. Mam panel, który działa jak biała tablica. Na ruch myszy narysuj ścieżkę myszy. Działa dobrze, ale jeśli mysz opuści krawędzie panelu, chcę wywołać zdarzenie zdarzenia myszy i zdarzenia myszy, jeśli mysz opuszcza panel, podczas gdy lewy przycisk zostanie klikniętyC# zdarzenia mouseleave i mouseenter nie będą uruchamiane po kliknięciu przycisku myszy

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 jest bool wiedzieć, czy lewy przycisk zostanie kliknięty.

problemem jest: wydarzenia

urlopu i wprowadzić nie zadziała, gdy przycisk myszy jest naciśnięty.

+0

Jest to efekt uboczny klasy podstawowej Control, która ustawia właściwość Capture na wartość true w przypadku zdarzenia "mouse down". To * nie * wymaga naprawiania, rysowania poza kontrolą Bounds nie pokazuje się tak. –

Odpowiedz

7

MouseEnter i mouseLeave nie ogień, podczas gdy przycisk jest wciśnięty. Jednak, gdy przycisk zostanie ostatecznie zwolniony, odpowiednie zdarzenie mouseEnter lub mouseLeave zostanie wywołane, gdy mysz zostanie przeniesiona do lub z panelu po naciśnięciu przycisku. Tak długo jak przycisk jest wciśnięty, event mouseMove będzie nadal strzelał, nawet poza granicami panelu. Pozwala to myszce kontynuować przeciąganie lub cokolwiek, nawet po przekroczeniu granicy kontrolnej, i jest sposobem działania większości aplikacji Windows.

Jeśli możesz użyć tego zachowania w swojej aplikacji, będzie to bardziej "standardowy" interfejs użytkownika.

Jeśli koniecznie trzeba uruchomić mysz komputerową, gdy mysz opuszcza panel, można sprawdzić położenie myszy w zdarzeniu mouseMove i wywołać aplikację MouseUp, gdy znajduje się ona poza panelem i naciśnięty zostanie przycisk. W handlerce MouseMove możesz użyć e.X i e.Y dla lokalizacji, a e.Button dla statusu przycisku.

Po naciśnięciu przycisku myszy poza kontrolką i wprowadzeniu do środka, panel nie jest objęty jurysdykcją nad myszą, ponieważ mysz porusza się w formularzu lub jakimkolwiek elementem kontrolnym, w którym znajdował się po naciśnięciu przycisku. Możesz mieć problem z wystrzałem myszki, gdy przycisk myszy zostanie naciśnięty poza panel, a następnie przesunięty wewnątrz panelu.

+0

dziękuję, to było pouczające i pomocne, widzę teraz, że rozwiązanie im szuka nie jest tak proste, jak myślałem, że to, jeśli (kiedy) Zajmę się tym, więc zamieszczę tutaj rozwiązanie, aby inni mogli je komentować i czerpać z nich korzyści. – Osama

-1

donnt myślę [mousedraw] mógłby zrobić dobrze

click = mouseDown + mouseUp 

tak,

When mouseDown : mousedraw = false; 

When mouseUp : mousedraw = true; 
+0

Może nie wyjaśniłem wystarczająco, lub nie rozumiem cię. [mousedraw] to bool, który zmienia się po uderzeniu myszką w dół lub mysz w górę, więc przy pomocy myszki w dół ustawiam mousedraw na true, a mysz w górę ustawiam na false. – Osama

+0

Nie rozumiem, jak to powinno być używane, może powinieneś dodać jakieś wyjaśnienie – Breeze

Powiązane problemy