Ayuda con problemas de ListView al hacer un Clear y errores de excepciones try-except

Hola cestrada, quede muy a gusto con tu respuesta anterior y ahora no se me ocurre otra cosa que consultar contigo cada problema que se me presenta, ahora me sucede lo siguiente...
Tengo un ListView que cuando le hago un Clear, a veces me da una excepción de tipo EListError con el mensaje Index out of Bounds (Index) donde index es el número de la línea (empezando por cero) que tenía marcada cuando hice el Clear.
En primer lugar: No se porque lo hace. ¿Sabes tú porqué?
En segundo lugar y lo que más me molesta: Tengo la instrucción que me provoca el error dentor de una sentencia TRY-EXCEPT, pero nunca me ejecuta lo que hay en el EXCEPT y peor aún, si pongo código debajo de la sentencia que provoca el error, se ejecuta todo a pesar de que ocurra la excepción.
Si tienes respuesta para mí, te agradecería que me la enviaras lo más rápido posible pues lo necesito para la discusión de mi tesis. Gracias.

1 Respuesta

Respuesta
Antes que nada, el bloque de manejo de excepciones se ejecuta solamente fuera de la VCL de Delphi. En otras palabras, para que lo que este dentro del Except se ejecute y Try realmente atrape el error, debes correrlo desde Ejecutar (o sea, correr el .exe). Prueba primero eso.
Bueno, TListView, igual que TTreeView una instancia de TPersistent y se compone de otros objetos: TListItems. Me gustaría que me confirmaras que utilizas ListView. Items. Clear cuando te marca el error. Y es que parece que todo lo tienes bien.
Mira, este código lo tome de la ayuda de Delphi. Una vez creado, probé con Clear y Delete y no marco error nunca:
procedure TForm1.FormCreate(Sender: TObject);
const
Names: array[0..5, 0..1] of ShortString = (
('Rubble', 'Barney'),
('Michael', 'Johnson'),
('Bunny', 'Bugs'),
('Silver', 'HiHo'),
('Simpson', 'Bart'),
('Squirrel', 'Rockey')
);
var
I: integer;
NewColumn: TListColumn;
ListItem: TListItem;
ListView: TListView;
begin
ListView := TListView.Create(Self);
with ListView do
begin
Parent := Self;
Align := alClient;
ViewStyle := vsReport;
NewColumn := Columns.Add;
NewColumn.Caption := 'Last';
NewColumn := Columns.Add;
NewColumn.Caption := 'First';
for I := 0 to High(Names) do
begin
ListItem := Items.Add;
ListItem.Caption := Names[0];
ListItem.SubItems.Add(Names[1]);
end;
IF MessageDlg('Welcome to my Object Pascal application. Exit now?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
ListView.Items.Clear;
end;
end;
Revísalo, estoy seguro ha de ser cualquier cosilla que se nos paso.
Saludos!
P.D. Es recomendable que posterior a la excepción pongas un exit para abortar el procedimiento.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas