Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-04-2010
CaosDeath CaosDeath is offline
Registrado
 
Registrado: abr 2010
Posts: 4
Poder: 0
CaosDeath Va por buen camino
Post Borrar dato de arreglo?

Tengo un problema tengo datos metidos en arreglo (array) y se muestran en un listbox pero no se como borrar un dato seleccionado en el listbox del arreglo solo puedo quitarlo del listbox pero sigue en el arreglo alguien que me diga como le ago?

o aunque sea como guardar los datos de un listbox en un arreglo nuevo?
Responder Con Cita
  #2  
Antiguo 06-04-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola CaosDeath.

Si tenes declarado un arreglo ej: v: array[1..n] of string y deseas borrar un dato correlacionado con el del ListBox, podrías obtener el índice del dato actualmente seleccionado con: ListBox1.ItemIndex y eliminar el contenido de esa posición del array.
Pero no se puede eliminar dicha posición en sí misma puesto que es una estructura estática. Es decir que te quedará un lugar vacío donde elimines un dato.

Me parece mucho más apropiado usar TstringList en lugar de un array, ya que podrás eliminar items de forma más sencilla.

Un código simple de ejemplo: (agregá a un Form 2 TListBox y un Tbutton )

Implementation
var
StList: TstringList;
...
Código:
procedure TForm1.FormCreate(Sender: TObject);
begin
  StList:= TStringList.Create;
  with StList do
  begin
     Add('UNO');
     Add('DOS');
     Add('TRES');
     Add('CUATRO')
  end;
  ListBox1.Items:= StList;   // Items de StringList a ListBox
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  ix: Integer;
begin
   ix:= ListBox1.ItemIndex;     // Obtener indice de el item actual
   ListBox1.Items.Delete(ix);   // Borrar de ListBox
   StList.Delete(ix);                // Borrar de StringList
   ListBox2.Items:= StList;
end;
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 06-04-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Como dice ecfisa, al ser una estructura estática no tenés forma de eliminar datos.
Lo que se suele hacer es, en el caso de que sea un arreglo de strings, poner un string vacío en la posición que querés borrar - Arreglo[i]:=''; - o ponerle un identificador determinado - Array[i]:='%&VACIO&%';
Si es de números (enteros o decimales) suele ponerse un número teóricamente inutilizable - Array[i]:=-99999; o Array[i]:=-865.14563; - para entender que el dato que está ahí es obsoleto.
Esos identificadores usualmente se colocan como constantes para utilizarlos eficazmente.
Código Delphi [-]
const
  StrVacio = '%&VACIO&%';
  IntVacio = -99999;
  RealVacio = -865.14563;
Al leer el arreglo, verificás si el dato en esa posicion no es un vacío
Código Delphi [-]
if (ArStr[i] <> StrVacio) then
  ......
if (ArInt[i] <> IntVacio) then
  ......
if (ArReal[i] <> RealVacio) then
  ......
y hacés lo que necesitás.
Saludos.
Responder Con Cita
  #4  
Antiguo 07-04-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Cita:
Empezado por CaosDeath Ver Mensaje
Tengo un problema tengo datos metidos en arreglo (array) y se muestran en un listbox pero no se como borrar un dato seleccionado en el listbox del arreglo solo puedo quitarlo del listbox pero sigue en el arreglo alguien que me diga como le ago?

o aunque sea como guardar los datos de un listbox en un arreglo nuevo?
Hola CaosDeath, borrar directamente como te han indicado no se puede, lo que si podrías hacer, es recorrer los elementos a la izquierda sin tomar en cuenta el elemento a borrar, así lo sobreescribes y tienes una relación entre los indices de tu ListBox y tu Array, ejemplo:

Código Delphi [-]
var
 band : Boolean;
 ind, i : Integer;
begin
 band := False;
 ind := -1;
 PosABorrar := ListBox.ItemIndex;
 While (ind<=High(ArrayCadenas)) and (Not band) do
  begin
   if ind=PosABorrar then
    for i:=ind to High(ArrayCadenas) do
     begin
       if ithen
        ArrayCadenas[i] := ArrayCadenas[i+1]
       else
        ArrayCadenas[i] := '';
       band := True;
     end;
   inc(ind);
  end;

Ahora, si quieres hacer desaparecer el ultimo elemento que tiene como valor '', puedes utilizar un array dinamico, la primera ves tendra todos los elementos que le indiques, despues haciendo primero lo que esta en el codigo de arriba y para eliminar la ultima posición solo debes redimensionarlo con la función SetLength, no te olvides que el indice con el que empieza un array dinamico es 0.

Código Delphi [-]
  //Para redimensionar a menos un elemento
  SetLength(Cadena, High(ArrayCadenas));

Pero, para que te evites hacer todo eso, también te recomiendo utilizar un StringList.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.

Última edición por Caro fecha: 07-04-2010 a las 15:56:52.
Responder Con Cita
  #5  
Antiguo 07-04-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Otra cosita, al redimensionar y aplicar nuevamente el SetLength, no se pierden los datos que ya tenías antes.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Imprimir dato en columnas diferentes según valor del dato saldanaluis Impresión 2 06-09-2007 00:17:32
Borrar lineas detalle al borrar registro maestro akinom38 Conexión con bases de datos 3 11-01-2006 10:38:07
borrar los campos de un DBGrid sin borrar los titulos de las columnas Torreblanca OOP 2 02-08-2005 00:12:52
Borrar un dato determinado de un Array. alfredosg19 Varios 5 24-03-2005 10:05:17
Arreglo de componentes jzginez OOP 2 13-03-2004 23:02:21


La franja horaria es GMT +2. Ahora son las 09:27:26.


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
Copyright 1996-2007 Club Delphi