在我尝试在列表框中搜索过滤器时,我遇到了一个问题。实际上我想选择与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;
此代码很有效但问题是当我无法搜索忽略案例时。意味着搜索区分大小写,我需要使其不区分大小写。
答案 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;