como perquisar uma string dentro de um ListBox

Delphi

29/09/2005

E ai galera beleza ?

Gostaria de saber como pesquisar uma string dentro de um ListBox , entao selecionar a linha que sta essa string

Tipo : Listbox.itemIndex := ´a linha que esta a string´

se tiver alguma alma bondosa por perto pra me dar essa dica eu agradeço !!!!

um abraço a todos !!!!


Fabiano Góes

Fabiano Góes

Curtidas 0

Respostas

Michael

Michael

29/09/2005

Olá!

A classe [b:5d8e98fe56]TStrings[/b:5d8e98fe56], responsável pelo armazenamento dos dados em diversos componentes da VCL (ComboBox, ListBox, Memo, etc), provê o método [b:5d8e98fe56]IndexOf[/b:5d8e98fe56], que retorna o índice da string informada dentro da lista de dados, ou -1 se nada for encontrado.

 ListBox1.ItemIndex := ListBox1.Items.IndexOf(´Minha string´)


[]´s


GOSTEI 0
Bruno Belchior

Bruno Belchior

29/09/2005

atenção que esse código do Michael só retornará a string se no ListBox estiver obrigatóriamente igual a string passa no IndexOf... caso ela seja uma substring da mesma ela não a encontrará, consequentemente retornando -1...


GOSTEI 0
Michael

Michael

29/09/2005

Correto Bruno. Esqueci de mencionar isso.


GOSTEI 0
Fabiano Góes

Fabiano Góes

29/09/2005

Michael obrigado pela atenção ,

não é querendo ser chato não mais não está funcionando,
olha quando o form e aberto o lisxtbox recebe um arquivo texto, e o foco vai para a primeira linha (listbox.ItemIndex := 0)

ai quando tento fazer apesquisa:
      ListBox1.ItemIndex  :=  ListBox1.Items.IndexOf(edit1.text);


´obs: estou pesquisando uma string que estou vendo ela no lisxtbox´

então o listboxbox.itemindex fica igual a -1

mais eu sei que a string existe porque estou vendo ela no listbox.


GOSTEI 0
Steve_narancic

Steve_narancic

29/09/2005

tente o seguinte

 ListBox1.ItemIndex := Listobox1.Perform(LB_SELECTSTRING, 0, LongInt(PChar(edit1.text)));



GOSTEI 0
Fabiano Góes

Fabiano Góes

29/09/2005

Bruno então acho que é isso que está acontecendo,

pois na verdade estou pesquisando uma subString( desculpe michael )

tem como solucionar isso ???


GOSTEI 0
Fabiano Góes

Fabiano Góes

29/09/2005

Pessoal valeu ai pela dica,

Valeu Michael , Bruno, steve_narancic.

Está funcionando beleza, mais tem um porem :

e sem tiver mais de uma string(pesquisada) iguam ???? :?:

tem como fazer um pesquisa daquele ponto pra frente ??

Tipo (F3) Procure Novamente ;


GOSTEI 0
Steve_narancic

Steve_narancic

29/09/2005

grava o itemindex em uma variavel e quando pressionar o F3, faz a procura novamente e se o itemindex for menor que o valor da variavel manda fazer a procura novamente.


GOSTEI 0
Fabiano Góes

Fabiano Góes

29/09/2005

steve_narancic , desculpe eu estar sendo chato, mais estou tentando e não estou conseguindo.

será que você poderia me passar um código de exemplo ?

Por favor .....


GOSTEI 0
Michael

Michael

29/09/2005

Olá colega!

Vc pode criar uma função para isso então. Veja:

function IndexOfEx(StringList : TStringList; const Text : string; StartIndex : integer = -1) : Integer;
var
  I : Integer;
begin

  Result := -1;

  for I := StartIndex + 1 to StringList.Count - 1 do
    if Pos(Text, StringList[I]) > 0 then
    begin
      Result := I;
      break;
    end;

end;


Criei esta função agora, portanto, não sei se vai funcionar. Mas teoricamente deve ocorrer tudo bem.

Se vc chamá-la com apenas dois parâmetros, ela vai pesquisar desde o início da lista. Para simular um F3, vc deve informar no 3º parâmetro a posição atual da lista.

[]´s


GOSTEI 0
Fabiano Góes

Fabiano Góes

29/09/2005

Valeu Michael sua função está funcionando perfeitamente e me resolveu um grande problema.

um grande abraço !!!!


GOSTEI 0
POSTAR