Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Быстрое переключение между большими деревьями в TreeView / 10 сообщений из 10, страница 1 из 1
06.05.2010, 18:34
    #36616029
Infinity Creator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое переключение между большими деревьями в TreeView
Здравствуйте.

Подскажите, пожалуйста, если сталкивались, как решить такую проблему.
Имею форму (UserForm) на которой расположен объект типа treeview twObject (UserForm.twObject). В коде объявляю переменные TreeNode типа node и Tree типа treeview (для ссылки на данный объект формы и заполняю дерево данными из некоего массива:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
'Объявление переменных узлов и дерева
Public TreeNode as Node
Public Tree as TreeView

Sub FillTree()
  set Tree = UserForm.twObject    'Назначение ссылки на объект
  ...
  set TreeNode = Tree.Nodes.Add(...)    'Заполнение узлов объекта
  ...
End Sub
Все стандартно и известно. Но вот встала какая проблема. Если используется несколько деревьев с несколькими тысячами элементов, и необходимо программно переключаться между этими деревьями, то на перестроение дерева уходит несколько секунд, а иногда и несколько десятков секунд - а это очень долго. Как сделать так, чтобы можно было один раз загрузить различные большие деревья в несколько объектов и потом только назначать их данные объекту UserForm.twObject? Т.е. нужно, чтобы в одном окне формы можно было бы быстро переключаться между различными большими деревьями, никак не связанными друг с другом, например по значению комбобокса в той же форме. Я попытался решить таким образом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Public TreeNode as Node
Public Tree1 as New TreeView     'Создание первого нового экземпляра TreeView
Public Tree2 as New TreeView     'Создание второго нового экземпляра TreeView

Sub FillTrees()
  ...
  set TreeNode = Tree1.Nodes.Add(...)   'Заполение 1-го дерева
  set TreeNode = Tree2.Nodes.Add(...)   'Заполение 2-го дерева
  ...

End Sub

sub SetTree
  set UserForm.twObject = Tree1
end sub
- выдает ошибку.

Заранее благодарен.
...
Рейтинг: 0 / 0
06.05.2010, 19:02
    #36616076
Быстрое переключение между большими деревьями в TreeView
Infinity Creator,

Меняйте свойство видимости разным (уже заполненным) экземплярам TreeView по своим условиям, а в модуле формы опишите ссылку на текущий экземпляр: Public WithEvents Tree As TreeView, и по условиям переключения с экземпляра на экземпляр делайте Set Tree = ЭкземплярN, это позволит единообразно обрабатывать события.
...
Рейтинг: 0 / 0
07.05.2010, 09:05
    #36616639
Infinity Creator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое переключение между большими деревьями в TreeView
13-й квартал,

Не совсем понятно, что значит

Меняйте свойство видимости разным (уже заполненным) экземплярам TreeView по своим условиям

Т.е. вы имеете ввиду программно создавать в самой форме новые визуальные экземпляры? Потому что если вы говорите про экземпляры класса TreeView
Код: plaintext
1.
2.
Dim twObject1 as New TreeView
Dim twObject2 as New TreeView
, то да, я могу переназначать ссылку на каждый из них, но это не визуализируется. Как данные этих экземпляров передавать визуальному объекту?
...
Рейтинг: 0 / 0
07.05.2010, 09:28
    #36616662
Infinity Creator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое переключение между большими деревьями в TreeView
13-й квартал,

Фактически вопрос можно свести к следующему:
Имея несколько заполненных экземпляров класса TreeView как передать их содержимое визуальному объекту TreeView формы?
...
Рейтинг: 0 / 0
07.05.2010, 09:54
    #36616717
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое переключение между большими деревьями в TreeView
Infinity CreatorИмея несколько заполненных экземпляров класса TreeView как передать их содержимое визуальному объекту TreeView формы?

то, что я выделил - это не разные вещи, это одно и то же.

13-й квартал предлагает ничего никуда не передавать, а просто создать несколько, как вы выражаетесь, визуальных объектов TreeView и в каждый момент премени отображать на экране только один из них, используя свойство .Visible
...
Рейтинг: 0 / 0
07.05.2010, 10:04
    #36616744
Infinity Creator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое переключение между большими деревьями в TreeView
Shocker.Pro,

Вариант, конечно, но корявый какой-то. Неужели нет способа просто сделать переназначение коллекции Nodes отображаемого TreeView на коллекцию из другого экземпляра?
...
Рейтинг: 0 / 0
07.05.2010, 10:11
    #36616754
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое переключение между большими деревьями в TreeView
Нет (кроме, разумеется, долгого перебора). А зачем?

Вариант не более корявый, чем пытаетесь организовать.
Еще раз повторяю, экземпляр на форме и экземпляр в памяти - это одно и то же, первый просто не видите. Вы пытаетесь наплодить N экземпляров в памяти и один на форме, вам же нужно сделать только N экземпляров на форме. В остальном все то же самое.
При переключениях вы будете передавать не коллекцию, а ссылку на экземпляр, вот и вся разница.
...
Рейтинг: 0 / 0
07.05.2010, 10:13
    #36616762
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое переключение между большими деревьями в TreeView
Кроме того, есть еще алгоритмы динамической догрузки в дерево узлов по мере их разворачивания пользователем (как поступает виндовый explorer). Алгоритмы приводились на форуме VB
...
Рейтинг: 0 / 0
07.05.2010, 10:34
    #36616812
Infinity Creator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое переключение между большими деревьями в TreeView
Shocker.Pro,

Спасибо за ответ, жаль что по другому никак.
...
Рейтинг: 0 / 0
11.05.2010, 05:11
    #36620168
Infinity Creator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрое переключение между большими деревьями в TreeView
Разобравшись с проблемой полностью выложу здесь свое решение с программированием реакции каждого из деревьев. Большое спасибо автору 13-й квартал за свой ответ в теме про программирование динамических контролов.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Быстрое переключение между большими деревьями в TreeView / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]