我有一个适用于 Android 和 Windows 平台的 Delphi FMX 项目,我需要在其中有一个搜索框。搜索框必须有一个搜索字符串输入选项,当输入字符时,该选项会自动过滤数据并仅在下拉列表中显示与搜索字符串匹配的数据。单击下拉列表中的选定条目将导致搜索字段记录选定的字符串。
我通过在 TComboBox 中添加一个由 TSearchBox 组成的搜索框来解决这个问题
TComboBox 与数据绑定到 TQuery。我根据TSearchBox中输入的字符串过滤TQuery中的数据,并显示TComboBox的下拉菜单。 问题是,仅当我再次缩小并展开下拉菜单时,TComboBox 中的列表才会刷新,并且当我单击列表中的选定项目时,不会执行 ComboBox1Click 过程。 我的代码是这样的:
TfrmMain.SearchBox1Typing(Sender: TObject);
begin
ComboBox1.BeginUpdate;
dmCC.FDQuery1.Filtered := False;
dmCC.FDQuery1.Filter := '';
if SearchBox1.Text <> '' then
begin
dmCC.FDQuery1.OnFilterRecord := nil;
dmCC.FDQuery1.Filter := 'UPPER(name) LIKE ''/' + UpperCase(SearchBox1.Text) + '%'' ESCAPE ''/''';
dmCC.FDQuery1.Filtered := True;
end;
ComboBox1.EndUpdate;
// shrink and expand the drop-down menu to refresh data
ComboBox1.DropDown;
if NOT ComboBox1.DroppedDown then
begin
ComboBox1.DropDown;
end;
end;
procedure TfrmMain.ComboBox1Click(Sender: TObject);
begin
SearchBox1.Text := ComboBox1.Text;
end;
有人知道如何实现这样的搜索框吗?
我5年前在我的博客中写了这篇文章。 希望能帮到你