Вопрос

Кто -нибудь знает способ отключения колеса прокрутки мыши, когда контроль, такой как Combobox или Listbox, фокусируется? Для моих целей Combobox - это все, что мне нужен ответ.

У меня есть ComboBox, установленный для запуска SQL -запроса на SelectedIndExchanged, и случайно прокручивая колесо, в то время как ComboBox имеет фокус, приводит к одновременному выстрелу около шести запросов SQL.

Это было полезно?

Решение

Combobox Control не позволяет вам легко переопределять поведение события мышиного колеса. Добавьте новый класс в свой проект и вставьте код, показанный ниже. Компиляция. Оставьте новый элемент управления из верхней части набора инструментов на свою форму.

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

Остерегайтесь, что это также отключает колесо в раскрывающемся списке.

Другие советы

Я нашел ответ микса, поместите этот код в событие мышиного колеса:

Dim mwe As HandledMouseEventArgs = DirectCast(e, HandledMouseEventArgs)
mwe.Handled = True

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

Если вы подкласку управления, это возможно (извиняюсь за 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);
    }
}

Одним из таких вариантов будет добавление обработчика в 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

Таким образом, вы сможете поддерживать возможность прокручивать в ComboBox, но также сможете предотвратить проведение запросов

Сочетание всех ответов в этом потоке, лучшее решение, если вы не хотите создавать пользовательский элемент управления, - это обрабатывать событие мышиного колеса. Ниже также позволит прокрутить список, если он будет отброшен.

Предполагая, что ваш ComboBox называется ComboBox1:

If Not ComboBox1.DroppedDown Then
  Dim mwe As HandledMouseEventArgs = DirectCast(e, HandledMouseEventArgs)
  mwe.Handled = True
End If

У меня была такая же проблема, но я обнаружил, что простое изменение фокуса управления после того, как запрос, выполненный на другой элемент управления, такой как кнопка «Запрос», сама по себе работала лучше, чем совершенство. Это также позволило мне по -прежнему прокрутить элемент управления до тех пор, пока SelectedIndex фактически не изменился и не стал только одной строкой кода.

Просто поместите это в событие мышиного колеса или в один обработчик для всех элементов управления, к которым применяются, возможно, назовите его Weelsnubber. DirectCast (e, обработчикам.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top