【问题标题】:Focus does not advance by pressing the "next" button (delphi)按“下一步”按钮不前进焦点(delphi)
【发布时间】:2019-07-11 00:53:41
【问题描述】:

我的表单中有 4 个 Tedit,所有格式均为 0 到 3 的制表符顺序(如附图所示)。

但是,当我点击手机中的下一个按钮时,焦点并没有改变......

如果我输入一些文本,点击“下一步”按钮(什么都不做),然后手动将焦点从一个更改为另一个并继续输入,它会从 Tedit1 复制所有文本并将其粘贴到 Tedit2,好像它补充了同一个 Tedit。

我已经搜索过类似的问题,但我没有找到有同样问题的人......

任何人都猜到可能出了什么问题?我使用 Delphi Tokyo,并且正在为 Android 设备进行开发。

Obs:我已经试过检查“KillFocusByReturn”和Tedit1的“onExit”功能,换上“Tedit2.SetFocus”,但这也不起作用。

【问题讨论】:

    标签: android delphi


    【解决方案1】:

    但是,当我点击手机中的下一个按钮时,焦点并没有改变......

    根据ReturnKeyType 文档:

    表示编辑控件在编辑控件文本并按下虚拟键盘上的返回键时执行的type of action。运行时平台使用此值来确定它在编辑控件的虚拟键盘上显示的返回按钮的类型。

    ReturnKeyType 的值不影响编辑控件在按下回车键时执行的实际操作。要定义该操作,请使用OnKeyUp 事件。

    因此,您需要为Edit1 分配一个OnKeyUp 事件处理程序,当它指示按下Return 键时,让它调用Edit2.SetFocus()。然后对Edit2 执行相同的操作以进行下一个控件。根据需要等等。

    【讨论】:

    • 这很好用,但是提到了另一个问题:“如果将焦点从一个转移到另一个并继续输入,它会从 Tedit1 复制所有文本并将其粘贴到 Tedit2 中,就好像它有补充了同一个 Tedit。”继续……你知道会发生什么吗?
    • 注意:以前,这个问题只有在我手动更改时才会发生。现在它会发生,即使它是自动发生的。经过几次测试,我意识到如果我使用“KillFocusByReturn”功能,delphi不会将edit1中的文本复制到edit2,但如果我保持启用此功能,将无法从一个转换到另一个。
    【解决方案2】:

    如果您希望 Return 键将焦点转移到下一个控件,您可能需要尝试以下操作:

    procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word;
      var KeyChar: Char; Shift: TShiftState);
    begin
      if Key = vkReturn then
      begin
        Key := vkTab;
        KeyDown(Key, KeyChar, Shift);
      end;
    end;
    

    【讨论】:

      猜你喜欢
      • 2011-06-29
      • 2021-11-14
      • 1970-01-01
      • 2015-07-05
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2021-02-17
      • 2021-05-20
      相关资源
      最近更新 更多