You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi FMX安卓/Windows项目搜索框实现问题求助

Delphi FMX 跨平台搜索框实现方案

针对你遇到的两个问题,直接给出修正方案:

1. 解决ComboBox下拉列表刷新问题

你手动收缩展开的方式不够可靠,正确的做法是先关闭下拉列表,再重新打开,同时确保过滤后的数据集同步到ComboBox的绑定源:

修改SearchBox1Typing事件代码:

procedure TfrmMain.SearchBox1Typing(Sender: TObject);
begin
  ComboBox1.BeginUpdate;
  try
    dmCC.FDQuery1.Filtered := False;
    dmCC.FDQuery1.Filter := '';
    
    if SearchBox1.Text <> '' then
    begin
      dmCC.FDQuery1.OnFilterRecord := nil;
      // 处理LIKE查询的转义,避免特殊字符(如%、_)干扰匹配
      const EscapedText = StringReplace(UpperCase(SearchBox1.Text), '/', '//', [rfReplaceAll]);
      dmCC.FDQuery1.Filter := 'UPPER(name) LIKE ''/' + EscapedText + '%'' ESCAPE ''/''';
      dmCC.FDQuery1.Filtered := True;
    end;

    // 刷新绑定源(如果使用TBindSourceDB绑定数据集)
    if Assigned(dmCC.BindSourceDB1) then
      dmCC.BindSourceDB1.Refresh;

    // 先关闭下拉再重新展开,确保列表刷新
    ComboBox1.CloseUp;
    ComboBox1.DropDown;
  finally
    ComboBox1.EndUpdate;
  end;
end;

2. 解决ComboBox选项点击事件不触发问题

FMX的TComboBox点击下拉选项时,不会触发OnClick事件,该事件仅在点击ComboBox控件本身时生效。你需要改用OnCloseUp事件(选择选项后下拉列表关闭时触发):

  1. 在设计界面中,将ComboBox的OnCloseUp事件关联到处理方法
  2. 编写如下代码:
procedure TfrmMain.ComboBox1CloseUp(Sender: TObject);
begin
  // 确保选中有效选项后再赋值
  if ComboBox1.ItemIndex <> -1 then
    SearchBox1.Text := ComboBox1.Text;
end;

额外注意事项

  • 如果你没有使用绑定源,而是直接将ComboBox的Items与FDQuery关联,可能需要手动调用ComboBox1.Items.Clear和ComboBox1.Items.Add重新加载过滤后的数据集,但推荐使用绑定源(TBindSourceDB + TBindingsList)来自动同步数据,减少手动维护成本。
  • 测试安卓平台时,注意输入法弹出/收起对下拉列表显示的影响,可以适当调整ComboBox的位置或使用FMX的自适应布局。

内容的提问来源于stack exchange,提问作者sax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:03:10