Страница: 1 |
Страница: 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-сайт:
Профиль | | #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-сайт:
Профиль | | #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-сайт:
Профиль | | #8
Добавлено: 03.10.05 08:43
По моему это
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-сайт:
Профиль | | #11
Добавлено: 04.10.05 04:26
Private Const TVM_SETITEMA As Long = (TV_FIRST + 13)