VB6 ListBox Click и DblClick - PullRequest
       8

VB6 ListBox Click и DblClick

2 голосов
/ 15 января 2009

Мне нужно запустить другой код, когда пользователь щелкает или дважды щелкает элемент в элементе управления VB6 ListBox. Когда я нажимаю на элемент управления, выполняется обработчик события Click. Однако я обнаружил, что при двойном щелчке элемента управления выполняются обработчики событий Click и DblClick.

У кого-нибудь есть хорошее решение, позволяющее запускать только код обработчика событий DblClick без предварительного выполнения кода Click?

Заранее спасибо за любые предложения.

Ответы [ 2 ]

3 голосов
/ 15 января 2009

Небольшой взлом, но вы можете использовать элемент управления Timer и логическую переменную:

  • Запустить таймер события Click, установить для логической переменной значение false
  • Установите для логической переменной значение true для события DoubleClick
  • Когда срабатывает событие Tick таймера, проверьте логическую переменную, чтобы увидеть, сделал ли пользователь щелчок или DoubleClick

Я бы порекомендовал установить интервал таймера равным значению времени двойного щелчка Windows, плюс немного (должен быть вызов Windows API, который даст вам это значение).

1 голос
/ 16 января 2009

Поведение элемента управления списком в Visual Basic 6 выглядит следующим образом.

  1. Когда вы нажимаете на элемент, происходит событие щелчка.

  2. Когда вы щелкаете по тому же пункту, событие щелчка все еще срабатывает.

  3. При двойном щелчке по элементу срабатывают как событие щелчка, так и событие двойного щелчка.

Примечание № 2. Вам нужно иметь текущий элемент в той форме, с которой вы работаете. Каждый раз, когда проверяется событие щелчка, вы сначала видите, совпадает ли текущий элемент с тем, что вы щелкнули. Если это НЕ один и тот же элемент, вы обрабатываете событие click как обычно.

Если вы дважды щелкнете по НОВОМУ Предмету, то пользователь будет делать две вещи одновременно. Выбор нового элемента и выполнение элемента двойного щелчка. В этом случае сначала происходит щелчок, а затем двойной щелчок.

Эта последовательность ничем не отличается от того, что элемент управления сделал то, что вы хотели. Это так же, как если бы вы щелкнули по новому элементу, подождите X секунду, а затем дважды щелкните по тому же элементу.

Если событие щелчка включает передачу задачи в EXE-файл ActiveX и немедленное завершение или настройка данных для последующей обработки с помощью фонового таймера. Затем вам нужно иметь семафор или флаг, чтобы указать, когда завершится процесс, порожденный событием click. Событие двойного щелчка не будет обработано, пока семафор не будет очищен.

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

Private Sub List1_Click()
    Print "Clicked - " & Me.List1.List(Me.List1.ListIndex)
End Sub

Private Sub List1_DblClick()
    Print "Double Clicked - " & Me.List1.List(Me.List1.ListIndex)
End Sub

Выполните следующие шаги

  1. Нажмите на пункт # 1
  2. Нажмите на пункт # 2
  3. Снова нажмите на пункт № 2
  4. Двойной щелчок по пункту № 2
  5. Двойной щелчок по номеру # 3

Вы увидите различные комбинации происходящих действий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...