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

为何子窗体中VK_RETURN无法传递至OnKeyPress事件且自动转为Tab?

问题解答

TForm本身没有直接的“将Enter视为Tab”的开关选项,但你遇到的这种行为是Delphi默认的按键处理逻辑导致的,具体解决方法如下:

  • 问题根源:当窗体的KeyPreview属性为默认的False时,焦点所在控件(比如子窗体的TEdit)会优先接收按键事件。如果控件没有处理Enter键(TEdit默认不处理该按键),按键会传递给窗体,而Delphi窗体的默认逻辑会把Enter键当作Tab键来切换控件焦点,此时窗体和控件的OnKeyPress事件都不会被触发——因为按键已经被默认逻辑消耗了。

  • 解决方法:

    1. 开启子窗体的KeyPreview属性:将子窗体的KeyPreview设为True,然后在窗体的OnKeyPress事件中添加判断:
      if Key = #13 then
      begin
        // 调用你的自定义过程
        YourProcedure;
        // 阻止默认的Tab切换行为
        Key := #0;
      end;
      
    2. 直接在子窗体的TEdit控件中处理:在子窗体TEdit的OnKeyPress事件中直接处理Enter键:
      if Key = #13 then
      begin
        YourProcedure;
        Key := #0;
      end;
      

两种方法都能让Enter键触发你的自定义过程,同时阻止默认的Tab切换行为。

内容的提问来源于stack exchange,提问作者U.C. Luber

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:15:06