Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Borrar items de un TreeView (https://www.clubdelphi.com/foros/showthread.php?t=1160)

ibarrols 05-06-2003 15:49:28

Borrar items de un TreeView
 
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;

Cita:

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í:
Código:

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

Cita:

Posteado originalmente por delphi.com.ar
Código:

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.

Cita:

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

Cita:

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

Cita:

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


La franja horaria es GMT +2. Ahora son las 12:33:49.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi