2011-02-16 26 views
8

En MS-Word clic de ratón eventos se utilizan como:Triple Mouse Haga clic en C#?

solo clic - colocar el cursor
doble clic - Selecciona Palabra
tres clics - Selecciona el párrafo

En C# que puedo manejar simple y doble eventos de clic del mouse pero quiero manejar un evento Triple Mouse Click en C# Windows TextBox.

Ejemplo:

void textbox1_TripleClick() 
{ 
    MessageBox.Show("Triple Clicked"); 
} 

Respuesta

7

Tener un vistazo a esto: Mousebuttoneventargs.clickcount

Eso debe cubrirlo supongo.

+0

Para Windows Forms (en lugar de WPF) probablemente querría la propiedad MouseEventArgs.ClickCount muy similar: http://msdn.microsoft.com/en-us/library/system.windows.forms.mouseeventargs.clicks.aspx – EricLaw

+4

... Excepto que no funciona en Winforms. En un TextBox al menos, ClickCount solo devuelve 1 ... ¡incluso con un doble clic! – EricLaw

2

Sólo hay que almacenar el momento en que se produjo un doble clic en la casilla correspondiente. Luego, en el controlador para un solo clic, verifique si un doble clic ocurrió hace no más de N milisegundos (N = 300 o menos).

En este caso, llame a su función TripleClick() directamente o defina un nuevo evento para usted derivado "TripleClickAwareTextBox".

+6

No * adivinar * un tiempo que va a ser demasiado corto para algunos usuarios, demasiado tiempo para otros. Use el tiempo que el usuario ha configurado en su sistema operativo como su hora preferida de doble clic. Se puede acceder a través de SystemInformation.DoubleClickTime - http://msdn.microsoft.com/en-us/library/system.windows.forms.systeminformation.doubleclicktime.aspx –

+3

También debe asegurarse de que cada clic se produzca dentro de un cuadro delimitador de la último clic, con tamaño SystemInformation.DoubleClickSize. – EricLaw

2

yo estaba trabajando en un problema similar en C++

En primer lugar, es necesario entender cómo se disparan los eventos, voy a tomar clic con el botón izquierdo del ratón: - Haga clic una vez -> Botón izquierdo de eventos de clic despedido - Doble clic -> Evento de doble clic izquierdo disparado

Windows solo lo admite hasta este nivel.

Por triple clic, es esencialmente un clic después de un doble clic con el tiempo intermedio lo suficientemente pequeño. Entonces, lo que debe hacer es manejar un evento de clic, verificar si hubo un doble clic antes de eso y activar un evento de triple clic.

Aunque el código es diferente, así es como lo hago:

  • Declarar doubleClickTime & doubleClickInterval para almacenar la última vez que doble click & el tiempo entre clics.
  • Declarar tripleClickEventFired para indicar que ya hemos disparado un evento (init en false)

Manipuladores

Haga clic Handler

if ((clock() - doubleClickFiredTime) < doubleClickInterval) 
    <fire triple click event> 
    tripleClickFired = true; 
else 
    <fire click event> 

doble clic manejador

doubleClickTime == clock() 
doubleClickInterval == GetDoubleClickTime() * CLOCKS_PER_SEC/1000; 

If (!tripleClickEventFired) 
    <fire doubleClickEvent> 
else 
    tripleClickEventFired = false; 

Las funciones que utilizo fue:

  • reloj(): obtener la hora actual del sistema en la unidad
  • GetDoubleClickTime(): una función que proporciona Windows para obtener el tiempo entre clics
  • la " * CLOCKS_PER_SEC/1000; " parte tiene la intención de convertir el valor de retorno de GetDoubleClickTime() para UNIDAD '''

NOTA: el clic 3ª incendios tanto un clic y evento de doble clic en el nivel del sistema

0

hacer esto:

private int _clicks = 0; 
    private System.Windows.Forms.Timer _timer = new System.Windows.Forms.Timer(); 
    private void txtTextMessage_MouseUp(object sender, MouseEventArgs e) 
    { 
     _timer.Stop(); 
     _clicks++; 
     if (_clicks == 3) 
     { 
      // this means the trip click happened - do something 
      txtTextMessage.SelectAll(); 
      _clicks = 0; 
     } 
     if (_clicks < 3) 
     { 
      _timer.Interval = 500; 
      _timer.Start(); 
      _timer.Tick += (s, t) => 
      { 
       _timer.Stop(); 
       _clicks = 0; 
      }; 
     } 
    } 
Cuestiones relacionadas