2009-07-27 21 views
6

Prima di tutto, l'evento della rotellina del mouse non è elencato nel riquadro degli eventi di Visual Studio 2008, il che è molto fastidioso.Impossibile avviare l'evento MouseWheel in C# Windows Form

ho trovato il formato corretto in linea, però, e ha scritto questo nel mio codice:

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

... da cui sto ricevendo alcuna risposta quando si ruota la rotellina del mouse.

Lo sto facendo nell'area principale della classe del mio codice, e il designer contiene solo un modulo/finestra/qualsiasi cosa in modo che il mouse non perda il focus.

namespace BlahBlah 
{ 
    public partial class Form1 : Form 
    { 

E al contrario, io ho questo metodo proprio sopra la rotella del mouse uno e funziona benissimo:

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

Se dovessi tirare a indovinare, sto pensando io non sto collegando correttamente il codice alla forma (ovvero: tutte le cose che lo studio visivo avrebbe fatto per me se avessi aggiunto questo evento attraverso il pannello degli eventi del designer). Ma potrei sbagliarmi o fare solo qualche errore stupido.

Potete aiutarmi a ottenere QUALSIASI tipo di risposta quando la rotella del mouse viene ruotata? Grazie!

risposta

11

L'evento della rotellina del mouse deve essere impostato.

Aggiungi questo al costruttore di Form1 (Dopo InitalizeComponents();)

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

Questo è tutto, grazie mille! Sidequestion: ne ho uno per il mio metodo MouseMove (this.MouseMove + = Form1_MouseMove;), ma non per MouseClick. Perché non ne ha bisogno? – cksubs

+1

Bene ... risponde a un clic del mouse? Se non ha bisogno di reagire ai clic del mouse, non ne avrà bisogno. Alcuni controlli hanno automaticamente collegato eventi di clic del mouse (per scorrere e quant'altro). Dipende da ciò che stai cercando di realizzare. – Kurisu

+0

Voglio dire solo che il mio metodo MouseClick funziona (si attiva con il clic del mouse) senza la necessità del materiale ".... + = ...." nel costruttore. Ecco perché ho dimenticato di aggiungere qualcosa del genere per MouseWheel, MouseClick ha funzionato bene. – cksubs

1

Non so come iscriversi a quell'evento particolare, ma è possibile sovrascrivere il metodo appropriato sul modulo, invece.

6

io non ho abbastanza reputazione di rispondere con un commento, ma la risposta alla tua domanda collaterale è che i delegati hanno bisogno di essere impostato. Tuttavia, quando ne crei uno facendo doppio clic nel riquadro delle proprietà, il codice viene generato automaticamente e inserito nel file * .designer.cs nel metodo InitializeComponent.

+1

Sì, dai un'occhiata al file designer.cs e guarda nelle regioni, vedrai come il codice gen ha fatto un po 'di lavoro per collegare questi eventi per te. –

1

In questo caso è meglio sostituire la funzione membro OnMouseWheel anziché registrarsi all'evento. Ad esempio:

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

Perché è meglio? –

+1

@JonofAllTrades Offre prestazioni migliori e maggiore flessibilità (puoi svolgere il tuo lavoro prima di qualsiasi delegato iscritto all'evento). http://stackoverflow.com/questions/159317/when-should-you-override-onevent-as-opposed-to-subscribing-to-the-event-when-inh –

Problemi correlati