Привет, я хочу добиться следующего:
У меня есть UserForm с ListBox в нем.Этот ListBox должен иметь следующее поведение выбора:
Это мой список:
1 MouseClick Переключение выбора
2 MoveOver над элементом, удерживая нажатой кнопку мыши, переключит выбор
К сожалению, этому поведению не соответствуют 3 выбираемые свойства MultiSelect.
0 - fmMultiSelectSingle
- Невозможно выбрать несколько элементов
1-fmMultiSelectMulti
Довольно близко, но:
- ListItems отменяются, когда мышь больше не находится над элементом, удерживая кнопку нажатой.
2-fmMultiSelectExtended
Также довольно близко, но:
- при нажатии в другом месте, когда элементы выбраны, все элементы будут отменены
Таким образом, цель состоит в том, чтобы вручную переключать все элементы одним нажатиемна них или наведении на них при нажатии мыши
Я пытался сделать это с помощью события ListBox_Change, но не могу понять, как ..
Это код, который я пробовал:
Пользовательская форма в целом:
Private Type TView
SelectedCol As Collection
EventsDisabled As Boolean
End Type
Private this As TView
Public Property Get SelectedCol() As Collection
Set SelectedCol = this.SelectedCol
End Property
Public Property Set SelectedCol(ByVal value As Collection)
Set this.SelectedCol = value
'Validate
End Property
Private Sub UserForm_Initialize()
Set SelectedCol = New Collection
counter = 0
Dim i As Integer
For i = 1 To OptionList.ListCount
SelectedCol.Add Me.OptionList.Selected(i)
Next i
End Sub
SubSecriptSelectedCol:
Sub UpdateSelectedCol()
Dim i As Integer
Dim bo As Boolean
For i = OptionList.ListCount To 1
SelectedCol.Remove (i)
Next i
For i = 1 To OptionList.ListCount
SelectedCol.Add OptionList.Selected(i - 1)
Next i
End Sub
Событие ListBox_Change:
Private Sub OptionList_Change()
Dim i As Integer
If this.EventsDisabled = False Then
this.EventsDisabled = True
GO_btn.Enabled = ISSelected(Me.OptionList)
' keep selected until changed
For i = 1 To Me.OptionList.ListCount
If SelectedCol.Item(i) Then
Me.OptionList.Selected(i) = True
End If
Next i
Debug.Print SelectedCount(Me.OptionList)
UpdateSelectedCol
End If
this.EventsDisabled = False
End Sub
Итак, я попробовал следующее:Когда выбор будет изменен, он будет сравнивать, был ли этот элемент выбран ранее, и сохранит его.Это не меняет поведение MultiSelect немного.По моему мнению, он должен по крайней мере сохранить все выбранные элементы, которые были выбраны один раз.
РЕДАКТИРОВАТЬ: Добавлены некоторые картинки и код в качестве примера того, что я пытался, и как это должно работать.