2009-03-27 16 views

Odpowiedz

5

Control.MousePosition i Control.MouseButtons jest tym, czego szukasz. Użyj Control.PointToClient() i Control.PointToScreen(), aby przekonwertować między względnymi współrzędnymi ekranu i kontrolki.

Aby uzyskać szczegółowe informacje, zapoznaj się z dokumentami MSDN Control.MouseButtons Property, Control.MousePosition Property,i Control.PointToScreen Method.


UPDATE

nie widzieć drewna na drzewach ...: D Zobacz Moose's odpowiedź i rzucić okiem na argumentach zdarzeń.

Ten numer określa, które akcje myszy wyzwalają określone zdarzenia w zależności od formantu.

UPDATE

Tęskniłem obsady łoś, tak to nie będzie działać. Musisz użyć właściwości kontroli statycznej z poziomu Control.DoubleClick(). Ponieważ informacja o przycisku jest zakodowana jako pole bitowe, musisz przetestować następująco za pomocą odpowiedniego przycisku.

(Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left 
+0

Jak określić, który przycisk zostanie naciśnięty za pomocą Control.MouseButtons? Zawiera stałe do porównania, ale poza tym nie wiem, jak z niego korzystać. Zdarzenie doubleclick nie zawiera zmiennej do porównania z tym. – user79755

+0

danbruc, dzięki za heads up! Zmodyfikowałem mój post, aby odzwierciedlić Twoje informacje. – Moose

+0

Twoja odpowiedź jest lepsza: nie ma zdarzenia MouseDoubleClick w Compact Framework, ale twoja metoda jest w porządku. – Soonts

9

Uwaga: Jako danbruc zauważył, to nie będzie działać na UserControl, ponieważ e nie jest to MouseEventArgs. Pamiętaj też, że nie wszystkie formanty dają nawet zdarzenie DoubleClick - na przykład przycisk po prostu wyśle ​​dwa zdarzenia kliknięcia.

private void Form1_DoubleClick(object sender, EventArgs e) 
    { 
     MouseEventArgs me = e as MouseEventArgs; 

     MouseButtons buttonPushed = me.Button; 
     int xPos = me.X; 
     int yPos = me.Y; 
    } 

Pobiera X i Y w stosunku do postaci ..

zawiera ponadto przycisk na lewo lub prawo MouseEventArgs.

+0

Ohhhh tak ... po prostu zapomniałem o najprostszej rzeczy ...: D –

+0

Ohhhh no ... ja będzie pusta, ponieważ argumenty zdarzenia nie są MouseEventArgs, więc to nie działa. –

+0

@danbruc - Uh, po prostu próbowałem, żeby się upewnić ... czy to działa dla mnie? Może po prostu trzymam język w prawo! – Moose

13

Użyj zdarzenia zamiast zdarzenia DoubleClick. MouseDoubleClick zapewnia MouseEventArgs zamiast zwykłego EventArgs. Dotyczy to "MouseClick", a nie "Click", jak również ... i wszystkich innych zdarzeń, które dotyczą myszy.

MouseDoubleClick zapewnia, że ​​mysz naprawdę istnieje. Przyczyną problemu z DoubleClick może być coś innego, a współrzędne myszy mogą być niepoprawne - MSDN: "Zdarzenia DoubleClick są logicznymi zdarzeniami wyższego poziomu kontrolki i mogą być wywoływane przez inne działania użytkowników, takie jak kombinacje klawiszy skrótu."

Powiązane problemy