Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite,
Queria uma ajuda que está me tirando do serio, tenho o seguinte código que quando executado da o erro de list index out of bounds;
for i:=0 to ListBox1.Items.Count-1 do begin
if (ListBox1.Items.Strings[i] = 'Heuristico,'+ListView1.Selected.SubItems[0]) then begin
ListBox1.Items.Delete(i);
MessageBox(GetForegroundWindow(), pchar('Item deletado com sucesso!), 'Informação', MB_ICONINFORMATION + MB_OK);
end;
end;
Porem não vejo erro nenhum...
Alguem saberia me ajudar?
grato.
Boa noite,
resolvi de outro metodo com uma string boolean e checando se ela é true e deleta apos terminar o laço hehe.
Suponha que seu ListBox1 tenha 6 itens, quando você inicia o laço "for" ele contará de 0 até 5. Quando você deleta um item do ListBox1 ele teria que contar de 0 até 4, mas o seu "for" irá seguir até 5, que não existirá e irá gerar este erro. Se o ListBox1 não tiver itens duplicados é só você interromper o "for' com a instrução break logo após excluir o item, caso contrário tente usar um while, conforme o código abaixo.
Tente fazer com um while, fiz os testes aqui e funcionou:
procedure TForm1.Button1Click(Sender: TObject);
var
begin
begin
ListBox1.Items.Delete(i);
Application.MessageBox('Item deletado com sucesso!', 'Informação', MB_ICONINFORMATION + MB_OK);
Dec(J);
end;
Inc(I);
end;
end;
Um abraço,