2010-04-16 5 views
6

Ho un pannello che contiene molte picturebox. Ogni picturebox ha registrato "contextRightMenu" come menu contestuale.Come ottenere il mouse quando viene visualizzato il menu di scelta rapida?

Quello che voglio quando si apre il menu di scelta rapida è quello di ottenere la posizione attuale.

Ho provato a recuperare la posizione utilizzando mouseDown e clic, ma questi eventi si verificano dopo aver fatto clic su uno degli elementi del menu di scelta rapida, e ciò è troppo tardi.

l'evento popup del menu di scelta rapida non fornisce argomenti di evento del mouse, quindi non so come ottenere la posizione.

Se riesco ad ottenere gli argomenti del mouse è facile.

poi ho appena posso:

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 
} 

qualcuno mi può aiutare sia ottenere alcune args eventi del mouse, o suggerire un evento che verrà eseguito prima che gli alti contextmenu pop?

Grazie in anticipo

risposta

0

È possibile provare la manifestazione MouseClick di PictureBox e ottenere la posizione se si tratta di un click destro.

+0

Provalo ora! – Ikky

+0

Il mouseclick non ha avuto argomenti con mouseev – Ikky

+0

Prova gli eventi MouseDown o MouseUp. Non so le cose supportate in CF. Dai anche un'occhiata alla proprietà Cursor.Position. – Amsakanna

1

Gestire il MouseClick del PictureBox. Qualcosa di simile (in 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

Grazie, proverò che ora :) – Ikky

+0

bah, non riesco a trovare nulla di equivalente alla soluzione vb ... – Ikky

+0

qualcosa Trovato: private void panelMouseClick (Object sender, EventArgs e) { MouseEventArgs args = e come MouseEventArgs; } Ma args appena tornati nulla, comunque :( – Ikky

8

Vuoi la posizione del cursore rispetto al PictureBox che era proprio fatto clic o relativo al pannello genitore o alla finestra genitore o eventualmente solo alla posizione dello schermo?

Quanto segue potrebbe essere d'aiuto come punto di partenza. Qui ottengo il mouse corrente cooridna sull'intero schermo, quindi utilizzando SourceControl dal contextRightMenu, che è un riferimento all'istanza del controllo su cui è stato fatto clic con il pulsante destro del mouse, convertiamo le coordinate dello schermo in un punto relativo al controllo del codice sorgente.

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

Hi! E ' Mi interessa la posizione della Parent Panel. Ma guarderò in SourceControl. Grazie – Ikky