4

经典的 VCL 问题......但是如何在FireMonkey中做同样的事情?

我有几个标准TControl谁可以专注...

例如,在某些情况下,TEdit如果我按下return key

我尝试了不同的方法,但没有成功(在 13 时用 9 替换键、keychar,...,将键事件转发到表单,...)

当然,因为它是 FMX,我想要一个适用于所有平台的解决方案......

如果可以避免

  • 浏览父母的 Children 财产,
  • 有不同的代码来处理不同的平台
  • 硬编码制表符序列
  • ...,会很棒的;o)
4

2 回答 2

10

您可以将以下代码放入表单的 OnKeyDown 事件中:

  if Key = vkReturn then begin
    Key := vkTab;
    KeyDown(Key, KeyChar, Shift);   
  end;

如果您只希望某些控件具有该行为,则必须在这些控件的 OnKeyDown 事件中调用此代码。

请注意,KeyDown 必须调用 TForm.KeyDown 才能使其工作。

(用 XE2 测试)

于 2012-10-18T22:48:39.410 回答
0

除了建议的答案之外,要以编程方式移动到下一个控件,可以使用通过 TFMXControlClassHelper 提供的 SelectNext 方法:

https://codeverge.com/embarcadero.delphi.firemonkey/fmx-how-to-programmatically-mov/2031600

它使用 GetTabList(返回 ITabList 接口)和 FindNextTabStop(返回 IControl 接口)和 SetFocus

不过,根据https://stackoverflow.com/a/36715134/903783的说法,“firemonkey 框架在某些事件中禁止更改焦点。为了更改焦点,请向表单发送延迟消息。” (指的是处理程序中 TabControl 的 TabChange 事件,因为您似乎无法使用 SetFocus 来聚焦子控件)。所以看看那里有一个更安全的方法来做“SetFocus”

于 2021-11-03T00:56:29.443 回答