ListBox: Remover nomes repetidos
Preciso retirar nomes repetidos de um listbox por exemplo:
Maria
Carlos
Maria
João
Maria
Maria
Carlos
removendo ficaria:
Maria
Carlos
João
Maria
Carlos
Maria
João
Maria
Maria
Carlos
removendo ficaria:
Maria
Carlos
João
Delphitotal
Curtidas 0
Respostas
Delphitotal
29/06/2006
up ... :(
GOSTEI 0
Massuda
29/06/2006
O jeito mais simples é evitar que o listbox contenha valores duplicados. Você pode testar isso quando estiver preenchendo/populando o listbox...
... // S é a string a ser inserida no listbox LB if LB.Items.IndexOf(S) < 0 then begin LB.Items.Add(S); end; ...
GOSTEI 0
Marco Salles
29/06/2006
pode ser que tenha algum método da vcl , eu não me recordo agora..
procedure TForm1.Button1Click(Sender: TObject); var i:integer; listanome:TStringList; begin i:=0; listanome:=TStringList.Create; for i:=1 to listBox1.Count-1 do begin if listanome.IndexOf(listbox1.Items.Strings[i]) < 0 Then listanome.Add(listbox1.Items.Strings[i]) end; listbox1.Clear; listbox1.Items.AddStrings(listanome); listanome.Free; end;
GOSTEI 0
Delphitotal
29/06/2006
Marco Salles,
cara eu fiz o teste e o seu código funcionou ... mais tem uma coisa..
eu mandei ele tirar os repetidos com o seu código ele tirou direitinho .. mais depois quando mandei tirar os repetidos novamente na lista ele foi excluindo os que não estavam repetidos..
teria como arrumar isso???
cara eu fiz o teste e o seu código funcionou ... mais tem uma coisa..
eu mandei ele tirar os repetidos com o seu código ele tirou direitinho .. mais depois quando mandei tirar os repetidos novamente na lista ele foi excluindo os que não estavam repetidos..
teria como arrumar isso???
GOSTEI 0
Delphitotal
29/06/2006
Massuda, Marco Salles agradeço pela ajuda ...
Consegui de outra maneira:
Para remover todos os repetidos da lista faça o seguinte:
Consegui de outra maneira:
procedure TForm1.RemoverRepetidos; var i, listIndex : integer; str : string; begin for i:=ListBox1.Items.Count - 1 downto 0 do begin str := ListBox1.Items.Strings[i]; listIndex := ListBox1.Items.IndexOf(str); if (listIndex <> -1) AND (listIndex <> i) then begin ListBox1.Items.Delete(listIndex); end; end; end;
Para remover todos os repetidos da lista faça o seguinte:
procedure TForm1.Button1Click(Sender: TObject); begin RemoverRepetidos; end;
GOSTEI 0
Marco Salles
29/06/2006
Marco Salles,
cara eu fiz o teste e o seu código funcionou ... mais tem uma coisa..
eu mandei ele tirar os repetidos com o seu código ele tirou direitinho .. mais depois quando mandei tirar os repetidos novamente na lista ele foi excluindo os que não estavam repetidos..
teria como arrumar isso???
erro de digitação
trocar
for i:=1 to listBox1.Count-1 do por for i:=0 to listBox1.Count-1 do
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
listanome:TStringList;
begin
i:=0;
listanome:=TStringList.Create;
[b:94fb21aae3]for i:=0 to listBox1.Count-1 do[/b:94fb21aae3] begin//***corrigido
if listanome.IndexOf(listbox1.Items.Strings[i]) < 0 Then
listanome.Add(listbox1.Items.Strings[i])
end;
listbox1.Clear;
listbox1.Items.AddStrings(listanome);
listanome.Free;
end;
mas de qualquer forma voce arranjou uma saida .. legal
GOSTEI 0
Delphitotal
29/06/2006
Marco Salles, realmente não tinha notado o erro de digitação ...
ótimo agora consegui varios exemplos incluindo o seu ..
vlw por tudo ..
agradeço pela ajuda .
ótimo agora consegui varios exemplos incluindo o seu ..
vlw por tudo ..
agradeço pela ajuda .
GOSTEI 0