2009-03-27 18 views
6

¿Hay un método para obtener las coordenadas (x, y) del cursor del mouse en un evento de control de DoubleClick?Obtener posición/botón de clic del mouse en evento de DoubleClick

Por lo que yo puedo decir, la posición que se ha obtenido a partir de lo global:

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

También, ¿existe un método para obtener lo que produjo el botón de doble clic?

Respuesta

5

Control.MousePosition and Control.MouseButtons es lo que estás buscando. Use Control.PointToClient() y Control.PointToScreen() para convertir entre la pantalla y controlar las coordenadas relativas.

Consulte MSDN Control.MouseButtons Property, Control.MousePosition Property, Control.PointToClient Method y Control.PointToScreen Method para obtener más información.


ACTUALIZACIÓN

no ver el bosque por los árboles ...: D Ver Moose's respuesta y echar un vistazo a los argumentos del evento.

Este MSDN article enumera qué acciones del mouse activan qué eventos dependen del control.

ACTUALIZACIÓN

que se perdió el elenco de Moose así que esto no va a funcionar. Debe usar las propiedades de Control estático desde Control.DoubleClick(). Como la información del botón está codificada como campo de bits, debe probar de la siguiente manera con el botón que desee.

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

¿Cómo puedo determinar qué botón se presiona usando Control.MouseButtons? Contiene constantes para comparar, pero aparte de eso, no veo cómo usarlo. El doubleclick eventargs no contiene una variable para comparar con esto. – user79755

+0

danbruc, ¡gracias por el aviso! He editado mi publicación para reflejar su información. – Moose

+0

Su respuesta es mejor: no hay ningún evento MouseDoubleClick en el Compact Framework, pero su método está bien. – Soonts

9

Nota: Como danbruc señaló, esto no va a trabajar en un control de usuario, porque el correo no es un MouseEventArgs. También tenga en cuenta que no todos los controles le darán un evento de DoubleClick, por ejemplo, un botón le enviará dos eventos de clic.

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

Obtiene x, y en relación con la forma ..

también tiene el botón izquierdo o derecho MouseEventArgs.

+0

Ohhhh sí ... simplemente me olvidé de lo más simple ...: D –

+0

Ohhhh no ... yo será nulo porque los argumentos del evento no son MouseEventArgs así que no funciona. –

+0

@danbruc - Uh, acabo de intentarlo para estar seguro ... ¿me sirve? Tal vez solo estoy sosteniendo mi lengua bien! – Moose

13

Uso del MouseDoubleClick evento en lugar de evento de DoubleClick. MouseDoubleClick proporciona MouseEventArgs en lugar de los EventArgs simples. Esto también se aplica a "MouseClick" en lugar de a "Click" ... y a todos los demás eventos relacionados con el mouse.

MouseDoubleClick se asegura de que el mouse esté realmente allí. DoubleClick puede ser causado por otra cosa y las coordenadas del mouse pueden no ser útiles: MSDN: "Los eventos de DoubleClick son lógicamente eventos de nivel superior de un control. Pueden surgir debido a otras acciones del usuario, como combinaciones de teclas de método abreviado."

Cuestiones relacionadas