DouglasP 1 Denunciar post Postado Outubro 2, 2011 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. Compartilhar este post Link para o post Compartilhar em outros sites
fernando.fxsoft 0 Denunciar post Postado Outubro 2, 2011 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 I: Integer; J: Integer; begin J := ListBox1.Items.Count; I := 0; while I < J do begin if (ListBox1.Items = 'Linha 2') then 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, Compartilhar este post Link para o post Compartilhar em outros sites
DouglasP 1 Denunciar post Postado Outubro 3, 2011 Boa noite, resolvi de outro metodo com uma string boolean e checando se ela é true e deleta apos terminar o laço hehe. Compartilhar este post Link para o post Compartilhar em outros sites