使用编辑框过滤列表框
Filtering a Listbox using an Edit box
我正在尝试使用编辑框过滤 Delphi 中的列表框,但它不起作用。这是我基于编辑框的 OnChange 事件的代码。
procedure TReportDlgForm.FilterEditOnChange(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], FilterEdit.Text);
finally
ListBox1.Items.EndUpdate;
end;
end;
我希望当我在编辑框中键入内容时,列表框项目会被过滤。
您必须将列表框中的值保存在某个变量中,并在该变量中进行搜索,而不是在列表框中的项目中进行搜索!在 ListBox 中,我们只会显示搜索结果。
type
TForm1 = class(TForm)
Edit1: TEdit;
ListBox1: TListBox;
procedure Edit1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
FList: TStringList;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses
System.StrUtils;
{$R *.dfm}
procedure TForm1.Edit1Change(Sender: TObject);
var
I: Integer;
S: String;
begin
ListBox1.Items.BeginUpdate;
try
ListBox1.Clear;
if Edit1.GetTextLen > 0 then begin
S := Edit1.Text;
for I := 0 to FList.Count - 1 do begin
if ContainsText(FList[I], S) then
ListBox1.Items.Add(FList[I]);
end;
end;
finally
ListBox1.Items.EndUpdate;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FList := TStringList.Create;
FList.Assign(ListBox1.Items);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FList.Free;
end;
我正在尝试使用编辑框过滤 Delphi 中的列表框,但它不起作用。这是我基于编辑框的 OnChange 事件的代码。
procedure TReportDlgForm.FilterEditOnChange(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], FilterEdit.Text);
finally
ListBox1.Items.EndUpdate;
end;
end;
我希望当我在编辑框中键入内容时,列表框项目会被过滤。
您必须将列表框中的值保存在某个变量中,并在该变量中进行搜索,而不是在列表框中的项目中进行搜索!在 ListBox 中,我们只会显示搜索结果。
type
TForm1 = class(TForm)
Edit1: TEdit;
ListBox1: TListBox;
procedure Edit1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
FList: TStringList;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses
System.StrUtils;
{$R *.dfm}
procedure TForm1.Edit1Change(Sender: TObject);
var
I: Integer;
S: String;
begin
ListBox1.Items.BeginUpdate;
try
ListBox1.Clear;
if Edit1.GetTextLen > 0 then begin
S := Edit1.Text;
for I := 0 to FList.Count - 1 do begin
if ContainsText(FList[I], S) then
ListBox1.Items.Add(FList[I]);
end;
end;
finally
ListBox1.Items.EndUpdate;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FList := TStringList.Create;
FList.Assign(ListBox1.Items);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FList.Free;
end;