TREEVIEW: Recorrer Recursivamente

24/07/2003 - 16:45 por Nelson Rodriguez | Informe spam
Amigos, humildemente, propongo una rutinita recursiva para recorrer un Arbol
Treeview, no es gran cosa, pero por ahí a alguien le puede venir bien.
Serán bienvenidas las mejoras del caso.

*
-*
*- CASO 1 - Le paso como NODO el primer Hijo del Nodo en el que estoy
posicionado.
*- En este caso la rutina NO procesa el Nodo sobre el que estoy (LO
EXCLUYE).
o=thisform.otree
o.selecteditem
primerhijo=o.selecteditem.child)
ver_rama(primerhijo)
*
-*
*- CASO 2 - Le paso como NODO áquel en el que estoy posicionado.
*- En este caso la rutina SI procesa el Nodo sobre el que estoy (LO
INCLUYE).
o=thisform.otree
o.selecteditem
ver_rama2(o.selecteditem)
*
*
PROCEDURE ver_rama(onodo)
* Pasandole el Primer Hijo del Nodo que me Interesa
LOCAL hnodo,next_nodo,t,nhijos

IF ISNULL(onodo)
RETURN
ENDIF
MESSAGEBOX(onodo.text)
nhijos=onodo.children
IF nhijos>0
hnodo=onodo.child
ver_rama(hnodo)
endif
next_nodo=onodo.next
IF ISNULL(next_nodo)
RETURN
ELSE
ver_rama(next_nodo)
ENDIF
RETURN
*-*
PROCEDURE ver_rama2(onodo)
* Pasandole el NODO, lo muestra a él y todo lo que cuelga de él
LOCAL hnodo,next_nodo,t,nhijos

IF ISNULL(onodo)
RETURN
ENDIF
MESSAGEBOX(onodo.text)
nhijos=onodo.children
IF nhijos>0
hnodo=onodo.child
ver_rama(hnodo)
endif
RETURN
*-*

Saludos
Nelson Rodriguez
nri@adinet.com.uy
Salto - Uruguay
 

Leer las respuestas

#1 Esparta Palma
24/07/2003 - 17:36 | Informe spam
Por que no lo mandas como Noticia a PortalFox? (cintillo izquierdo de la
página principal, en la sección Colabora )

www.portalfox.com -> Enviar Noticia

Apoya a Visual FoxPro usándolo legalmente
ž,ø€º°`°º€ø,žž,ø€º°`°º€ø,žž,ø€º°`°º€ø,žž,ø€º°`°º
Espartaco Palma Martínez
SysOp PortalFox ( http://www.PortalFox.com )
email:
Acapulco, Guerrero. México



Nelson Rodriguez wrote:

Amigos, humildemente, propongo una rutinita recursiva para recorrer un Arbol
Treeview, no es gran cosa, pero por ahí a alguien le puede venir bien.
Serán bienvenidas las mejoras del caso.

*
-*
*- CASO 1 - Le paso como NODO el primer Hijo del Nodo en el que estoy
posicionado.
*- En este caso la rutina NO procesa el Nodo sobre el que estoy (LO
EXCLUYE).
o=thisform.otree
o.selecteditem
primerhijo=o.selecteditem.child)
ver_rama(primerhijo)
*
-*
*- CASO 2 - Le paso como NODO áquel en el que estoy posicionado.
*- En este caso la rutina SI procesa el Nodo sobre el que estoy (LO
INCLUYE).
o=thisform.otree
o.selecteditem
ver_rama2(o.selecteditem)
*
*
PROCEDURE ver_rama(onodo)
* Pasandole el Primer Hijo del Nodo que me Interesa
LOCAL hnodo,next_nodo,t,nhijos

IF ISNULL(onodo)
RETURN
ENDIF
MESSAGEBOX(onodo.text)
nhijos=onodo.children
IF nhijos>0
hnodo=onodo.child
ver_rama(hnodo)
endif
next_nodo=onodo.next
IF ISNULL(next_nodo)
RETURN
ELSE
ver_rama(next_nodo)
ENDIF
RETURN
*-*
PROCEDURE ver_rama2(onodo)
* Pasandole el NODO, lo muestra a él y todo lo que cuelga de él
LOCAL hnodo,next_nodo,t,nhijos

IF ISNULL(onodo)
RETURN
ENDIF
MESSAGEBOX(onodo.text)
nhijos=onodo.children
IF nhijos>0
hnodo=onodo.child
ver_rama(hnodo)
endif
RETURN
*-*

Saludos

Preguntas similares