4

古典的なVCLの質問...しかし、FireMonkey内で同じことを行う方法は?

TControl集中できる基準がいくつかあります...

たとえば、TEditを押すと、次のフォーカス可能なコントロールに移動したい場合があります。return key

私は別のアプローチを試しましたが、成功しませんでした(13のときにキー、keycharを9に置き換え、...、キーイベントをフォームに転送します...)

もちろん、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 に答える