2011-12-19 18 views
6

¿Cómo se obtienen todos los clics para pasar por el evento? Me di cuenta de que si hace clic demasiado rápido cree que está haciendo doble clic y no envía los clics al controlador de eventos. ¿Hay alguna manera de obtener todos los clics?WinForms deshabilita los clics dobles y acepta todos los clics del mouse?

+2

Utilice el evento mousedown en su lugar. –

+0

@RussellTroywest Creo que el evento [MouseClick] (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.mouseclick%28VS.80%29.aspx) sería mejor. Por elevar el orden –

+1

@Michael: según MSDN "Dos clics individuales que se producen lo suficientemente cerca en el tiempo, según lo determinado por la configuración del mouse del sistema operativo del usuario, generarán un evento MouseDoubleClick en lugar del segundo evento MouseClick". - Que es lo que High está viendo. –

Respuesta

9

No estoy seguro de por qué esta pregunta recibió una recompensa, la respuesta aceptada debería ser ya muy cerca de una solución. Excepto que debe usar MouseUp en lugar de MouseDown, su usuario normalmente espera que una acción de clic surta efecto cuando suelta el botón. Lo que proporciona la opción de volver atrás "¡Uy, no significaba hacer clic en él, mover el mouse para que se ignore".

Sin embargo, para los controles integrados de Winforms, como PictureBox, esto se puede configurar con el método Control.SetStyle(). Agregue una nueva clase a su proyecto y pegue el código que se muestra a continuación. Compilar. La caída de la nueva de control de la parte superior de la caja de herramientas:

using System; 
using System.Windows.Forms; 

class MyPictureBox : PictureBox { 
    public MyPictureBox() { 
     this.SetStyle(ControlStyles.StandardDoubleClick, false); 
    } 
} 

No obstante ten cuidado de que esto no va a funcionar para las clases .NET que envuelven un control nativo de Windows existente. Al igual que TextBox, ListBox, TreeView, etc. La configuración subyacente para eso es el indicador de estilo WNDCLASSEX.style member, CS_DBLCLKS. El código que establece ese indicador de estilo se procesa en Windows y no se puede cambiar. Necesitará otro tipo de cirugía para volver a hacer doble clic con un solo clic. Puede hacerlo reemplazando el método WndProc(), voy a dar un ejemplo de cuadro de texto:

using System; 
using System.Windows.Forms; 

class MyTextBox : TextBox { 
    protected override void WndProc(ref Message m) { 
     // Change WM_LBUTTONDBLCLK to WM_LBUTTONCLICK 
     if (m.Msg == 0x203) m.Msg = 0x201; 
     base.WndProc(ref m); 
    } 
} 

sólo cambia el nombre de la clase si quieres que lo haga por otros controles. Comando de Winforms para que funcione de la manera que desee nunca requiere mucho código, solo Petzold :)

-2

Creo que quiere contar con todo el clic. Si desea contar, haga clic en establecer una variable de contador y aumentarla en el evento click. Puede ser esta ayuda para usted ....

+0

Hágalo usted mismo y haga clic en él realmente rápido 10 veces. Obtendrás un número menor a 10. Quiero los 10 de esos clics. – Will

2

Desea utilizar el evento MouseDown de controles en lugar del evento Click. Se llamará a MouseDown cada vez que se presiona el mouse en ese control. Es posible que Click no se llame si el sistema cree que fue un doble clic. En su lugar, se generaría un evento de DoubleClick.

Cuestiones relacionadas