Fórum ListBox: Remover nomes repetidos #324488

29/06/2006

0

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

Responder

Posts

29/06/2006

Delphitotal

up ... :(


Responder

Gostei + 0

29/06/2006

Massuda

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;
...



Responder

Gostei + 0

29/06/2006

Marco Salles

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;



Responder

Gostei + 0

29/06/2006

Delphitotal

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


Responder

Gostei + 0

29/06/2006

Delphitotal

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;



Responder

Gostei + 0

30/06/2006

Marco Salles

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


Responder

Gostei + 0

30/06/2006

Delphitotal

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 .


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar