Как захватить колесо мыши на панели?
Как захватить колесико мыши на панели в С#?
Я использую 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");
}
Щелчок работает. Колеса нет.
Почему?
Ответы
Ответ 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".
Ответ 4
В Winforms это достигается с помощью события Control.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"