2009-07-27 15 views
6

En primer lugar, el evento mousewheel no aparece en el panel de eventos de Visual Studio 2008, lo cual es muy molesto.No se puede activar el evento MouseWheel en C# Windows Forms

me encontré con el formato correcto en línea sin embargo, y escribió esto en mi código:

private void Form1_MouseWheel(object sender, MouseEventArgs e) 
    { 
     Debug.WriteLine("Foo"); 
    } 

... de la que estoy recibiendo ninguna respuesta cuando se hace girar la rueda del ratón.

Estoy haciendo esto en el área de clase principal de mi código, y el diseñador contiene solo una forma/ventana/lo que sea para que el mouse no pierda el foco.

namespace BlahBlah 
{ 
    public partial class Form1 : Form 
    { 

Y por el contrario, tengo este método justo encima de la rueda del ratón uno y funciona bien:

private void Form1_MouseClick(object sender, MouseEventArgs e) 
    { 
     Debug.WriteLine("Foo"); 
    } 

Si tuviera que adivinar, estoy pensando que no estoy vincular correctamente el código a la forma (también conocido como: todas las cosas que el estudio visual haría por mí si añadiera este evento a través del panel de eventos del diseñador). Pero podría estar equivocado o simplemente estar cometiendo un error tonto.

¿Puede ayudarme a CUALQUIER tipo de respuesta cuando se gira la rueda del mouse? ¡Gracias!

Respuesta

11

El evento mousewheel debe estar configurado.

Añadir este al constructor de Form1 (Después InitalizeComponents();)

this.MouseWheel+= new MouseEventHandler(Form1_MouseWheel); 
+0

Eso es todo, gracias tanto! Pregunta adicional: Tengo una para mi método MouseMove también (this.MouseMove + = Form1_MouseMove;), pero no para MouseClick. ¿Por qué no necesita uno? – cksubs

+1

Bueno ... ¿responde a un clic del mouse? Si no necesita reaccionar a los clics del mouse, no necesitará uno. Algunos controles han vinculado automáticamente los eventos de clic del mouse (para desplazamiento y otras cosas). Depende de lo que intentes lograr. – Kurisu

+0

Me refiero a que mi método MouseClick funciona (dispara con el mouse) sin la necesidad del material ".... + = ...." en el constructor. Es por eso que me olvidé de agregar algo así para MouseWheel, MouseClick funcionó bien. – cksubs

1

No sé cómo suscribirse a ese evento en particular, pero puede reemplazar el método apropiado en el formulario.

6

no tengo la reputación suficiente para responder con un comentario, pero la respuesta a su pregunta secundario es que los delegados no necesitan ser configurado. Sin embargo, cuando crea uno haciendo doble clic en él en el panel de propiedades, el código se genera automáticamente y se coloca en el archivo * .designer.cs en el método InitializeComponent.

+1

Sí, eche un vistazo al archivo designer.cs y mire en las regiones, verá cómo el generador de código ha trabajado un poco en el cableado de estos eventos para usted. –

1

Lo mejor en este caso es anular la función de miembro OnMouseWheel en lugar de registrarse en el evento. Por ejemplo:

public class MyFrm : Form 
{ 
    protected override void OnMouseWheel(MouseEventArgs e) 
    { 
     /*Handle the mouse wheel here*/ 
     base.OnMouseWheel(e); 
    } 
} 
+0

¿Por qué es eso mejor? –

+1

@JonofAllTrades Tiene un mejor rendimiento y más flexibilidad (puede hacer su trabajo antes que cualquiera de los delegados que están suscritos al evento). http://stackoverflow.com/questions/159317/when-should-you-override-onevent-asopposed-to-subscribing-to-the-event-when-inh –

Cuestiones relacionadas