вопросы по ListView

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

вопросы по ListView

Сообщение Sun07 » 08.12.2006 (Пт) 7:21

1. Скажите пожалуйста, при lvw1.ListItems.Add объект всегда закрепляется за первой добавленной колонкой (lvw1.View = lvwReport) или можно как-то по ключу колонки задать колонку, где будет отображаться имя объекта? Или же всегда надо первой добавлять колонку, отображающую имена объектов, а потом переставлять их местами?

2. Как при присвоении значений SubItems(Index) указывать не индекс, а Key колонки?

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Re: вопросы по ListView

Сообщение Alexanbar » 08.12.2006 (Пт) 22:38

Sun07 писал(а):1. Скажите пожалуйста, при lvw1.ListItems.Add объект всегда закрепляется за первой добавленной колонкой (lvw1.View = lvwReport) или можно как-то по ключу колонки задать колонку, где будет отображаться имя объекта? Или же всегда надо первой добавлять колонку, отображающую имена объектов, а потом переставлять их местами?


lvw1.ListItems.Add index,key,text

text - в первой колонке, но позицию колонки можно менять.
Код: Выделить всё
Listview1.Columnheaders(1).position=4

2. Как при присвоении значений SubItems(Index) указывать не индекс, а Key колонки?

Код: Выделить всё
listview1.listitems(1). subitems(listview1.columnheaders("ключ колонки").Index)="hhjhjhj"

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Сообщение Dmitriy2003 » 08.12.2006 (Пт) 22:39

А мне кажется от отсутсвия ключей ничего не меняется

Код: Выделить всё

Private Sub Form_Load()
    '
    'Microsoft Windows Common Controls 6.0 (SP6)
    'ListView1 = ListView Control
    '
    Dim aAtr(3) As String: aAtr(0) = "Nummer": aAtr(1) = "Name": aAtr(2) = "Vorname": aAtr(3) = "Telefon"
   
    Dim c As ColumnHeader
    Dim l As ListItem
    Dim s As ListSubItem
    Dim i As Integer
    '
    For i = 0 To UBound(aAtr, 1)
        Set c = Me.ListView1.ColumnHeaders.Add(, , aAtr(i))
    Next i
    '
    For i = 1 To 15
        Set l = Me.ListView1.ListItems.Add(, "RI-" & CStr(i), CStr(i))
        Set s = l.ListSubItems.Add(, "SI1-" & CStr(i), "SubItem1-Item-" & CStr(i))
        Set s = l.ListSubItems.Add(, "SI2-" & CStr(i), "SubItem2-Item-" & CStr(i))
        l.SubItems(3) = "xxx-xxx-xx" & CStr(i)
    Next i
    '
End Sub
Dmitrich

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 09.12.2006 (Сб) 0:13

Не пойму, почему на lvw1.ListItems(1).ListSubItems(1).Text = "5" ругается Index out of bounds? lvw1.ListItems(1).SubItems(1)="5" работает...

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 09.12.2006 (Сб) 0:49

Sun07 писал(а):Не пойму, почему на lvw1.ListItems(1).ListSubItems(1).Text = "5" ругается Index out of bounds? lvw1.ListItems(1).SubItems(1)="5" работает...


Потому, что Listsubitems(i) работает только при наличии Subitems(i).

Нужно хотя бы Subitems(i)=""

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Сообщение Dmitriy2003 » 09.12.2006 (Сб) 1:46

Alexanbar :?

Код: Выделить всё

Private Sub ListView1_DblClick()
    '
    Dim c As ColumnHeader
    Dim l As ListItem
    Dim s As ListSubItem
    Dim i As Integer
    '
    For Each c In Me.ListView1.ColumnHeaders
        '
        If c.Text = "Telefon" Then i = c.Index
        '
    Next
    '
    Set l = Me.ListView1.SelectedItem
    Set s = l.ListSubItems(i - 1)   'Es ist so schlimm
    '
    s.Text = "Snikers!"
    '
End Sub
Dmitrich

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 09.12.2006 (Сб) 2:09

Спасибо, работает. А как убрать отображение пустой иконки перед текстом объекта при lvw1.ListItems.Add (но иконки используются в ListSubItems(i).ReportIcon)?

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Сообщение Dmitriy2003 » 09.12.2006 (Сб) 2:28

:D И почему тебя такие вопросы мучают!

Мне кажется там просто пустое место зарезервированно если поключить ImageList

1. Или делаеш контрол с API что геморно
2. Или скрываеш первый столбец, а данные вносиш в ListSubItem

Предвижу ответ некоторых тов. (флаг им в руки а точнее API) :D

p.s. Лучше поставить иконку, или вообще без них.
Компромиссов в VB хватает :twisted:
Dmitrich


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 17

    TopList  
cron