Вопросы по LISTVIEW

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Лексей
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 121
Зарегистрирован: 03.08.2004 (Вт) 6:50
Откуда: Екатеринбург

Вопросы по LISTVIEW

Сообщение Лексей » 16.12.2004 (Чт) 15:02

Помогите плиз!
Есть вот такие вопросы:
1. Можно ли как то отобразить в listview данные типа boolean в виде checkbox?
2. Как сделать так, чтоб пользователь мог править данные в listview (тот же checkbox)?
3. Как выделять не одно поле в многоколоночном списке, а сразу всю строку (на ListView.fullrowselect ругается и не признает такого свойства)?
4. И еще не дошло - как при добавлении строк в список, ключевой элемент добавлять во второй столбец, ну а остальные в 1, в 3 и т.д.?

Заранее огромнейшее спасибище всем за помощь!!!

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 16.12.2004 (Чт) 15:48

1) - ListView1.Checkboxes = True
3)- ListView1.FullRowSelect = True (у меня не ругается)

4) - уточни
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

Лексей
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 121
Зарегистрирован: 03.08.2004 (Вт) 6:50
Откуда: Екатеринбург

Сообщение Лексей » 16.12.2004 (Чт) 15:49

lstDoc.FullRowSelect = True
lstDoc.Checkboxes = True

выдает ошибку компиляции - не признает такого свойства!
Что ж делать то ?

А как на счет четверотго вопроса?

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 16.12.2004 (Чт) 15:52

Выложи исходник - посмотрю!
Что ты имеешь в виду под "ключевой элемент добавлять во второй столбец" ?
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 16.12.2004 (Чт) 16:02

зы: а ты случайно не спутал ListBox c ListView-ом?
Очень признаки похожи!
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

Лексей
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 121
Зарегистрирован: 03.08.2004 (Вт) 6:50
Откуда: Екатеринбург

Сообщение Лексей » 16.12.2004 (Чт) 16:03

Вот оно
Вложения
Proect.rar
(1.9 Кб) Скачиваний: 43
Proect.rar
(1.9 Кб) Скачиваний: 32

Лексей
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 121
Зарегистрирован: 03.08.2004 (Вт) 6:50
Откуда: Екатеринбург

Сообщение Лексей » 16.12.2004 (Чт) 16:05

не, в том то и дело, что ListView

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 16.12.2004 (Чт) 16:18

А! дык ты используеш Microsof Сommon Сontrol 5?
У меня на MCC6 - работает аж пищит! Чего и вам желаю сделать!
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

Лексей
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 121
Зарегистрирован: 03.08.2004 (Вт) 6:50
Откуда: Екатеринбург

Сообщение Лексей » 16.12.2004 (Чт) 16:21

Библиотечку MCC6 не скинешь? плиз!

Лексей
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 121
Зарегистрирован: 03.08.2004 (Вт) 6:50
Откуда: Екатеринбург

Сообщение Лексей » 16.12.2004 (Чт) 16:25

Хотя уже нашел у себя, спасибо за помощь!!! Реально!

А как на счет вопроса 4?

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 16.12.2004 (Чт) 16:30

Я уже писал(а):Что ты имеешь в виду под "ключевой элемент добавлять во второй столбец" ?
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

Лексей
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 121
Зарегистрирован: 03.08.2004 (Вт) 6:50
Откуда: Екатеринбург

Сообщение Лексей » 16.12.2004 (Чт) 20:17

Ну в смысле как сделать чтоб индексное значение было во второй колонке, а не в первой?

Лексей
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 121
Зарегистрирован: 03.08.2004 (Вт) 6:50
Откуда: Екатеринбург

Сообщение Лексей » 16.12.2004 (Чт) 20:47

Кстати, какое событие соответствует постановке галочки на чекбоксе (отлично от простого выбора строки)?

И еще, как узнать есть ли галка в чекбоксе некоторых строк?

Дорвался - пристал таки по полноц программе!!! Извините конечно, но ведь реально помогаете!

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 16.12.2004 (Чт) 22:07

Лексей писал(а):Кстати, какое событие соответствует постановке галочки на чекбоксе (отлично от простого выбора строки)?
И еще, как узнать есть ли галка в чекбоксе некоторых строк?

Вот примерчик по єтому поводу:
Код: Выделить всё
Private Sub ListView1_ItemCheck(ByVal Item As MSComctlLib.ListItem)
    If Item.Checked = True Then
        MsgBox "Галочка на" & Item.Index & "-м элементе поставлена"
    Else: MsgBox "Галочка с" & Item.Index & "-го элемента снята"
    End If
End Sub
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

Лексей
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 121
Зарегистрирован: 03.08.2004 (Вт) 6:50
Откуда: Екатеринбург

Сообщение Лексей » 17.12.2004 (Пт) 8:40

index - это что именно (т.е. какое значение в нем содержится)?

И как узнать у каких элементов стоит галка в чекбоксе если у списка стоит мультиселект?

GM
programador
programador
 
Сообщения: 1427
Зарегистрирован: 24.06.2003 (Вт) 15:56
Откуда: 194.67.52.100

Сообщение GM » 17.12.2004 (Пт) 8:51

Вот так:
Код: Выделить всё
msgbox Listview1.listitems(index).checked
الفيجوال بيسك الرابح

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 17.12.2004 (Пт) 15:11

Лексей писал(а):index - это что именно (т.е. какое значение в нем содержится)?

это номер записи! Иногда удобно использовать .key - тоже идентификатор записи, но может быть текстом
Лексей писал(а):И как узнать у каких элементов стоит галка в чекбоксе если у списка стоит мультиселект?


мультиселект к чекбоксам не имеет никакого отношения!
При включеном мультиселекте можно выделить несколько записей одновременно мышью (как файлы в Проводнике). А поставить "галки" на нескольких записях можно и пры выключеном мультииселекте.

Примерчик:
Нужен ListView1 и кнопка Command1

Код: Выделить всё
Private Sub Command1_Click()
Dim ittem As ListItem
    For Each ittem In ListView1.ListItems
    ' перебираем все ListItem в ListView1
        With ittem
            If .Checked Then .SubItems(1) = "Да" Else .SubItems(1) = "Нет"
            'если он помечен "галкой" - записываем  в соотв.столбец
            If .Selected Then .SubItems(2) = "Да" Else: .SubItems(2) = "Нет"
            'если он выделен - записываем "да" в соотв.столбец
        End With
    Next
End Sub

Private Sub Form_Load()
    With ListView1
'подготовка ListView1
        .MultiSelect = True
        .Checkboxes = True
        .View = lvwReport
        .FullRowSelect = True
        .HideSelection = False
'Создание "шапки"
        With .ColumnHeaders
            .Clear
            .Add.Text = "Index"
            .Add.Text = "Check"
            .Add.Text = "Select"
        End With
'Создание элементов
        For i = 1 To 10
            With .ListItems.Add
                .Text = .Index
            End With
        Next
    End With
End Sub
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

Лексей
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 121
Зарегистрирован: 03.08.2004 (Вт) 6:50
Откуда: Екатеринбург

Сообщение Лексей » 17.12.2004 (Пт) 18:03

Спасибище огромное!!!

Вот только столкнудся с проблемой другого рода:
табдицы mdb файла, из которых формируется список (запрос
"SELECT DISTINCTROW tblDoc.DCode, tblDoc.DName, tblDoc.ISID, tblDoc.DChoose, tblDoc.DPage FROM tblDoc INNER JOIN tblRefer ON tblDoc.DCode=tblRefer.DCode;")
содержит одна около 30000 а другая около 70000 записей, соответственно открытие формы даже на 4 пеньке с 500 пямятью занимает около 1 минуты.

Может есть какие соображения на счет повцышения быстродействия (может запрос как переиначить или список формировать по другому, но на сколько я понимаю, дело в формировании рекордсета).
Возможно лт как то организовать список так, чтоб формировалось сначала строк эдак 50 а остальнок по мере прокрутки списка - будет толк то?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.12.2004 (Сб) 8:46

Эта фича называется "виртуальный ListView". Ускорить загрузку она может, но без API ты ею не воспользуешься.
Lasciate ogni speranza, voi ch'entrate.

Bethy
Начинающий
Начинающий
 
Сообщения: 11
Зарегистрирован: 06.07.2004 (Вт) 3:55

Сообщение Bethy » 19.12.2004 (Вс) 12:53

Лексей писал(а):4. И еще не дошло - как при добавлении строк в список, ключевой элемент добавлять во второй столбец, ну а остальные в 1, в 3 и т.д.?

Код: Выделить всё
Dim lst As ListItem
Set lst = lw.ListItems.Add(Text:="не ключевое значение")
lst.SubItems(1) = "ключевое значение"
lst.SubItems(2) = "не ключевое значение" ... и т. д.


Лексей писал(а):index - это что именно (т.е. какое значение в нем содержится)?
И как узнать у каких элементов стоит галка в чекбоксе если у списка стоит мультиселект?

index - нужно, когда создаешь массив элементов управления.

Узнать где стоит галка вне зависимости от значения свойства мультиселект:
Код: Выделить всё
for i=1 to ListView.ListItems.Count
    If ListView.ListItems.Item(i).Checked = True Then
       'отмечено
    else
       'не отмечено
    end if
next i

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 20.12.2004 (Пн) 0:29

Bethy писал(а):Узнать где стоит галка вне зависимости от значения свойства мультиселект:
Код: Выделить всё
for i=1 to ListView.ListItems.Count
    If ListView.ListItems.Item(i).Checked = True Then
       'отмечено
    else
       'не отмечено
    end if
next i

Все-же через "for each" по моим подсчетам - быстрее 8). Но если нужно удалять отмеченые я записи - тогда и один и другой алгоритм приведет к ошибке.
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 4

    TopList  
cron