2010-01-19 9 views
13

MouseWheel -Ereignis löst nicht , wenn ich ein Steuerelement (ListBox, Panel, TextBox) mit Bildlaufleisten verwenden.MouseWheel -Ereignis wird nicht ausgelöst, wenn ein Steuerelement mit Bildlaufleisten (in C# Windows Forms) verwendet wird

Problem reproduzieren:

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

Vielleicht ist das Problem in der Maus, I "Lenovo USB Optical Wheel Mouse" (Standardkonfiguration "Whell Taste" Funktion "Schnell/Autoscroll") verwenden – halorty

+0

ich verwenden: Windows Vista Buisness, .Net Framework 3.5 SP1 , Visual Studio 2008 Standard Edition (alle offiziellen Hotfixes). Build Debug: Zielframework = .Net Framework 3.5, Ausgabetyp = Windows Anwendung – halorty

+0

Mauskonfiguration: Systemsteuerung/Maus/Wheel/Whell-> Enable Universal Scrolling; Systemsteuerung/Maus/Rad/Whell Button-> Quick/AutoScrol; Systemsteuerung/Maus/Rad/Scroll-Geschwindigkeit-> Scroll = 10 Zeile (n) pro Noth; – halorty

Antwort

2

Ich fand Lösung, gility ist Standard "Mauskonfiguration". Lenovo USB Optical Wheel Mouse Standardkonfiguration ist:

Systemsteuerung/Maus/Rad/Whell->Aktivieren Universal-Scrolling;

ich geändert:

Systemsteuerung/Maus/Rad/Whell->Verwenden Sie Microsoft Office 97 Scrolling Emulation Nur

Jetzt in Mausrad .net Code mit FocusedSteuerung arbeiten.


Aber Fragen sind:

  • wie kann ich es in .net Code beheben?
  • Wie kann ich diese Situation in .NET-Code erkennen?

Irgendwelche Ideen?

+0

Verwenden Spy ++ und überprüfen, welche Nachrichten an die Kontrollen gesendet werden. – SLaks

2

Sie normalerweise sicher, die Kontrolle, die Sie das Mousewheel-Ereignis aktiv zu handhaben wollen, stellen müssen.

Versuchen Sie zum Beispiel, button1.Select() im Form Load (oder Shown) -Ereignis aufzurufen und dann das Scrollrad zu verwenden.

zB:

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

    button1.Select(); 
} 
+0

Immer noch nichts, dasselbe Problem, es ist sehr seltsam, aber in meinem Fall funktioniert es nicht. Selbst wenn ich Focus oder Select setze und Cursor über dem Buton1 liegt, wenn ich das Mausrad benutze, scrollt es textbox1 (sic!) – halorty

0

Ich habe versucht, Ihrem Beispiel, und, ob die Linien kommentiert wurden oder nicht, das Mousewheel-Ereignis wird nur ausgelöst, wenn die Taste fokussiert ist. Dieses Verhalten ist von Entwurf. (das MouseWheel Ereignis, wie Tastaturereignisse, geht zum fokussierten Steuerelement)

+0

Ich lese über i Dokumentation, aber es ist sehr seltsam, aber in meinem Fall funktioniert es nicht : Ich füge hinzu: public Form1() { (...) button1.Click + = button1_Click; (...) } private void button1_Click (object sender, System.EventArgs e) { button1.Focus(); } Ein Problem, auch stelle ich Focus und Cursor über dem buton1, wenn ich Mausrad scrollt es textbox1 (sic!) – halorty

12

Ich hatte das gleiche Problem, und was für mich funktionierte, war, einen Handler für das Ereignis MouseEnter im Steuerelement hinzuzufügen, das mit oder ohne Fokus ausgelöst wird.

Danach konnte ich die mouseWheel Ereignisse ohne Probleme bekommen.

Verwandte Themen