Отключите колесико прокрутки мыши в поле комбинированного списка VB.NET

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

Мне установили поле комбинированного списка для инициирования SQL-запроса на SelectedIndexChanged и случайно прокрутки колеса, в то время как поле комбинированного списка фокусируется, заставляет приблизительно шесть SQL-запросов исчерпывать одновременно.

9
задан Caleb Thompson 3 June 2010 в 17:26
поделиться

3 ответа

Элемент управления 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

Помните, что это также отключает колесо в раскрывающемся списке.

10
ответ дан 4 December 2019 в 08:32
поделиться

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

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

0
ответ дан 4 December 2019 в 08:32
поделиться

Если вы подклассифицируете элемент управления, это возможно (извинения за 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);
    }
}
1
ответ дан 4 December 2019 в 08:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: