PDA

Ver la Versión Completa : Borrar items de un TreeView


ibarrols
05-06-2003, 15:49:28
Hola Foro!!!

Quiero borrar todos los items(viejos) para luego cargarlos con distintos items(nuevos) y no se como hacerlo...

será que alguien me podrá ayudar???

Muchas Gracias....

andres1569
05-06-2003, 15:57:39
TreeView1.Items.Clear;


Muchas gracias ...

... de nada

Roy
06-06-2003, 02:49:28
... y si cada ítem tiene la propiedad Data apuntando a estructuras que utilizan memoria (creados con 'new' de un tipo 'record', por ejemplo)? La función 'clear' libera esa memoria también ?

Gracias.

delphi.com.ar
06-06-2003, 02:56:25
No

delphi.com.ar
06-06-2003, 03:01:41
Es un error MUY COMÚN, para eso existe un evento OnDeletion que se ejecuta cada ves que se elimina un nodo, a ahí puedes encargarte de eliminar lo que tengas en la propiedad Data.

Y agrego que para que esto sea mas rápido, evitando que re-dibuje el árbol cada ves que se elimina un nodo, te conviene hacer algo así:
TreeView1.Items.BeginUpdate;
try
TreeView1.Items.Clear;
finally
TreeView1.Items.EndUpdate;
end;

También lo puedes hacer a la hora de cargar los nodos. Estoy seguro que si tu árbol es tiene muchos nodos me lo vas a agradecer...

Saludos!

PD:
El hilo anterior fue para competir con Román en la respuesta mas corta! :D

Roy
06-06-2003, 03:25:57
Estaba por agradecer la respuesta corta del moderador.... aunque reconozco que con algo de ironía, aunque tampoco mi pregunta daba para mucho más. Pero minuto a minuto la respuesta se fue ampliando (más rápido de lo esperado) y lo he probado todo y funciona muy bien.

MUCHAS GRACIAS !! (perdonando las mayúsculas esta vez....)

Roy

roman
06-06-2003, 04:29:28
Posteado originalmente por delphi.com.ar

TreeView1.Items.BeginUpdate;
try
TreeView1.Items.Clear;
finally
TreeView1.Items.EndUpdate;
end;


Una observación: son innecesarias las llamadas a BeginUpdate y EndUpdate así como el encajarlo en un bloque try-finally-end ya que todo esto lo hace internamente el método Clear.

Posteado originalmente por delphi.com.ar
PD:
El hilo anterior fue para competir con Román en la respuesta mas corta! :D [/B]

Buen intento pero no considero que me hayas superado :p
En la que yo dí no había nada más que decir. Bastaba que buscara "Pos" en la ayuda para ver los parámetros ya que la función no tiene ninguna complicación. Sin embargo en este caso es más difícil encontrar en qué parte de la ayuda dice que Data no se libera.

:D

// Saludos

andres1569
06-06-2003, 11:21:25
F1

delphi.com.ar
06-06-2003, 17:06:41
Posteado originalmente por roman
[B]Una observación: son innecesarias las llamadas a BeginUpdate y EndUpdate así como el encajarlo en un bloque try-finally-end ya que todo esto lo hace internamente el método Clear.

En la versión de Delphi que yo tengo (5), no es así, llama directamente a la API, pero acabo de comprobar que en la 7 si...


Esto es un problema!!!!

Roy
06-06-2003, 17:26:48
¿ En qué tipo de documentación se encuentra ese tipo de información: la que explica el funcionamiento interno de un 'Clear', por ejemplo ?

Roy

delphi.com.ar
06-06-2003, 17:33:41
En la ayuda.. pero no es muy extensa en este tema en particular. Lo que nosotros estamos discutiendo es el código que ejecuta el clear, puedes acceder a él rápidamente haciendo Ctrl+Click en el método, o abriendo la unit ComCtrls.

Saludos!

roman
06-06-2003, 17:59:08
Posteado originalmente por Roy
¿ En qué tipo de documentación se encuentra ese tipo de información: la que explica el funcionamiento interno de un 'Clear', por ejemplo ?


En realidad en ninguna Roy, estamos haciendo "trampa" al revisar el código fuente de Delphi. Lo cierto es que debería estar en la documentación lo mismo que lo del Data. Las llamadas a Begin Update y EndUpdate no son tan problemáticas ya que pueden anidarse unas con otras y lo único que hacen es aumentar o decrementar un contador. Pero cada bloque try es un aumento a la carga de un programa y si puede evitarse qué mejor. Ya que no está documentado lo más correcto sería proceder como delphi.com.ar para más seguridad. Si estuviera documentado uno podría omitirlo tranquilamente.

// Saludos

Roy
06-06-2003, 19:50:30
Gracias por la aclaración. :)

Roy