ListBox: Remover nomes repetidos

Delphi

29/06/2006

Preciso retirar nomes repetidos de um listbox por exemplo:

Maria
Carlos
Maria
João
Maria
Maria
Carlos

removendo ficaria:

Maria
Carlos
João


Delphitotal

Delphitotal

Curtidas 0

Respostas

Delphitotal

Delphitotal

29/06/2006

up ... :(


GOSTEI 0
Massuda

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

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

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???


GOSTEI 0
Delphitotal

Delphitotal

29/06/2006

Massuda, Marco Salles agradeço pela ajuda ...

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

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

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 .


GOSTEI 0
POSTAR