Как грамотно, быстро и безошибочно удалить все 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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д