Кто-либо знает о способе отключить колесико прокрутки мыши, когда управление, такое как поле комбинированного списка или поле списка фокусируется? В моих целях поле комбинированного списка - все, для чего я нуждаюсь в ответе.
Мне установили поле комбинированного списка для инициирования SQL-запроса на SelectedIndexChanged и случайно прокрутки колеса, в то время как поле комбинированного списка фокусируется, заставляет приблизительно шесть SQL-запросов исчерпывать одновременно.
Элемент управления ComboBox не позволяет легко переопределить поведение события MouseWheel. Добавьте новый класс в свой проект и вставьте код, показанный ниже. Скомпилировать. Перетащите новый элемент управления из верхней части панели инструментов в форму.
Friend Class MyComboBox
Inherits ComboBox
Protected Overrides Sub OnMouseWheel(ByVal e As MouseEventArgs)
Dim mwe As HandledMouseEventArgs = DirectCast(e, HandledMouseEventArgs)
mwe.Handled = True
End Sub
End Class
Помните, что это также отключает колесо в раскрывающемся списке.
Одним из таких вариантов могло бы быть добавление обработчика к comboBox и внутри этого comboBox разрешение ситуации. Я не уверен, как настроен ваш код, но предполагаю, что если бы вы знали, когда происходит событие, вы могли бы настроить какое-то условие, чтобы предотвратить выполнение запросов
'''Insert this statement where your form loads
AddHandler comboBoxBeingWatched.MouseWheel, AddressOf buttonHandler
Private Sub buttonHandler(ByVal sender As System.Object, ByVal e As System.EventArgs)
'''Code to stop the event from happening
End Sub
Таким образом, вы бы иметь возможность поддерживать возможность прокрутки пользователя в поле со списком, но также иметь возможность предотвратить выполнение запросов
Если вы подклассифицируете элемент управления, это возможно (извинения за C #)
public class NoScrollCombo : ComboBox
{
[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
protected override void WndProc(ref Message m)
{
if (m.HWnd != this.Handle)
{
return;
}
if (m.Msg == 0x020A) // WM_MOUSEWHEEL
{
return;
}
base.WndProc(ref m);
}
}