Delphi中的列表框搜索过滤器

时间:2014-04-19 09:46:01

标签: delphi listbox delphi-xe4

在我尝试在列表框中搜索过滤器时,我遇到了一个问题。实际上我想选择与TEdit控件中的文本匹配的所有项目。如果匹配多个项目,则应选择多个项目。

顺便说一句,我已经将multiselect属性选为True。

这是我的代码:

procedure TForm1.Button3Click(Sender: TObject);
var
  I: Integer;
begin
  if OpenDialog1.Execute  then
    for I := 0 to OpenDialog1.Files.Count - 1 do
       ListBox1.Items.Add(ExtractFileName(OpenDialog1.Files.Strings[i]));
end;

搜索过滤器代码:

procedure TForm1.Edit1Change(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to ListBox1.Items.Count - 1 do
    ListBox1.Selected[i] := False;

  for I := 0 to ListBox1.Items.Count - 1 do
     if ListBox1.Items.Strings[i].Contains(Edit1.Text) then
        ListBox1.Selected[i] := True;
end;

此代码很有效但问题是当我无法搜索忽略案例时。意味着搜索区分大小写,我需要使其不区分大小写。

1 个答案:

答案 0 :(得分:1)

使用TLama发布的代码解决了问题。谢谢他。

以下是要修改的代码:

uses
  System.StrUtils;

procedure TForm1.Edit1Change(Sender: TObject);
var
  I: Integer;
begin
  ListBox1.Items.BeginUpdate;
  try
    for I := 0 to ListBox1.Items.Count - 1 do
      ListBox1.Selected[I] := ContainsText(ListBox1.Items[I], Edit1.Text);
  finally
    ListBox1.Items.EndUpdate;
  end;
end;