【问题标题】:How to tell if a user tabbed into a frame or clicked on a component on the frame如何判断用户是进入框架还是单击框架上的组件
【发布时间】:2013-10-24 01:16:48
【问题描述】:

我有一个 TFrame 后代的问题,当用户在框架中切换时,框架本身接收焦点而不是框架上的第一个控件。

是否知道用户是否进入框架与用户实际点击框架内的组件?

我已经实现了 OnEnter 事件,并且可以将焦点设置到第一个控件,但这可能会将焦点从用户单击的控件(在框架上)移动。

【问题讨论】:

  • 框架不应作为制表位获得焦点。您是否正确设置了表单的标签顺序? TFrame.TabStop 还是 False(默认)吗?我刚刚做了一个快速测试,在新表单上使用TEdit,在新表单上使用TFrame 和单个TEdit,将表单的ActiveControl 设置为它自己的编辑控件,将选项卡顺序设置为表单的 TEdit 然后是框架,然后运行它。我可以在两个编辑(一个在表单上,​​一个在框架上)之间反复切换,而在框架之间没有停止。
  • 您是否尝试过将框架的 TabStop 属性设置为 False,同时为框架内的控件保留 TabStop = True?我认为这样当用户进入框架时,焦点将由具有最低 TabOrder 值的子控件接收......或者我对你的情况的理解可能遗漏了一些东西。

标签: delphi


【解决方案1】:

将框架的TabStop 属性设置为 False,同时为框架内的控件保留 TabStop = True。这会改变你的问题的性质,也许会完全消除它。换句话说,框架将不再获得焦点,您不必编写额外的代码来将焦点设置到第一个子控件。现在,如果您想在框架内的控件接收焦点或被点击时执行一些代码,您可以实现该控件的 OnEnter 或 OnClick 事件(而不是框架的 OnEnter 事件)。

【讨论】:

  • 精彩 - 如此明显!由于某种原因,我的基本 TFrame 后代确实有 TabStop=True 。关闭它并在 dfms 中找到所有引用并修复它们后,问题就得到了解决。谢谢大家。
  • @user2913735 我赞成你的问题,尽管它很简单。请您考虑回馈这个人情。 (:-D)
  • @Sam:user291375 可能还没有足够的代表来投票。并不是所有人都相信赞成和接受。
  • @MarjanVenema 如果普通人对彼此有更好的态度,那么目前欧洲和美国的高失业率不会是悲剧的一半。
猜你喜欢
  • 2011-07-22
  • 2023-01-31
  • 2011-02-27
  • 2021-04-06
  • 2015-12-12
  • 2019-06-01
  • 2021-08-15
  • 2013-02-19
  • 2011-02-16
相关资源
最近更新 更多