Dudas sobre árbol(TreeView)

Tengo un problemilla con un treeview, pues realizo el árbol perfectamente pero a la hora de actualizarlo (lo elimino y lo creo de nuevo) se encoge y luego no sé la manera de que vuelva al mismo estado que estaba antes de actualizar.
Me explico. Si tengo desplegados "x" hijos, al actualizar me interesa que se encoja pero que luego se despliegue al estado anterior (o sea, que no se quede cerrado hasta la raíz)
Espero que haya sabido expresarme con total claridad, ya que serían de gran ayuda tus conocimientos.
Respuesta
1
Luego de estar probando se me ocurrió una idea bastante buena a mi criterio:
Podes ir guardando en un arreglo los indices de los nodos que te ointeran tener expandidos. Luego cuando haces el refresh para que se encoja también recorres el arreglo cada uno de los elementos estableciéndoles la propiedad de Expended en True de la siguiente manera:
For I = 1 To UBound(array) - 1
TreeView1.Nodes(arr(I)).Expanded = True
Next I
Siendo array el vector con los indices de los nodos

1 respuesta más de otro experto

Respuesta
1
Como estas, es algo complicado desde ya tratar de explicar el problema y entenderlo de mi parte pero bueno intentare contestarte.
El problema puede ser cuando borras o cuando quieres expander el árbol.
Esto es un ej.
*metodo expande
lparameters m.padre
local m.registro, m.nombre, m.campopadre, m.imagen
m.campopadre = thisform.campopadre
*mi tabla es ramas
=seek(m.padre, "ramas", thisform.orden)
do while !eof("ramas") and evaluate("ramas." + thisform.campopadre) = m.padre
m.registro = recno("ramas")
thisform.selcar.nodes.add(m.padre, 4, evaluate("ramas." + thisform.campocodigo), evaluate("ramas." + thisform.camponombre), 2, 3)
thisform.selcar.nodes(evaluate("ramas." + thisform.campocodigo)).expanded = .t.
thisform.expande(evaluate("ramas." + thisform.campocodigo))
go m.registro in ramas
skip 1 in ramas
enddo
**
*Metodo de borrado
local m.nodo as MSComctlLib.node, m.orden
m.orden = thisform.campocodigo
if occurs(".", m.orden) > 0
m.orden = getwordnum(m.orden, 2, ".")
endif
if type("thisform.selcar.selecteditem.key") != "C"
return
endif
m.nodo = thisform.selcar.selecteditem
if messagebox("¿Eliminar '" + m.nodo.Text + "'?", 4 + 32 + 256) = 7
return
endif
if seek(m.nodo.Key, "ramas", m.orden)
delete in ramas
Thisform. Selcar. Nodes. Remove(m. Nodo. Key)
Thisform. Selcar. Refresh()
Endif
*
Esto es como lo utilizo y anda,
te mando este ejemplo ya que es difícil determinar donde puede estar tu problema.
Que estes bien chau chau.
Gracias por la aclaración. Me fue de gran ayuda.
Aprovecho tu amabilidad para hacerte otra pregunta. Verás, quiero hacer un explorador como el de windows, pero no sé que utilizar para dividir la pantalla en dos... me explico, si observas el explorador de windows, verás que se divide a su vez en dos, colocando a uno de los lados el árbol y en el otro el detalle...
Mi pregunta es...¿cuál es ese control? ¿Un explorador? No estoy muy puesto con los ActiveX y no sé si será alguno de ellos...
Lo que puedes hacer es lo siguiente.
Vas a herramienta, opciones, control
Buscas el activex 'Microsoft common dialog control, version 6.0'
Luego vas a tu formulario de la barr de control de diseño seleccionas activex y agregas el que vos seleccionaste y le pones este nombre 'olecommdlog',
en un commandbottom en el evento click pones lo siguiente:
#DEFINE ALLFILES2_LOC "Todos los archivos (*.*)|*.*|Texto (*.txt)|*.txt|Imágenes(*.bmp;*.ico)|*.bmp;*.ico"
thisform.olecommdlog.filter = ALLFILES2_LOC
thisform.oleCommDlog.Flags = 512
thisform.oleCommDlog.ShowOpen()
Con esto ya tienes tu árbol.
Te agradecería que me evaluaras o me respondas en blanco para descarte, ya que me están ocupando un gran espacio en mi listado de preguntas activas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas