Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: TreeView Добавлено: 01.10.05 12:18  

Автор вопроса:  Mihalыch | ICQ: 373-509-101 
Есть TreeView, данные, которые в него загружаются. Данных много и по мере работы с программой, становится больше, по этому при загрузке приходится использовать ProgressBar. Для ускорения загрузки сделал «поэтапную» загрузку, т.е. сначала грузятся узлы верхнего уровня, а за тем, при первом щелчке, подгружаются «дети» этого узла. Все нормально, но естественно в начале нет плюсика около родительского узла, который говорит пользователю, что у этого узла есть «дети». Может можно заставить TreeView, показать этот плюс, например SendMessage?

З.Ы. Надеюсь объяснил понятно.

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 Borisfen



ICQ: 247914358 

Вопросов: 6
Ответов: 35
 Профиль | | #1 Добавлено: 01.10.05 18:25
А ты при отображении узлов верхних (и любых других уровней) загружай и их дочерные узлы одного уровня.

Тоесть загружаются узлы и вних их дочерные узлы не всех а только следующего уровня.

Потом когда открываешь узел любого уровня, то в него загружаются все дочерные узлы с их дочерными узлами только одного уровня.
Надеюсь понятноь изложил свою мысль.

Если хочешь то могу код привести, но только на .NET

Ответить

Номер ответа: 2
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #2 Добавлено: 02.10.05 05:58
Если древовидно добавлять данные в TreeView, то плюсики должны там уже быть!

Ответить

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



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #3 Добавлено: 02.10.05 09:32
Прошу извинить, что отвечаю не сразу, работа…
2Borifen, вариант не подойдет, т.к. в “последний уровень” загружается основная масса данных, по этому все равно придется ждать.
2HACKER плюсики становятся видны, когда у узла появляются «дети» (не сомневаюсь что ты знаешь об этом…), а я этих детей подгружаю при первом щелчке по узлу.

Ответить

Номер ответа: 4
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #4
Добавлено: 02.10.05 10:21
Проанализируй структуру дерева и добавь дополнительное поле типа have_child, согласно нему добавляй в TreeView фейковый подузел.

Ответить

Номер ответа: 5
Автор ответа:
 Borisfen



ICQ: 247914358 

Вопросов: 6
Ответов: 35
 Профиль | | #5 Добавлено: 02.10.05 16:50

вариант не подойдет, т.к. в “последний уровень” загружается основная масса данных, по этому все равно придется ждать.

Этот вариант подходит для отображения древа каталогов на диске при помощи TreeView.

Ответить

Номер ответа: 6
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #6
Добавлено: 02.10.05 22:26
Здесь нужно отображать не древо каталогов.

Ответить

Номер ответа: 7
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #7 Добавлено: 02.10.05 22:52
пускай у каждого узла будет по 1 детю :) при щелчке удаляй то детё, и добавляй своё :)

Ответить

Номер ответа: 8
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #8
Добавлено: 03.10.05 08:43
По моему это
Sub TreeView_Item_Expand (ByVal hTreeView As Long, ByVal hItem As Long, ByVal BoolArg As Integer)
    Dim TargetItem As TV_ITEM
    TargetItem.hItem = hItem
    TargetItem.mask = %TVIF_CHILDREN
    If IsFalse(BoolArg) Then TargetItem.cChildren = %False Else TargetItem.cChildren = 1
    SendMessage hTreeView, %TVM_SETITEM, 0, VarPtr(TargetItem)
End Sub

 Давно писал, поэтому точно не помню. Проверил в МСДН, вроде то.

Ответить

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



ICQ: 373-509-101 

Вопросов: 56
Ответов: 330
 Профиль | | #9 Добавлено: 03.10.05 09:17
2Borisfen, не знаю точно как Виндовс отображает дерево каталогов, но думаю здесь не все так просто, даже на С или Assembler’е обычным способом (способом от которого я пытаюсь уйти), думаю будет долго…
2HACTER, этот вариант скорее всего буду использовать
2CyRax, не могу найти объявление для TVM_SETITEM, подкинь если не сложно!

Ответить

Номер ответа: 10
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #10 Добавлено: 03.10.05 21:42
Си

//Необходимые Win32 константы и структуры
 const int TV_FIRST = 0x1100;
 const int TVM_SORTCHILDRENCB = TV_FIRST + 21;
 const int TVIF_PARAM = 0x0004;
 const int TVM_SETITEMW = TV_FIRST + 63;
 [StructLayout(LayoutKind.Sequential)]
  struct TVSORTCB
...

Ответить

Номер ответа: 11
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #11
Добавлено: 04.10.05 04:26
Private Const TV_FIRST As Long = &H1100
Private Const TVM_SETITEMA As Long = (TV_FIRST + 13)

Ответить

Страница: 1 |

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



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