【问题标题】:First control which accepts keyboard input第一个接受键盘输入的控件
【发布时间】:2016-03-09 16:47:00
【问题描述】:

我有一个显示不同 MDI 表单的应用程序。表单包含大量的可视化组件,在表单显示后不知何故失去了焦点。我需要在接受键盘输入(带有文本字段,例如 TEdit、TMemo 等)的表单上找到第一个控件(设置最低的 TabOrder),这样我就可以将active control 设置为它。

LE:所有控件都是在运行时创建的,根据业务逻辑不同,创建的顺序也不同。

【问题讨论】:

  • 也许遍历所有控件并检查 CanFocus?
  • 好的,说清楚了,“第一”是什么意思?最左上角?关于表单的客户区?最低TabOrder?还有什么?
  • 然后在控件中循环查找 TabOrder = 0 的控件。(或者只是在 FormCreate 事件或设计时在 IDE 中的代码中按名称设置 ActiveControl。)
  • 如果您在设计时设置ActiveControl,当显示表单时,VCL 会将该控件设置为焦点。您不必在运行时寻找要手动分配给 ActiveControl 的控件。
  • @RemyLebeau & all - 我忘了提一些重要的事情,所有的控件都是在运行时创建的,所以我需要去寻找......

标签: delphi delphi-xe2 mdichild


【解决方案1】:

...在表单显示后不知何故失去了焦点。

我的选择是回答为什么会发生这种情况并解决问题的根源,而不是解决其影响。

但是要回答这个问题,您正在寻找Form.SelectFirst

【讨论】:

  • 目前很难解决来自组件和使用的自定义框架的所有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
  • 2019-08-07
  • 2011-09-15
  • 1970-01-01
相关资源
最近更新 更多