ListView: почему код не работает?

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

ListView: почему код не работает?

Сообщение Scuder » 14.10.2004 (Чт) 12:33

Никогда не работал с ним.. Всё с БД, с таблицами.. А тут понадобилось без БД обойтись. Короче, надо всего лишь заполнить 2 столбца:

Код: Выделить всё
Me.ListView1.ColumnHeaders.Add , , "A", 1000
Me.ListView1.ColumnHeaders.Add , , "B", 2000
Me.ListView1.View = lvwReport

For i = 1 To 50
    Me.ListView1.ListItems.Add 1, , CLng(Rnd * 1000000)
    Me.ListView1.ListItems.Item(1).ListSubItems.Add , , i
    DoEvents
Next i


В результате получаю полностью заполненный первый и на 5% заполненный второй. Т.е. он вставляет несколько значений и всё. Остальные пустые.. Почему?

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 14.10.2004 (Чт) 13:57

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

Dim i As Integer
Me.ListView1.ColumnHeaders.Add , , "A", 1000
Me.ListView1.ColumnHeaders.Add , , "B", 2000
Me.ListView1.View = lvwReport

For i = 1 To 50
    Me.ListView1.ListItems.Add , , CLng(Rnd * 1000000)
    Me.ListView1.ListItems(i).SubItems(1) = i
Next i


Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 14.10.2004 (Чт) 14:03

При Sorted = True работать не будет. :-)

Rainbow предложила такой вариант:
Код: Выделить всё
ListView1.ColumnHeaders.Add , , "A", 1000
ListView1.ColumnHeaders.Add , , "B", 2000
ListView1.View = lvwReport

Dim i As Long
Dim li As ListItem
For i = 1 To 50
    Set li = ListView1.ListItems.Add(1, , CLng(Rnd * 1000000))
    li.ListSubItems.Add , , i
    DoEvents
Next i

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 14.10.2004 (Чт) 14:08

а ты сортировки потом включай:

Код: Выделить всё
....
For i = 1 To 50
    Me.ListView1.ListItems.Add , , CLng(Rnd * 1000000)
    Me.ListView1.ListItems(i).SubItems(1) = i
Next i

Me.ListView1.Sorted = True




впрочем, решать твою проблему можно несколькими способами , что Rainbow и показала :wink:

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 14.10.2004 (Чт) 14:11

Ага. Ну я уже и решил. :-)

Всем спасибо. :-)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 15.10.2004 (Пт) 8:26

Scuder писал(а):Rainbow предложила такой вариант:
Код: Выделить всё
ListView1.ColumnHeaders.Add , , "A", 1000
ListView1.ColumnHeaders.Add , , "B", 2000
ListView1.View = lvwReport

Dim i As Long
Dim li As ListItem
For i = 1 To 50
    Set li = ListView1.ListItems.Add(1, , CLng(Rnd * 1000000))
    li.ListSubItems.Add , , i
    DoEvents
Next i

А тут, кстати, можно и без промежуточной переменной:
Код: Выделить всё
ListView1.ListItems.Add(1, , CLng(Rnd * 1000000)).ListSubItems.Add , , i

Имхо на глаз воспринимается легче.
Изображение


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

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

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

    TopList