MouseWheel event doesn't fire when using any control with scrolbars (in C# Windows Forms)

13,669

Solution 1

I found solution, gility is default "Mouse Configuration". Lenovo USB Optical Wheel Mouse default configuration is:

Control Panel/Mouse/Wheel/Whell->Enable Universal Scrolling;

I changed to:

Control Panel/Mouse/Wheel/Whell->Use Microsoft Office 97 Scrolling Emulation Only

Now in .net code MouseWheel working with Focused Control.


But questions are:

  • how can I fix it in .net code?
  • how can I detect this situation in .net code?

Any ideas ?

Solution 2

I was having the same problem, and what worked for me was to add a handler for the event MouseEnter in the control, that one is triggered with or without focus.

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

After that I could get the mouseWheel events with no problems.

Solution 3

You normally need to make sure the control you want to handle the MouseWheel event is active.

For example try calling button1.Select() in the Form Load (or Shown) event and then using the scroll wheel.

eg:

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

    button1.Select();  
}
Share:
13,669

Related videos on Youtube

halorty
Author by

halorty

Updated on April 15, 2022

Comments

  • halorty
    halorty about 2 years

    MouseWheel event doesn't fire when I' am using any control (ListBox, Panel, TextBox) with scrollbars.

    To reproduce problem:

    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();
      }
     }
    
  • halorty
    halorty over 14 years
    I read about i documentation but, it is very strange, but in my case it doesn't work: I add to code: public Form1() { (...) button1.Click += button1_Click; (...) } private void button1_Click(object sender, System.EventArgs e) { button1.Focus(); } Not working, even I set Focus, and Cursor is over the buton1, when I use mouse wheel, it scrolls textbox1 (sic!)
  • halorty
    halorty over 14 years
    Still nothing, same problem,it is very strange, but in my case it doesn't work. Even I set Focus or Select, and Cursor is over the buton1, when I use mouse wheel, it scrolls textbox1 (sic!)
  • SLaks
    SLaks over 14 years
    Use Spy++ and check which messages are being sent to the controls.
  • Jan
    Jan over 5 years
    Strangely, on one W10 compu the identical program did mousewheel, on the other it didn't, until I used your solution.