Страница: 1 |
Страница: 1 |
Вопрос: ListBox + MultiSelect
Добавлено: 07.05.05 05:46
Автор вопроса: Mihalыch | ICQ: 373-509-101
Можно ли программно изменить значение свойства MultiSelect для ListBox’а?
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #1
Добавлено: 07.05.05 09:37
включить
SetWindowLong + GetWindowLong Or LBS_MULTIPLESEL
выключить
SetWindowLong + GetWindowLong And Not LBS_MULTIPLESEL
Номер ответа: 2
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #2
Добавлено: 07.05.05 09:46
Всегда знал если нельзя, но очень хочется, то все равно можно. Спасибо sne.
Номер ответа: 3
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #3
Добавлено: 07.05.05 12:55
Лезем в MSDN:
Речь идёт о ListBox Styles, и в частности - о LBS_MULTIPLESEL.
Так что если "ThunderListBox" - точная копия обычного "ListBox'а", то ни фига не выйдет.
Номер ответа: 4
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #4
Добавлено: 07.05.05 13:07
Ага, а то я уже час пытаюсь заставить этот код работать…
Private Sub SetStyle()
 im lStyle As Long
lStyle = GetWindowLong(List1.hwnd, GWL_STYLE)
SetWindowLong List1.hwnd, GWL_STYLE, lStyle Or LBS_MULTIPLESEL
'SetWindowLong List1.hwnd, GWL_STYLE, lStyle And Not LBS_MULTIPLESEL
End Sub
Номер ответа: 5
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #5
Добавлено: 07.05.05 13:23
В этом случае можно поступить по-левому но задачу решить, ибол нет ничего нерешаемого, имхо!
1. Создаем List с LBS_MULTIPLESEL...
2. Заводим переменную где значится является-ли наш List многовыделяемым
3. К листу подключаем сабклассировщик.
4. В оконной процедуре следим за чем-нить подобным (LB_SETCURSEL, LB_SETSEL)
5. При одном значении переменной не делаем ничего, при втором - снимаем выделение с текущего выделенного.
Номер ответа: 6
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #6
Добавлено: 07.05.05 13:34
А не проще ли использовать ДВА листбокса?! с разными стилями, конечно.
Номер ответа: 7
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #7
Добавлено: 07.05.05 13:39
Я поступил ешё левее
Private Sub List1_Click()
 im i As Long
If MultiSelect не нужен Then
For i = 0 To List1.ListCount - 1
If i <> List1.ListIndex Then
List1.Selected(i) = False
Else
List1.Selected(i) = True
End If
Next i
Else
For i = 0 To List1.ListCount - 1
If List1.ItemData(i) = 1 Then
List1.Selected(i) = False
Exit For
End If
Next i
End If
End Sub