PDA

Ver la Versión Completa : Como saber si un Treeview esta vacio y ...


JoAnCa
20-12-2008, 20:06:31
Hola a todos

Tengo un Treeview que lo lleno en tiempo de ejecucion, y en algun momento necesito saber si este esta vacio
Tambien quisiera saber como ponerle la misma imagen del nodo padre a todos sus nodos hijos

He buscado en el foro, y por cierto hay bastantes temas sobre el treeview, pero no he encontrado lo que necesito.

Siguiendo lo que dice uno de esos hilos (no recuerdo ahora cual), pude ponerle una imagen a los nodo, pero a pesar de ponerle un numero diferente en cada index, me pone la misma imagen para todos los nodos.


...
tnParentNode:=tvLista.Items.Add(nil,'Titulo 1');
tvLista.Items.Item[0].ImageIndex:=1;
...
tnParentNode:=tvLista.Items.Add(nil,'Titulo 2');
tvLista.Items.Item[0].ImageIndex:=5;
...


Que estoy haciendo mal?

Que representa el indice de tvLista.Items.Item[0]

.

xEsk
20-12-2008, 21:01:08
if tvLista.Items.Count = 0 then // Si es 0 = vacio

Y lo de las imagenes, estas asignando siempre una imagen al mismo nodo, el primero de la lista, prueba con algo parecido a esto:

...
tnParentNode:=tvLista.Items.Add(nil,'Titulo 1');
tnParentNode.ImageIndex:=1;
...
tnParentNode:=tvLista.Items.Add(nil,'Titulo 2');
tnParentNode.ImageIndex:=5;
...

Y haciendo esto, estas creando solo nodos "PADRE", si quieres añadir un hijo a un nodo, debes usar algo parecido a esto:

var
tnParentNode: TTreeNode;
tnChildNode: TTreeNode;

begin
// creamos un padre
tnParentNode:=TreeView1.Items.Add(nil,'Titulo 1');
tnParentNode.ImageIndex:=5;
// añadimos un hijo al padre creado anteriormente
tnChildNode:=TreeView1.Items.AddChild(tnParentNode, 'Titulo 2');
tnChildNode.ImageIndex:=6;

Saludos.

JoAnCa
22-12-2008, 23:05:56
Y haciendo esto, estas creando solo nodos "PADRE", si quieres añadir un hijo a un nodo, debes usar algo parecido a esto:Pues yo hago nodos hijos y padres, lo que no puse el codigo completo para ahorrar espacio en el post, como usaba la misma forma para todos...

Haciendo lo que me dices
tnParentNode.ImageIndex:=5;
no funciona, pues me dice que ImageIndex no esta declarada

Parece que no se puede poner directamente en la variable, debe ser de otra forma, pero yo no la encuentro

Disculpen mi desconocimiento, pero es que nunca habia trabajado con un treeview

Lepe
23-12-2008, 13:00:56
tnParentNode:=tvLista.Items.Add(nil,'Titulo 1');
tvLista.Items.Item[0].ImageIndex:=1;
...
tnParentNode:=tvLista.Items.Add(nil,'Titulo 2');
tvLista.Items.Item[0].ImageIndex:=5;


Igual es un error de copy & paste, pero ahí estás asignando el mismo item[0] distintos imageIndex, por tanto, todos tendrán el mismo.

El truco está en guardar temporalmente el nodo que has añadido, tal y como hace xEsk, aunque yo cambiaría el nombre a la variable para que quedara más claro:

NewItem:=tvLista.Items.Add(nil,'Titulo 1');
NewItem.ImageIndex:=1;
...
NewItem:=tvLista.Items.Add(nil,'Titulo 2');
NewItem.ImageIndex:=5;
...

Como ves, primero se añade un elemento nuevo y se guarda la referencia en NewItem y ahora, se le cambia el imageIndex a ese NewItem. Ahí está la diferencia entre tu código y el de xEsk

Ese error que te da de "imageIndex no declarado" es extraño, lo estoy mirando y en delphi 7 si me aparece la propiedad imageIndex para un TTreeNode :confused:

Saludos

JoAnCa
23-12-2008, 20:44:40
Tienes razon Lepe, el problema es que estaba tratando de asignarle ImageIndex al control TreeView (no me percate), en lugar de a la variable como me explicaron uds.
Ya todo me sale bien, Muchas gracias :D