1

嗨,我在 delphi 中遇到增量搜索问题。

我看过这个http://delphi.about.com/od/vclusing/a/lb_incremental.htm 但这在firemonkey中不起作用所以我想出了这个:

  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;

当我使用它时,列表框只是空白。

4

2 回答 2

3

您隐藏了所有不完全匹配的项目edtSearch.Text。试试这个(在 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 回答