Как грамотно, быстро и безошибочно удалить все Selected итемы из ListView (API)? - VB
Формулировка задачи:
В VB ListView я бабахал ключи со словом "strdel"
А потом удалял "по ключу"
По крайне мере этот вариант работал надежно.
For each тут не прокатит.
Ключей нету.
Писать "что-то" в "какое-то скрытое поле" - не охота.
Вижу 2 варианта:
1) Итти по всем итемам с конца в начало и удалять если selected?
2) или удалять VM_GETSELECTIONMARK по числу исходного LVM_GETSELECTEDCOUNT?
Но что-то по памяти смущает. Как бы он "в процессе" не передергивал selected items (нумерацию то он точно меняет - естественно).
А потом удалял "по ключу"
По крайне мере этот вариант работал надежно.
For each тут не прокатит.
Ключей нету.
Писать "что-то" в "какое-то скрытое поле" - не охота.
Вижу 2 варианта:
1) Итти по всем итемам с конца в начало и удалять если selected?
2) или удалять VM_GETSELECTIONMARK по числу исходного LVM_GETSELECTEDCOUNT?
Но что-то по памяти смущает. Как бы он "в процессе" не передергивал selected items (нумерацию то он точно меняет - естественно).
Решение задачи: «Как грамотно, быстро и безошибочно удалить все Selected итемы из ListView (API)?»
textual
Листинг программы
Public Sub RemoveSelectedItems()
'удаляет все выделенные итемы
Dim Nsel As Long
Dim i As Long
If (m_hwndLV) Then
Nsel = Me.SelectedItemCount
For i = 0 To Nsel - 1
Me.RemoveItem Me.SelectedItem
Next
End If
End Sub
Public Function RemoveItem(ByVal iItem As Long) As Boolean
'удаляет заданный итем
If (m_hwndLV) Then RemoveItem = CBool(SendMessageLong(m_hwndLV, LVM_DELETEITEM, iItem, 0))
End Function
Public Property Get SelectedItemCount() As Long
'возвращает к-во выделенных итемов
SelectedItemCount = SendMessage(m_hwndLV, LVM_GETSELECTEDCOUNT, 0, 0)
End Property
Public Property Get SelectedItem() As Long
'возвращает первый выделенный итем
SelectedItem = SendMessageLong(m_hwndLV, LVM_GETNEXTITEM, -1, ByVal LVNI_SELECTED)
End Property