Foros Club Delphi

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

annieruci 25-04-2011 17:25:45

Borrar varios elementos de un TreeView
 
Hola a todos tengo el siguiente problema:
Tengo dos treeview y 2 botones, lo que me hace falta hacer es seleccionar un hijo del treview1 y que cuando doy al boton se pasen para el treview2, para 1 solo elementos todo muy feliz, pero si me seleccionan mas de uno por ejemplo 2 elementos me da que se va de rango.
Código Delphi [-]
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  cant: Integer;
  i: Integer;
begin
Seleccionados := TStringList.Create;
cant := TreeView1.SelectionCount;
for i := 0 to TreeView1.Items.Count-1 do
   begin
    if TreeView1.Items[i].Selected then
     begin
      TreeView2.Items.AddChild( nil, TreeView1.Items[i].Text);
      TreeView1.Items[i].Destroy;
      Dec(cant);
     end;
     if cant = 0 then
       Break;
    end;
end;
Aqui esta todo el codigo el error ocurre a partir de que borro los elementos del treeview1, si no lo borro me los copia bien y todo pero si no me da error de rango o me borra el que no es.

Saludos

Caro 25-04-2011 17:47:33

Hola annieruci, prueba de esta forma:

Código Delphi [-]
    for i:= TreeView1.SelectionCount-1 downto 0 do
     begin
      TreeView2.Items.AddChild( nil, TreeView1.Items[i].Text);
      TreeView1.Selections[i].Delete;
     end;

No necesitas recorrer todo el treview para encontrar los seleccionados.

Saluditos

annieruci 25-04-2011 18:02:57

nada
 
ya habia probado esa solucion pero no me resulta, hay algun problema en el oreden en que selecciono los elementos, si los selecciono de arriba hacia abajo y el for esta invertido me da error, si selecciono dos consecutivos me da error, hay pasa algo extraño que me gustaria saber que es.

annieruci 25-04-2011 18:03:55

una posible solucion seria cambiarle el padre al treenode seleccionado
alguien sabe como hacerlo???

Caro 25-04-2011 18:16:41

Hola de nuevo, ¿que error te da? debes comenzar a eliminar desde el ultimo que has seleccionado, para que no te de error de indices que no existen porque ya se ha eliminado.

El problema que veo en el codigo que he puesto, es esta linea:

Código Delphi [-]
TreeView2.Items.AddChild( nil, TreeView1.Items[i].Text);

se debe cambiar por esta:

Código Delphi [-]
TreeView2.Items.AddChild( nil, TreeView1.Selections[i].Text);

ademas de controlar cuando se quiere borrar un item que tiene subitems.

Saluditos

annieruci 25-04-2011 18:46:20

Gracias por dedicarme un tiempo pero si cambio esa linea me da este error
y no hace nada no mueve ni uno aunque sea:
List index out of bounds(1).

Caro 25-04-2011 18:55:30

Cita:

Empezado por annieruci (Mensaje 397947)
.............si cambio esa linea me da este error
y no hace nada no mueve ni uno aunque sea:
List index out of bounds(1).

Que raro :confused:, acabo de probarlo y si funciona y no da error, puedes poner el codigo con el que estas probando ahora o subir el proyecto solo con esta parte para poder revisarlo mejor.

Saluditos

annieruci 25-04-2011 19:16:22

actualmente lo he probado todo, ya no se que mas me probar,

Código Delphi [-]
for i:= TreeView1.SelectionCount-1 downto 0 do
     begin
      TreeView2.Items.AddChild( nil, TreeView1.Items[i].Text);
      TreeView1.Selections[i].Delete;
     end;
me mueve el primer elemento siempre, solo el primero aunque marque el 4 me mueve el 1.

Código Delphi [-]
for i := 0 to TreeView1.Items.Count-1 do
   begin
    if TreeView1.Items[i].Selected then
     begin
      TreeView2.Items.AddChild( nil, TreeView1.Items[i].Text);
      TreeView1.Items[i].Delete;
      Dec(cant);
     end;

este es el codigo que estoy probando pero repito que cuando marco dos consecutivos me da el error parece que al borrar una posicion se marea, estoy usando delphi 6 y conexion a Oracle, son dos treeview y un boton que mueve los datos de un lado a otro solo eso,

Saludos

Caro 25-04-2011 19:36:22

1 Archivos Adjunto(s)
En el primer codigo, no has cambiado la linea que te dije, por eso siempre se copia el primero. Te adjunto un ejemplo.

Si tienes dudas pregunta.

Saluditos

Caro 25-04-2011 19:41:45

No te olvides utilizar etiquetas [ delphi] tu codigo [ /delphi] (sin el espacio), para que se vea mejor tu codigo o también lo puedes hacer desde el mismo editor.

Saluditos

annieruci 25-04-2011 20:18:01

Gracias por la ayuda, ya con ese ejemplo que has mandado lo entendi todo, y lo mejor de todo es que no me da ningun error, gracias por la yuda y disculpa las molestias.

Saludos y Gracias


La franja horaria es GMT +2. Ahora son las 13:05:22.

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