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
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
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
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:
procedure TForm1.ListView1Click(Sender: TObject) begin if Fotos.Count > 0 then begin if lvFoto.Selected.Index <= Fotos.Count then imgFoto.Picture.Assign(Fotos.Items[lvFoto.Selected.Index].Picture.Graphic) else imgFoto.Picture.Assign(nil); end; end;
Pero igual me lanza el error de argumento fuera de rango.
Fleon xD
Escrito 25 marzo 2017 - 08:54
Escrito 25 marzo 2017 - 08:54
Me respondo, era más sencillo de lo esperado:
begin if (lvFoto.Selected.Index < 0) or (lvFoto.Selected.Index >= Fotos.Count) then imgFoto.Picture.Assign(nil) else imgFoto.Picture.Assign(Fotos.Items[lvFoto.Selected.Index].Picture.Graphic); end;
Fleon xD