Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Tree-определить родительский индекс / 18 сообщений из 18, страница 1 из 1
30.03.2004, 11:19
    #32461897
ппп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tree-определить родительский индекс
есть дерево с разветвленной спруктурой (4 уровня) Задача кликая на дочернюю ветвь определить самый старший уровень
Пробовал
intindex = tv.selecteditem.Parent.Index-определяет ближайший старший.
...
Рейтинг: 0 / 0
30.03.2004, 11:57
    #32461994
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tree-определить родительский индекс
intindex = tv.selecteditem.Parent.Index-определяет ближайший старший.

Сделай примерно такую функцию

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
function tNodeParent (myNode as Node)
dim i as long

On error resume next
i=myNode.Parent.Index  -- будет ошибка, если у myNode нет Родителя
 

if err.Number= 0  then
   call tNodeParent  (myNode.Parent)  -- ошибки нет значит, есть еще один Родитель - вызывай функцию еще раз (рекурсия)
 
else
 -- есть ошибка - значит уперлись в самого старшего
 
  tNodeParent =myNode.Index
end if

end function
...
Рейтинг: 0 / 0
30.03.2004, 12:32
    #32462078
e_basil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tree-определить родительский индекс
можно еще получить от выбранного нода FullPath
Первое значение до разделителя и будет RootNode
...
Рейтинг: 0 / 0
30.03.2004, 13:25
    #32462156
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tree-определить родительский индекс
можно еще получить от выбранного нода FullPath

Хорошее решение, но только если быть уверенным, что в имени Ноды не будет символа-разделителя
...
Рейтинг: 0 / 0
30.03.2004, 13:41
    #32462183
e_basil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tree-определить родительский индекс
если главный корень будет с разделителем в имени своем - это можно обыграть
...
Рейтинг: 0 / 0
30.03.2004, 13:43
    #32462186
e_basil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tree-определить родительский индекс
вообще - то главный корень обычно известен до постройки дерева
...
Рейтинг: 0 / 0
30.03.2004, 14:05
    #32462226
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tree-определить родительский индекс
вообще - то главный корень обычно известен до постройки дерева

Не понял как он м.б. известен - но зато твоя фраза натолкнула меня на свойство Node.Root , млин, и делов-то...
...
Рейтинг: 0 / 0
30.03.2004, 14:09
    #32462233
ппп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tree-определить родительский индекс
Проверил рекурсивную процедуру внутри она работает нормально НО!
Наверное , всвязм с тем , что свойство не может быть изменено, или не может быть присвоено другое - значение процедура делает интересную вещь-
после последнего end if переходит на end func и обратно на на end if и так делает столько раз сколь уровней она прошла и в концне концов возвращает значение индекса который и был ей передан.!
...
Рейтинг: 0 / 0
30.03.2004, 14:11
    #32462240
e_basil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tree-определить родительский индекс
Node.Root - это точно, но мне простительно, у меня сегодня голова мягкая
а насчет главного корня - обычно известно, что строишь, например
ВСЕ ГРУППЫ или ВСЕ КЛИЕНТЫ или там РАБОЧИЙ СТОЛ
...
Рейтинг: 0 / 0
30.03.2004, 14:19
    #32462247
ппп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tree-определить родительский индекс
По поводу Node.root-Возвращается значение только самого первого корня
...
Рейтинг: 0 / 0
30.03.2004, 14:26
    #32462256
Shkurenko Alexander
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tree-определить родительский индекс
2 Senin Viktor
Чего то ты с функцией немного не додумал, вот так будет лучше:
Код: plaintext
1.
2.
3.
4.
5.
6.
Function get_tv_parent(ByRef Node As MSComctlLib.Node) As MSComctlLib.Node
    If Not (Node.Parent Is Nothing) Then
        Set get_tv_parent = get_tv_parent(Node.Parent)
    Else
        Set get_tv_parent = Node
    End If
End Function


И нет этой "мышиной возни" с объектом
...
Рейтинг: 0 / 0
30.03.2004, 14:47
    #32462323
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tree-определить родительский индекс
2Shkurenko Alexander
Чего то ты с функцией немного не додумал, вот так будет лучше:

Ну я эту функцию прямо в браузере писал - мог и схалтурить

2ппп
По поводу Node.root-Возвращается значение только самого первого корня

Ну это же тебе и нужно: самый старший уровень - это и есть уровень Root. Или что-то другое нужно?

2e_basil
а насчет главного корня - обычно известно, что строишь, например
ВСЕ ГРУППЫ или ВСЕ КЛИЕНТЫ или там РАБОЧИЙ СТОЛ

Не факт! (с) Саша Белый
Я вообще не знаю какие там главные уровни юзера себе настроили - что хотят, то и делают.

после последнего end if переходит на end func и обратно на на end if и так делает столько раз сколь уровней она прошла и в концне концов возвращает значение индекса который и был ей передан.!

Можно было бы через ByRef передавать Node, не забыв сделать ему Set - Но тогда бы получился пример от Shkurenko Alexanderа :) - им и воспользуйся
...
Рейтинг: 0 / 0
30.03.2004, 15:04
    #32462369
ппп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tree-определить родительский индекс
senin Viktor
В дереве устроено так
Корень1-Ветка1....
Корень2-ветка2
.....
Определяем индеск корняi
Пример Shkurenko Alexanderа аналогично Вашему
...
Рейтинг: 0 / 0
30.03.2004, 16:38
    #32462595
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tree-определить родительский индекс
Определяем индеск корняi
Пример Shkurenko Alexanderа аналогично Вашему

Попробовал пример Александар на своем дереве. Мне все вернулось правильно -> Кореньi
...
Рейтинг: 0 / 0
31.03.2004, 09:42
    #32463216
ппп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tree-определить родительский индекс
Сенину Виктору
Да ноде возвращет а вот если добавить в функцио получение индекса то картина такая же как у вас
...
Рейтинг: 0 / 0
31.03.2004, 13:47
    #32463834
Shkurenko Alexander
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tree-определить родительский индекс
2 ппп
Блин, да Вам не угодишь :maniac:
Код: plaintext
1.
2.
3.
4.
5.
Function get_tv_root_index(ByVal Node As MSComctlLib.Node) As Long
    Do Until Node.Parent Is Nothing
        Set Node = Node.Parent
    Loop
    get_tv_root_index = Node.Index
End Function

Вот так пойдёт?
...
Рейтинг: 0 / 0
31.03.2004, 14:23
    #32463941
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tree-определить родительский индекс
2Shkurenko Alexander
Блин, да Вам не угодишь :maniac:


Чего то ты с новой функцией немного не додумал, вот так будет лучше со старой

myIndex=get_tv_parent(tv.SelectedNode).Index


2ппп
Пояснение: функция get_tv_parent возращает объект Node у которого можно просто считать свойство Index.
...
Рейтинг: 0 / 0
31.03.2004, 14:34
    #32463976
Shkurenko Alexander
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tree-определить родительский индекс
2 Senin Viktor
Не, эта функция лучше тем, что здесь нет рекурсии, а возвращать можно и чёрта лысого :-P
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Tree-определить родительский индекс / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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