Как наиболее оптимально узнать существует ли узел в TreeView

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Как наиболее оптимально узнать существует ли узел в TreeView

Сообщение Ruslan Demidow » 05.05.2004 (Ср) 11:04

В программе заполняю TreeView. В качестве ключа использую идентификатор письма (уникален для каждого сообщения).
Но может случится так, что узел с таким ключом уже существует.
Соответственно прога вываливается по ошибке ("Ключ не уникален").
Как наиболее оптимально (с наименьшим количеством строк кода) проверить существует ли уже такой узел в TreeView?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 05.05.2004 (Ср) 11:30

Можно сделать так:

Код: Выделить всё
on error resume next
trview.nodes.add "mynode"
if err.number<>0 'существует такой узел
.....


А можно самому проделать работу, которую сделает nodes.add для проверки:
Код: Выделить всё
for each ndx in trview.nodes
if ndx.key="mynode" then 'существует такой узел
next ndx

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 05.05.2004 (Ср) 13:59

Первый вариант пойдёт, а второй - нет, потому что это получается очень долго (записей в среднем около 5 000).

Ещё вопрос: У сообщений есть признак ReplyID, который равен 0 если сообщение является началом треда, или равен признаку MailID письма ответом на которое является текущее письмо (MailID - идентификатор письма).
При построении дерева я сначала добавляю в TreeView узлы которые являются началом треда, а потом добавляю те, которые являются ответами на другие письма. Но это происходит долго. При количестве сообщений около 8 000 построение дерева занимает примерно 70 с копейками секунд. Как ускорить этот процесс?
Если надо - код приведу.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 05.05.2004 (Ср) 14:36

Никак.

TreeView довольно медленнный контрол.

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 05.05.2004 (Ср) 14:47

Ну тогда ещё вопрос - может быть знаешь какой контрол испльзован в ОЕ для отображения в списке писем цепочек ответов внутри таблицы?

P.S. А если добавлять просто сначала начальные сообщения, а при выборе этих сообщений пользователем - добавлять уже ответы? Щаз попробую...

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

Сообщение alibek » 05.05.2004 (Ср) 15:55

Еще несколько ускорить загрузку TreeView может, если перед загрузкой ты сделаешь его невидимым, а после загрузки отобразишь.
Lasciate ogni speranza, voi ch'entrate.

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 06.05.2004 (Чт) 8:52

Уже. В смысле невидимость.
Делаю так. Делаю его невидимым, заполняю, делаю видимым.
Но даже при этом заполнение дерева при количестве сообщений около 5 000 проходит примерно за 50-70 сек, что очень медленно.
Вот сегодня попробую ещё VideoSoft FlexGrid (или как-то так). Но думаю что даже с ним будет не много быстрее.
Вот и думаю, как построить дерево быстро. Данные (типы записей) загружаю из файла сначала в массив, потом уже из массива заголовки пихаю в TreeView. По другому никак. При щелчке на ноде - я ищу в массиве запись соответствующую ноду и вывожу текст самого сообщения.
Записи содержат в себе только индентификаторы писем, статус письма, указатель на файл сообщений, смещение первого байта текста сообщения от начала файла и длинну текста.


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

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

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

    TopList