Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: hw.t-k.ru
 Профиль | | #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:
After the control has been created, these styles cannot be modified

Речь идёт о ListBox Styles, и в частности - о LBS_MULTIPLESEL.

Так что если "ThunderListBox" - точная копия обычного "ListBox'а", то ни фига не выйдет.

Ответить

Номер ответа: 4
Автор ответа:
 Mihalыch



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #4 Добавлено: 07.05.05 13:07
Ага, а то я уже час пытаюсь заставить этот код работать…

Private Sub SetStyle()
    ;Dim 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-сайт: hw.t-k.ru
 Профиль | | #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()
    ;Dim 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

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам