2010-04-16 5 views
6

J'ai un panneau qui contient de nombreuses images. Chaque image a enregistré "contextRightMenu" comme leur menu contextuel. Ce que je veux quand le menu contextuel apparaît est d'obtenir la position de souris actuelle.Comment obtenir mouseposition lorsque le menu contextuel apparaît?

J'ai essayé d'obtenir la position de la souris en utilisant mouseDown et cliquez sur, mais ces événements se produisent après un clic sur l'un des éléments du menu contextuel, et c'est trop tard. L'événement popup du menu contextuel ne fournit pas d'arguments d'événement de souris, donc je ne sais pas comment obtenir la position de la souris.

Si je peux obtenir des arguments d'événement de souris, c'est facile.

Alors je ne peux:

this.contextRightClick.Popup += new System.EventHandler(this.contextRightClick_Popup); 

// If EventArgs include mouseposition within the sender 
private void contextRightClick_Popup)(object sender, EventArgs e) 
{ 
    int iLocationX = sender.Location.X; 
    int iLocationY = sender.Location.Y; 

    Point pPosition = new Point(iLocationX + e.X, iLocationY + e.Y); // Location + position within the sender = current mouseposition 
} 

Quelqu'un peut-il me aider soit obtenir des args d'événements de la souris, ou suggérer un événement qui se déroulera avant les pop ups contextmenu?

Merci à l'avance

Répondre

0

Vous pouvez essayer de l'événement MouseClick picturebox et obtenir l'emplacement si elle est un clic droit.

+0

L'essayer maintenant! – Ikky

+0

Le clic de souris n'a pas d'arguments mouseevent – Ikky

+0

Essayez les événements MouseDown ou MouseUp. Je ne connais pas les choses soutenues dans les FC. Jetez également un coup d'oeil à la propriété Cursor.Position. – Amsakanna

1

Gérez le MouseClick de votre PictureBox. Quelque chose comme ça (en vb.net):

Sub OnMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) handles YourPictureBox.mouseclick 

     If e.Button = Windows.Forms.MouseButtons.Right then 
     'if you need the screen posistion 
     PointToScreen(New System.Drawing.Point(e.X, e.Y)) 
     'if you need just the location 
     e.Location 

     end if 
end sub 
+0

Merci, je vais essayer maintenant :) – Ikky

+0

bah, ne peut pas sembler trouver quoi que ce soit équivalent à votre solution vb ... – Ikky

+0

trouvé quelque chose: private void panelMouseClick (Object sender, EventArgs e) { MouseEventArgs args = e en tant que MouseEventArgs; } Mais args venons juste de rentrer nulle, de toute façon :( – Ikky

8
here

Voulez-vous l'emplacement du curseur par rapport à la PictureBox qui était juste cliquée ou par rapport au Panel parent, ou la fenêtre parente ou peut-être juste la position de l'écran?

Les éléments suivants peuvent vous aider en tant que point de départ. Ici j'obtiens les coordonnées de la souris courante sur l'écran entier puis en utilisant le SourceControl du contextRightMenu, qui est une référence à l'instance du contrôle sur lequel on a cliqué droit, on convertit les coordonnées de l'écran en un point relatif au contrôle source.

void contextRightMenu_Popup(object sender, EventArgs e) 
{ 
    ContextMenu menu = sender as ContextMenu; 

    if (menu != null) 
    { 
    // Get cursor position in screen coordinates 
    Point screenPoint = Cursor.Position; 

    // Convert screen coordinates to a point relative to the control 
    // that was right clicked, in your case this would be the relavant 
    // picture box. 
    Point pictureBoxPoint = menu.SourceControl.PointToClient(screenPoint); 
    } 
} 
+0

Salut! Il est Je suis intéressé par la position du panel de parents. Mais je vais regarder dans le SourceControl. – Ikky

Questions connexes