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

Delphi11中TSearchBox的OnKeyUp事件无法捕获ENTER键如何解决

问题产生原因

Delphi 11 对 TSearchBox 的原生事件处理逻辑做了调整,控件内部默认拦截了 ENTER 键的按下/抬起事件,用于触发内置的搜索提交逻辑,所以 ENTER 键的 KeyUp 事件不会再冒泡到用户自定义的 OnKeyUp 回调中,才会出现其他按键可正常捕获、唯独回车失效的情况。

可行解决办法

  • 方法1:改用 OnSearch 事件
    Delphi 11 为 TSearchBox 专门新增了 OnSearch 事件,用户按下 ENTER 键或者点击控件自带的搜索图标时都会触发该事件,直接把原有的 DoSomeThing 逻辑写到 OnSearch 事件回调中即可,是官方推荐的最优解法。
    示例代码:
    procedure TForm1.SearchBox1Search(Sender: TObject);
    begin
      DoSomeThing;
    end;
    
  • 方法2:在 OnKeyDown 事件中捕获回车
    如果需要保留原有事件处理逻辑,可以优先在 OnKeyDown 事件中判断回车键,该事件的优先级高于控件内部的 ENTER 拦截逻辑,可以正常捕获到键值 13:
    示例代码:
    procedure TForm1.SearchBox1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    begin
      if Key = 13 then
      begin
        DoSomeThing;
        Key := 0; // 添加该行可阻止控件触发默认的 OnSearch 逻辑
      end;
    end;
    
  • 方法3:通过窗体键盘预处理捕获
    如需全局管控该类控件的回车事件,可先将窗体的 KeyPreview 属性设置为 True,再在窗体的 OnKeyUp 事件中判断当前焦点是否在 TSearchBox 上,再执行对应逻辑:
    示例代码:
    procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    begin
      if (ActiveControl is TSearchBox) and (Key = 13) then
      begin
        DoSomeThing;
        Key := 0;
      end;
    end;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:36:01