|
Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
|
|||
---|---|---|---|
#18+
Есть два способа задать родителя узла Treeview: 1. в момент создания узла - через метод TreeView.Nodes.Add. Максимально гибкий метод, но с одним но - если дерево уже создано и надо переместить ветку, чтобы им воспользоваться надо будет пересоздавать всех потомков перемещаемого узла 2. привязать уже готовый узел к другому узлу через Set nod.Parent = NewParent у этого метода есть очевидная, но полезная особенность - при смене родителя, к новому родителю перемещается вся ветка со всеми подчинёнными узлами. Правда перемещаемый таким образом узел всегда создается как первый среди потомков нового родителя, но это легко обходится если после перемещения пробежать всех потомков первого уровня чтобы они оказались перед перемещенным узлом (пробегать в обратном порядке от узла перед которым надо вставить до перемещенного узла и менять им родителя на текущего). Это здорово экономит силы, но есть большое НО - нельзя сделать set nod.Parent = Nothing т.е. этим способом нельзя воспользоваться чтобы переместить ветку узла в корень - вылазит ошибка 35610 "Invalid Object". Может есть какой-то неочевидный трюк, чтобы обойти это ограничение? - уж очень заманчиво перемещать ветки без полного пересоздания подчинённых узлов... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2020, 11:54 |
|
Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
|
|||
---|---|---|---|
#18+
Я такое могу сделать только пересоздав дерево заново..... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2020, 14:59 |
|
Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
|
|||
---|---|---|---|
#18+
Serg197311, да пересоздать конечно можно, но ведь красиво бы получилось и потом - если так можно переместить к любому узлу - почему нельзя в корень? ведь логично set parent = Nothing => корневой узел, но - почему-то нет. хотя если в принципе перемещение ветки дерева сменой родителя возможно не вижу причин почему это невозможно сделать в корень дерева. Если бы можно было скрывать из отображения узлы, можно было бы попробовать обойти ограничение создав скрытый,но реальный корневой узел и вязать "корневые" к нему, но Visible read-only и определяет лишь развернута ли ветка до заданного узла ... |
|||
:
Нравится:
Не нравится:
|
|||
17.03.2020, 15:33 |
|
Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
|
|||
---|---|---|---|
#18+
Пока лучшая идея что у меня появилась - компромиссный вариант: 1. меняем ключ перемещаемого узла на временный 2. создаем копию перемещаемого узла в нужном месте в корне дерева с правильным ключом 3. пробегаем потомков 1 уровня перемещаемого (который со временным ключом) узла и перемещаем их сменой родителя к новосозданному (с правильным ключом) узлу (циклом в обратном порядке Set .Child.LastSibling.Parent=nodCopy пока .Children>0) 4. Удаляем перемещаемый узел (с временным ключом) Не совсем то, но должно работать. Попробую.. По-крайней мере не всю ветку придётся пересоздавать, да и цикл ограничится только непосредственными потомками. Хотя в одно движение было бы конечно куда красивее, а потому вопрос тот же: Может есть какой-то изящный манёвр обойти ограничение Parent? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 14:17 |
|
Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
|
|||
---|---|---|---|
#18+
iKaRus 1. в момент создания узла - через метод TreeView.Nodes.Add. Максимально гибкий метод, но с одним но - если дерево уже создано и надо переместить ветку, чтобы им воспользоваться надо будет пересоздавать всех потомков перемещаемого узла ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 15:08 |
|
Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
|
|||
---|---|---|---|
#18+
Панург, согласен - некрасиво (ну пусть даже не всё, а только часть дерева затронутую перемещением) потому и не понятно - почему Set Parent=Nothing не срабатывает и Drag'n'Drop, как раз по-моему прямой намек на то что это должно работать. У Add большой плюс - возможность задавать точку вставки при помощи Relationship без шаманства со сдвигом соседей и то, о чём собственно речь, - возможность создавать узлы в корне. Под гибкостью Add я имел ввиду только это. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 15:43 |
|
Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
|
|||
---|---|---|---|
#18+
iKaRus, Пример (может чем поможет :) ) http://hiprog.com/index.php?option=com_content&task=view&id=690 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 15:56 |
|
Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
|
|||
---|---|---|---|
#18+
zimkon, да, спасибо, посмотрел - вспомнил этот пример когда-то по нему делал деревья) Там перемещение узлов реализовано имено через Set Parent по Drop, но - переместить узел можно только к другому узлу, поэтому этой проблемы и не возникает - нет ситуации когда родитель может стать Nothing. Пример на то и пример, что максимально упрощен чтобы продемонстрировать только то, что хотел автор. Например вставка перемещаемого узла там будет всегда первым потомком, после нужного узла поставить ветку не получится. Это все решаемо, но вот с Nothing пока удалось придумать только описанный выше вариант. и тот пока не попробовал - завтра поковыряю... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 16:30 |
|
Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 18:54 |
|
Существует ли способ сделать Set MSComctlLib.Treeview.Node.Parent = Nothing?
|
|||
---|---|---|---|
#18+
zimkon, а вот это не видел - похоже то самое, что хотел завтра пробовать - спасибо! Видать и прям у дураков мысли схожие)) Все равно завтра попытаюсь по-своему, но теперь будет с чем сравнить. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2020, 19:42 |
|
|
start [/forum/topic.php?fid=45&msg=39938733&tid=1610174]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 152ms |
0 / 0 |