Ir al contenido


Foto

Saber si existe un índice de una Lista


  • Por favor identifícate para responder
4 respuestas en este tema

#1 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 24 marzo 2017 - 07:23

Hola!, yo tengo un TObjectList de TImage, y a través de un listview voy seleccionando la imagen de dicha lista, ¿cómo puedo saber si en la lista existe el índice [1] por dar un ejemplo y evitar el error de Argument out of range?.

 

Fleon xD


  • 0

#2 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 24 marzo 2017 - 08:36

Podes revisar la propiedad Count. La lista la podes ver como un array, que va creciendo dinamicamente si es necesario. Osea que todas las posiciones son contiguas, no hay "huecos". La lista va a tener elementos desde su posicion 0 hasta Count - 1. Esto significa que el indice es 0-based, es decir, inicia en 0


  • 1

#3 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 25 marzo 2017 - 08:22

Gracias por responder, entiendo lo que comentas, pero no es lo que busco, me explico, tengo un listview, la misma contiene 5 items fijos 0..4, al hacer doble click en cada una de ellas le da la opción al usuario de agregar una imagen, la cual se agrega a una lista (TObjectList<Timage>), en el evento onClick de los items muestra la imagen de la lista en un TImage, hasta aquí todo bien, el problema radica es que no todos los items del listview tiene una imagen asignada en el ObjectList, cuando el usuario da click en uno de los items del listview que no contiene imagenes en la lista, digamos que su índice es 3 pero en el ObjectList sólo llega hasta el 2 pues ahí me aparece el error que mencioné anteriormente, por eso quiero saber cómo determinar si existe ese índice, tengo lo siguiente:


delphi
  1. procedure TForm1.ListView1Click(Sender: TObject)
  2. begin
  3. if Fotos.Count > 0 then begin
  4. if lvFoto.Selected.Index <= Fotos.Count then
  5. imgFoto.Picture.Assign(Fotos.Items[lvFoto.Selected.Index].Picture.Graphic)
  6. else imgFoto.Picture.Assign(nil);
  7. end;
  8. end;

Pero igual me lanza el error de argumento fuera de rango.

 

Fleon xD


  • 0

#4 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 25 marzo 2017 - 08:54

Entonces la lista no es lo más cómodo de trabajar. Si sabes de antemano el número de imágenes lo más práctico es usar un array estático
  • 0

#5 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 25 marzo 2017 - 08:54

Me respondo, era más sencillo de lo esperado:


delphi
  1. begin
  2. if (lvFoto.Selected.Index < 0) or (lvFoto.Selected.Index >= Fotos.Count) then
  3. imgFoto.Picture.Assign(nil)
  4. else imgFoto.Picture.Assign(Fotos.Items[lvFoto.Selected.Index].Picture.Graphic);
  5. end;

Fleon xD


  • 0




IP.Board spam blocked by CleanTalk.