Выбор из ListBox работает через раз

Автор kerajel, 09 декабря 2015, 22:31

kerajel

Добрый вечер. У меня на листе есть листбокс. Юзер должен щёлкать по пунктам листбокса и пункт, по которому щёлкнули, должен вставляться в ячейку.
Проблема в том, что если пункт в листбоксе уже выделен, то при щелчке по нему, он не вставляется в ячейку. У листбокса я использую событие "Change".
В чём проблема?

Администратор

Могу предложить такие варианты.

Вариант 1
Используйте у листбокса вместо события "Change" событие "MouseUp". Но в данном случае нужно дополнить код, учитывая, что юзер может щёлкнуть не по пункту, а в пустой области листбокса, а в этот момент может не быть выделенных пунктов.
[свернуть]

Вариант 2
Перед отображением листбокса, убирайте выделение у выделенного пункта. Тогда не будет выделенного пункта и событие "Change" сработает.

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

Убирать выделение можно двумя способами.

Способ 1. Если свойство MultiSelect" установлено на выбор одного пункта:

Private Sub CommandButton1_Click()
    Me.ListBox1.ListIndex = -1
End Sub


Способ 2. Если свойство MultiSelect" установлено на выбор нескольких пунктов:

Private Sub CommandButton1_Click()
    Dim i As Long
    For i = 0 To Me.ListBox1.ListCount - 1 Step 1
        If Me.ListBox1.Selected(i) = True Then
            Me.ListBox1.Selected(i) = False
        End If
    Next i
End Sub
[свернуть]

kerajel

Большое спасибо. Использовал вариант 2 и всё получилось!