Подтвердить что ты не робот

Как захватить колесо мыши на панели?

Как захватить колесико мыши на панели в С#? Я использую WinForms

EDIT:

Я пытаюсь сделать это на PictureBox сейчас.

Мой код:

this.pictureBox1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseClick);    
this.pictureBox1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseClick);
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)  
  {  
    MessageBox.Show("Click");  
  }

Щелчок работает. Колеса нет. Почему?

4b9b3361

Ответ 1

Windows отправляет сообщение WM_MOUSEWHEEL в элемент управления, который имеет фокус. Это не будет панель, это не контроль, который может получить фокус. Как только вы положите элемент управления на панель, произнесите кнопку, затем кнопка получит фокус и сообщение.

Однако кнопка не используется для сообщения, ей нечего прокручивать. Windows замечает это и отправляет сообщение родительскому элементу. Это панель, теперь она будет прокручиваться.

Вы найдете код для настраиваемой панели, которая может получить фокус в этом ответе.


UPDATE: обратите внимание, что это поведение изменилось в Windows 10. Параметр "Прокрутка неактивных окон при наведении на них" по умолчанию. Это делает поведение колеса мыши более согласованным с тем, как оно работает в браузере или, скажем, в программе Office. В этом конкретном случае картинка теперь получит событие. Следите за этим.

Ответ 2

Если вы не видите событие "MouseWheel" на компоненте, вам необходимо создать его вручную. Кроме того, нам нужно сосредоточить этот компонент, иначе событие "MouseWheel" не будет работать для этого компонента. Я покажу вам, как создать событие "MouseWheel" для "pictureBox1" и как оно работает.

  • ВНУТРИ КОНСТРУКТОРА, создайте событие мыши в этом компоненте.

    InitializeComponent();
    this.pictureBox1.MouseWheel += pictureBox1_MouseWheel;
    
  • СОЗДАТЬ ФУНКЦИЮ вручную. Согласно моему примеру, назовите его "pictureBox1_MouseWheel"

    private void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
    {
        //you can do anything here
    }
    
  • СОЗДАТЬ событие MouseHover на этом компоненте (перейдите к свойствам в PicureBox1, выберите событие, найдите "MouseHover" и дважды щелкните событие "MouseHover" ).

  • ВЫЗОВ "Фокус()"; метод внутри события MouseHover.

    pictureBox1.Focus();
    
  • Теперь запустите программу.

Ответ 3

Чтобы подключить его вручную...

this.panel1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseWheel);

private void panel1_MouseWheel(object sender, System.Windows.Forms.MouseEventArgs e)
{
    ///process mouse event
}

Упрощенный метод находится в визуальной студии, щелкнув по панели, панели просмотра свойств goto, выберите события, найдите и дважды щелкните событие "mousewheel".

Ответ 5

Получение событий в mousewheel является сложным. Самый простой способ - использовать

this.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseWheel);

вместо

this.panel1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.panel1_MouseWheel);

Таким образом, форма получает событие вместо управления. Этот способ прост, но имеет одну проблему: вы можете использовать только одно событие mousewheel в вашей форме.

Если у вас есть более одного элемента управления, чтобы получить событие mousewheel, лучший способ Этот ответ "Shehan Silva - weltZ"