powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
10 сообщений из 10, страница 1 из 1
Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
    #39938166
iKaRus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть два способа задать родителя узла Treeview:
1. в момент создания узла - через метод TreeView.Nodes.Add.
Максимально гибкий метод, но с одним но - если дерево уже создано и надо переместить ветку, чтобы им воспользоваться надо будет пересоздавать всех потомков перемещаемого узла

2. привязать уже готовый узел к другому узлу через Set nod.Parent = NewParent
у этого метода есть очевидная, но полезная особенность - при смене родителя, к новому родителю перемещается вся ветка со всеми подчинёнными узлами. Правда перемещаемый таким образом узел всегда создается как первый среди потомков нового родителя, но это легко обходится если после перемещения пробежать всех потомков первого уровня чтобы они оказались перед перемещенным узлом (пробегать в обратном порядке от узла перед которым надо вставить до перемещенного узла и менять им родителя на текущего).

Это здорово экономит силы, но есть большое НО - нельзя сделать set nod.Parent = Nothing
т.е. этим способом нельзя воспользоваться чтобы переместить ветку узла в корень - вылазит ошибка 35610 "Invalid Object".

Может есть какой-то неочевидный трюк, чтобы обойти это ограничение? - уж очень заманчиво перемещать ветки без полного пересоздания подчинённых узлов...
...
Рейтинг: 0 / 0
Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
    #39938294
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я такое могу сделать только пересоздав дерево заново.....
...
Рейтинг: 0 / 0
Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
    #39938316
iKaRus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Serg197311, да пересоздать конечно можно, но ведь красиво бы получилось и потом - если так можно переместить к любому узлу - почему нельзя в корень? ведь логично set parent = Nothing => корневой узел, но - почему-то нет. хотя если в принципе перемещение ветки дерева сменой родителя возможно не вижу причин почему это невозможно сделать в корень дерева.
Если бы можно было скрывать из отображения узлы, можно было бы попробовать обойти ограничение создав скрытый,но реальный корневой узел и вязать "корневые" к нему, но Visible read-only и определяет лишь развернута ли ветка до заданного узла
...
Рейтинг: 0 / 0
Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
    #39938733
iKaRus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока лучшая идея что у меня появилась - компромиссный вариант:
1. меняем ключ перемещаемого узла на временный
2. создаем копию перемещаемого узла в нужном месте в корне дерева с правильным ключом
3. пробегаем потомков 1 уровня перемещаемого (который со временным ключом) узла и перемещаем их сменой родителя к новосозданному (с правильным ключом) узлу (циклом в обратном порядке Set .Child.LastSibling.Parent=nodCopy пока .Children>0)
4. Удаляем перемещаемый узел (с временным ключом)
Не совсем то, но должно работать. Попробую.. По-крайней мере не всю ветку придётся пересоздавать, да и цикл ограничится только непосредственными потомками.
Хотя в одно движение было бы конечно куда красивее, а потому вопрос тот же:
Может есть какой-то изящный манёвр обойти ограничение Parent?
...
Рейтинг: 0 / 0
Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
    #39938770
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iKaRus
1. в момент создания узла - через метод TreeView.Nodes.Add.
Максимально гибкий метод, но с одним но - если дерево уже создано и надо переместить ветку, чтобы им воспользоваться надо будет пересоздавать всех потомков перемещаемого узла
да ладно! Каждый раз при drag-and-drop пересоздавать все? не может такого быть.
...
Рейтинг: 0 / 0
Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
    #39938786
iKaRus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, согласен - некрасиво (ну пусть даже не всё, а только часть дерева затронутую перемещением) потому и не понятно - почему Set Parent=Nothing не срабатывает и Drag'n'Drop, как раз по-моему прямой намек на то что это должно работать.
У Add большой плюс - возможность задавать точку вставки при помощи Relationship без шаманства со сдвигом соседей и то, о чём собственно речь, - возможность создавать узлы в корне. Под гибкостью Add я имел ввиду только это.
...
Рейтинг: 0 / 0
Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
    #39938794
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iKaRus,
Пример (может чем поможет :) )
http://hiprog.com/index.php?option=com_content&task=view&id=690
...
Рейтинг: 0 / 0
Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
    #39938809
iKaRus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zimkon, да, спасибо, посмотрел - вспомнил этот пример когда-то по нему делал деревья)
Там перемещение узлов реализовано имено через Set Parent по Drop, но - переместить узел можно только к другому узлу, поэтому этой проблемы и не возникает - нет ситуации когда родитель может стать Nothing.
Пример на то и пример, что максимально упрощен чтобы продемонстрировать только то, что хотел автор. Например вставка перемещаемого узла там будет всегда первым потомком, после нужного узла поставить ветку не получится. Это все решаемо, но вот с Nothing пока удалось придумать только описанный выше вариант. и тот пока не попробовал - завтра поковыряю...
...
Рейтинг: 0 / 0
Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
    #39938878
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iKaRus,

Могу предложить ещё это :) 9781708
...
Рейтинг: 0 / 0
Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
    #39938889
iKaRus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zimkon, а вот это не видел - похоже то самое, что хотел завтра пробовать - спасибо! Видать и прям у дураков мысли схожие)) Все равно завтра попытаюсь по-своему, но теперь будет с чем сравнить.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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