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

Подскажите, пожалуйста, если сталкивались, как решить такую проблему.
Имею форму (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
Быстрое переключение между большими деревьями в TreeView
    #36616076
Infinity Creator,

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

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

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

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

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

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

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

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

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

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


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