2010-01-19 10 views
13

L'evento MouseWheel non viene attivato quando si utilizza qualsiasi controllo (ListBox, Panel, TextBox) con le barre di scorrimento.L'evento MouseWheel non si attiva quando si utilizza qualsiasi controllo con gli strumenti di scorrimento (in C# Windows Form)

per riprodurre il problema:

public class Form1 : Form 
{ 
    private readonly Button button1; 
    private readonly TextBox textBox1; 

    private void button1_MouseWheel(object sender, MouseEventArgs e) 
    { 
    ToString(); // doesn't fire when uncomment lines below 
    } 

    public Form1() 
    { 
    button1 = new Button(); 
    textBox1 = new TextBox(); 
    SuspendLayout(); 

    button1.Location = new System.Drawing.Point(80, 105); 
    button1.Size = new System.Drawing.Size(75, 23); 
    button1.MouseWheel += button1_MouseWheel; 
    button1.Click += button1_Click; 

    textBox1.Location = new System.Drawing.Point(338, 105); 
    //textBox1.Multiline = true; // uncomment this 
    //textBox1.ScrollBars = ScrollBars.Vertical; // uncomment this 
    textBox1.Size = new System.Drawing.Size(100, 92); 

    ClientSize = new System.Drawing.Size(604, 257); 
    Controls.Add(textBox1); 
    Controls.Add(button1); 
    ResumeLayout(false); 
    PerformLayout(); 
    } 

    // Clicking the button sets Focus, but even I do it explicit Focus() or Select() 
    // still doesn't work 
    private void button1_Click(object sender, System.EventArgs e) 
    { 
    button1.Focus(); 
    button1.Select(); 
    } 
} 
+0

Forse il problema è nel topo, io uso "Lenovo USB Optical Wheel Mouse" (configurazione di default "Interasse Pulsante" Funzione "Quick/AutoScroll") – halorty

+0

che uso: Windows Vista Buisness, .Net Framework 3.5 SP1 , Visual Studio 2008 Standard Edition (tutti gli hotfix ufficiali). Build Debug: Target Framework = .Net Framework 3.5, Tipo di output = Applicazione Windows – halorty

+0

Configurazione mouse: Pannello di controllo/Mouse/Ruota/Whell-> Abilita scorrimento universale; Pannello di controllo/Mouse/Ruota/Pulsante Whell-> Quick/AutoScrol; Pannello di controllo/Mouse/Ruota/Velocità di scorrimento-> Scorrimento = 10 linea/e per noth; – halorty

risposta

2

ho trovato soluzione, gility è default "Configurazione del mouse". Wheel Mouse ottico configurazione predefinitaLenovo USB è:

Pannello di controllo/Mouse/rotella/Whell->Attiva Scorrimento universale;

ho cambiato:

Pannello di controllo/Mouse/rotella/Whell->Utilizzare Microsoft Office 97 scorrimento emulazione Solo

Ora nel codice .NET MouseWheel lavorare con Focalizzatacontrollo.


Ma le domande sono:

  • come posso risolvere il problema nel codice .NET?
  • come posso rilevare questa situazione nel codice .net?

Qualche idea?

+0

Usa Spy ++ e controllare quali messaggi vengono inviati ai controlli. – SLaks

2

Normalmente necessario assicurarsi che il controllo che si desidera gestire l'evento MouseWheel è attivo.

Ad esempio, provare a chiamare button1.Select() nell'evento Form Load (o Shown) e quindi utilizzare la rotella di scorrimento.

esempio:

private void Form1_Load(object sender, EventArgs e) 
{ 
    button1.MouseWheel += new MouseEventHandler(button1_MouseWheel); 

    button1.Select(); 
} 
+0

Ancora niente, lo stesso problema, è molto strano, ma nel mio caso non funziona. Anche io metto Focus o Select, e il cursore è sopra il buton1, quando uso la rotellina del mouse, scorre textbox1 (sic!) – halorty

0

ho cercato il tuo esempio, e, se le linee sono state commentate o meno, l'evento MouseWheel solo incendi se il pulsante è a fuoco. Questo comportamento è di progettazione. (L'evento MouseWheel, come gli eventi di tastiera, va al controllo mirato)

+0

Ho letto di documentazione ma, è molto strano, ma nel mio caso non funziona : Aggiungo al codice: public Form1() { (...) button1.Click + = button1_Click; (...) } private void button1_Click (oggetto mittente, System.EventArgs e) { button1.Focus(); } Non funziona, anche io impostare lo stato attivo, e cursore si trova sopra il buton1, quando uso la rotellina del mouse, scorre textbox1 (sic!) – halorty

12

Avevo lo stesso problema e ciò che ha funzionato per me era aggiungere un gestore per l'evento MouseEnter nel controllo, che viene attivato con o senza focus.

private void chart1_MouseEnter(object sender, EventArgs e) 
{ 
    chart1.Focus(); 
} 

Dopo questo, ho potuto ottenere gli eventi mouseWheel senza problemi.

Problemi correlati