Jak wyszukać jakiś tekst w LISTBOXIE ???
Jak wyszukać jakiś tekst w LISTBOXIE ???
W jakim sensie??
do edit1.text wpisuję to, co chcę wyszukać w listboxie .... Potem klikam na buttona...
Najprościej tak
Listbox1.itemindex:=ListBox1.Items.IndexOf(edit1.text);
Albo jeżelimamy dwa komponenty TListBox i TEdit o nazwach ListBox i Pole_Tekstowe, musimy oprogramować zdarzenie OnKeyPress komponentu TEdit.
OTO KOD:
procedure TForm1.Pole_TekstoweKeyPress(Sender: TObject; var Key: Char);
var
I : Integer;
begin
for I := 0 to ListBox.Count-1 do
begin
if ListBox.Items[I] = Pole_tekstowe.Text then
Application.ProcessMessages;
listbox.Selected[I] := True;
end;
end;
Hmm. Sposób ten wymaga dokładnego wpisania tego co jest w listboxie. Był też taki kod (niestety nie pamiętam), że można było wpisać część szukanego słowa, i jeżeli listbox był ułożony alfabetycznie zaznaczał 1 słowo z danym ciągiem znaków.
Czy ktoś z was to zna?
Widziałem to na forum...
Poszukaj, a znajdziesz...
i jest na pewno w faq i kodach źródłowych.
[code]procedure TForm1.Edit1Change(Sender: TObject);
var
i:integer;
szukana,linie :string;
begin
ListBox1.ItemIndex := 0;
for i := 0 to ListBox1.Items.Count-1 do
begin
szukana := Edit1.text;
linie := Copy(ListBox1.Items.Strings[i], 1, Length(Edit1.Text));
if linie = szukana then
begin
ListBox1.ItemIndex := i;
break;
end
end;
end; [/code]
Albo tak
for I := 0 to ListBox1.items.Count-1 do
begin
if pos(UpperCase(edit1.Text),UpperCase(ListBox1.Items[i]))>0 then
listbox1.Selected[I] := True else
listbox1.Selected[I] := False;
end;
end;
Jak tak optymalizujemy kod, to może coś takiego
for I := 0 to ListBox1.items.Count-1 do
listbox1.Selected[I] := pos(UpperCase(edit1.Text),UpperCase(ListBox1.Items[i]))>0;
;-)
Jeśli ma być dokładnie to powinno być AnsiUpperCase a nie UpperCase, bo nie zmieni znaków diakrytycznych.
W źródełkach SDAPa jest takie coś (tzw. J w WinAMPie) wystarczy ściągnąć i looknąć.