2010-04-23 17 views
10

En el trabajo, soy un entrenador. Estoy preparando lecciones para enseñar a la gente cómo "hacer cosas" sin un mouse ... Alguna vez personas han visto el cuadro de texto "iniciar sesión", escriben, toman el mouse, hacen clic en "contraseña", escriben su contraseña y vuelven a tomar el mouse hacer clic en el botón "Conectar" debajo?Inhabilitando el movimiento del mouse y clics en total en C#

Así que les voy a enseñar cómo hacer todo eso sin un ratón (entre otras muchas cosas, por supuesto)

Al final del curso, voy a hacer pasar una especie de examen.

Estoy construyendo una pequeña aplicación basada en el asistente en la que presento algunos ejemplos de formularios similares a los de la vida real para completar, pero quiero desactivar su mouse programáticamente mientras hacen esta prueba.

Sin embargo, más adelante en el asistente, tendré que dejar que usen su mouse nuevamente.

¿Existe alguna forma, posiblemente fácil, de simplemente deshabilitar el mouse por un tiempo y volver a habilitarlo más adelante?

Estoy en C# 2.0, programación bajo VC# 2k5, si lo que importa

+0

9 dedos en el teclado frente a un mouse. teclado gana. –

+1

@Raj 9 dedos? bien a) ¿qué haces con el otro, o b) tienes un dedo extra? Y estoy de acuerdo con la afirmación de que la navegación con el teclado (en general) es más rápida que la navegación del mouse. – penguat

+1

+1 para enseñar a no confiar en el mouse! – invert

Respuesta

8

Haga que su formulario implemente IMessageFilter.

A continuación, agregue el código siguiente al formulario:

Rectangle BoundRect; 
    Rectangle OldRect = Rectangle.Empty; 

    private void EnableMouse() 
    { 
     Cursor.Clip = OldRect; 
     Cursor.Show(); 
     Application.RemoveMessageFilter(this); 
    } 
    public bool PreFilterMessage(ref Message m) 
    { 
     if (m.Msg == 0x201 || m.Msg == 0x202 || m.Msg == 0x203) return true; 
     if (m.Msg == 0x204 || m.Msg == 0x205 || m.Msg == 0x206) return true; 
     return false; 
    } 
    private void DisableMouse() 
    { 
     OldRect = Cursor.Clip; 
     // Arbitrary location. 
     BoundRect = new Rectangle(50, 50, 1, 1); 
     Cursor.Clip = BoundRect; 
     Cursor.Hide(); 
     Application.AddMessageFilter(this); 
    } 

Esto ocultará el cursor, hacerlo de modo que no se pueden mover y desactivar la derecha y la izquierda MouseButtons.

1

¿Qué tal un enfoque diferente (pensar fuera de la "tienen que programar una solución para todo" caja): antes de iniciar el lecciones, desconecte todos los ratones ... haga que vuelvan a conectarlo cuando se necesite el mouse nuevamente.

+0

"Sin embargo, más adelante en el asistente, tendré que dejar que usen su mouse nuevamente". – Tesserex

+0

@Tesserex - ¿los vuelve a conectar en ese punto? – Oded

2

Está buscando el Cursor.Hide() method.

Tenga en cuenta que el cursor seguirá siendo móvil, simplemente no será visible.
Si está ejecutando con Estilos visuales habilitados, aún sería posible usar el mouse mediante el seguimiento de los efectos de desplazamiento.
Sin embargo, cualquiera que sea capaz de hacerlo probablemente no necesite su curso.

Una forma más "divertida" de hacerlo sería tomar el evento MouseMove y establecer Cursor.Position para evitar que el mouse se mueva a su panel.

Cuestiones relacionadas