2009-03-27 4 views
6

Existe-t-il une méthode pour obtenir les coordonnées (x, y) du curseur de la souris dans un événement DoubleClick de contrôles?Obtenir la position/le bouton de la souris sur l'événement DoubleClick

Pour autant que je peux dire, la position doit être obtenue à partir de l'économie mondiale:

 
Windows.Forms.Cursor.Position.X, Windows.Forms.Cursor.Position.Y 

Aussi, est-il une méthode pour obtenir ce qui touche produit le double-clic?

Répondre

5

Control.MousePosition et Control.MouseButtons sont ce que vous cherchez. Utilisez Control.PointToClient() et Control.PointToScreen() pour convertir l'écran et contrôler les coordonnées relatives.

Voir MSDN Control.MouseButtons Property, Control.MousePosition Property, Control.PointToClient Method et Control.PointToScreen Method pour plus de détails.


MISE À JOUR

Ne pas voir le bois pour les arbres ...: D Voir Moose's réponse et un regard sur les arguments de l'événement.

Cette MSDN article liste les actions de la souris qui déclenchent quels événements dépendent du contrôle.

MISE À JOUR

I Missed d'un jet de Moose si cela ne fonctionnera pas. Vous devez utiliser les propriétés de contrôle statique à partir de Control.DoubleClick(). Parce que les informations du bouton sont encodées en tant que champ de bit, vous devez tester comme suit en utilisant le bouton désiré.

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

Comment déterminer quel bouton est pressé avec Control.MouseButtons? Il contient des constantes à comparer, mais à part ça je ne vois pas comment l'utiliser. Le doubleclick eventargs ne contient pas de variable à comparer avec ceci. – user79755

+0

danbruc, merci pour les heads up! J'ai modifié mon message pour refléter vos informations. – Moose

+0

Votre réponse est meilleure: il n'y a pas d'événement MouseDoubleClick dans le Compact Framework, mais votre méthode est correcte. – Soonts

9

Note: Comme danbruc a souligné, cela ne fonctionnera pas sur un UserControl, parce que e n'est pas un MouseEventArgs. Notez également que tous les contrôles ne vous donneront même pas un événement DoubleClick. Par exemple, un bouton vous enverra simplement deux événements Click.

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; 
    } 

Obtient x, y par rapport à la forme ..

a également le bouton gauche ou à droite dans MouseEventArgs.

+0

Ohhhh oui ... juste oublié la chose la plus simple ...: D –

+0

Ohhhh non ... moi sera nul parce que les arguments de l'événement ne sont pas MouseEventArgs donc cela ne fonctionne pas. –

+0

@danbruc - Euh, je l'ai juste essayé pour être sûr ... ça marche pour moi? Peut-être que je me tiens juste la langue juste! – Moose

13

Utilisez le MouseDoubleClick événement plutôt que l'événement DoubleClick. MouseDoubleClick fournit MouseEventArgs plutôt que les EventArgs simples. Cela vaut pour "MouseClick" plutôt que "Click" ainsi ... et tous les autres événements qui traitent de la souris. MouseDoubleClick s'assure que la souris est vraiment là. Les événements DoubleClick sont des événements de niveau supérieur logique d'un contrôle, ils peuvent être déclenchés par d'autres actions de l'utilisateur, telles que des combinaisons de touches de raccourci.

Questions connexes