2010-04-16 8 views
6

Tengo un panel que contiene muchas cajas de fotos. Cada cuadro de imagen ha registrado "contextRightMenu" como su menú de contexto.¿Cómo obtener la posición de la mouse cuando aparece el menú contextual?

Lo que quiero cuando aparece el menú contextual es obtener la posición del mouse actual.

He intentado obtener la posición del mouse usando mouseDown y clic, pero estos eventos ocurren después de que se hace clic en uno de los elementos del menú contextual, y eso es demasiado tarde.

el evento emergente del menú contextual no entrega argumentos de eventos del mouse, por lo que no sé cómo obtener la posición del mouse.

Si puedo obtener eventos de ratón args es fácil.

Entonces sólo puedo:

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 
} 

Puede alguien ayudarme o bien obtener algunos argumentos de eventos de ratón, o sugerir un evento que va a correr antes de las subidas contextual pop?

Gracias de antemano

Respuesta

0

Puede probar el evento MouseClick del cuadro de imagen y obtener la ubicación si se trata de un clic derecho.

+0

Lo intentaré ahora! – Ikky

+0

El mouseclick no tenía mouseevent args – Ikky

+0

Pruebe MouseDown o MouseUp Events. No sé las cosas admitidas en CF. También eche un vistazo a la propiedad Cursor.Position. – Amsakanna

1

Manejar el MouseHaga clic en su PictureBox. Algo como esto (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

Gracias, voy a tratar de que ahora :) – Ikky

+0

bah, parece que no puede encontrar nada equivalente a la solución de VB ... – Ikky

+0

encontrado algo: privada vacío panelMouseClick (Object sender, EventArgs e) { MouseEventArgs args = e como MouseEventArgs; } Pero args acabamos de regresar nula, de todos modos :( – Ikky

8

¿Quieres que la posición del cursor en relación con el cuadro de imagen que estaba justo hace clic o en relación con el Panel principal, o la ventana primaria o posiblemente solo la posición de la pantalla?

Lo siguiente puede ayudar como punto de partida. Aquí obtengo las coordenas actuales del mouse en toda la pantalla y luego uso el SourceControl del contextRightMenu, que es una referencia a la instancia del control que se hizo clic derecho, convertimos las coordenadas de la pantalla a un punto relativo al control de la fuente.

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

Hola! Es la posición del Panel de Padres me interesa. Pero veré el SourceControl. Gracias – Ikky

Cuestiones relacionadas