1

Hi i am having a problem with incremental search in delphi.

I Have looked at this http://delphi.about.com/od/vclusing/a/lb_incremental.htm But this doesn't work in firemonkey so i came up with this :

  for I := 0 to lstbxMapList.Items.Count-1 do
  begin
    if lstbxMapList.Items[i] = edtSearch.Text then
    begin
      lstbxMapList.ItemByIndex(i).Visible := True;
    end;

    if lstbxMapList.Items[I] <> edtSearch.Text then
    begin
      lstbxMapList.ItemByIndex(i).Visible := False;
    end;
  end;

When i use this the listbox is just blank.

4

2 に答える 2

3

You're hiding every item that doesn't exactly match edtSearch.Text. Try this instead (tested in XE3):

// Add StrUtils to your uses clause for `StartsText`
uses
  StrUtils;

procedure TForm1.edtSearchChange(Sender: TObject);
var
  i: Integer;
  NewIndex: Integer;
begin
  NewIndex := -1;
  for i := 0 to lstBxMapList.Items.Count - 1 do
    if StartsText(Edit1.Text, lstBxMapList.Items[i]) then
    begin
      NewIndex := i;
      Break;
    end;
  // Set to matching index if found, or -1 if not
  lstBxMapList.ItemIndex := NewIndex;
end;
于 2013-03-13T19:03:26.883 に答える
0

Kensの回答に続いて、質問に従ってアイテムを非表示にする場合は、Visibleプロパティを設定するだけですが、ifステートメントの式はブール値を返し、Visibleはブール値プロパティであるため、物事を大幅に簡略化できることに注意してください。また、アイテムテキスト内の任意の場所の文字列と一致するContainsTextも使用したことにも注意してください。

procedure TForm1.edtSearchChange(Sender: TObject);
var
  Item: TListBoxItem;
begin
  for Item in lstbxMapList.ListItems do
    Item.Visible := ContainsText(Item.Text.ToLower, Edit1.Text.ToLower);
end;
于 2013-03-14T22:01:59.680 に答える