4

在 A2003 和 A2007 工作。

我们如何确保在表单加载时选定的 TextBox 获得焦点?如果我们将 MyTextBox.SetFocus 放在 Form_Load 中,则会出现错误:

can't move the focus to the control

此表格专为快速输入数据而设计,表格会根据上次使用的设置重新排列。所以有几个不同的文本框,其中任何一个都可能需要根据用户的焦点。我们不能在设计时通过给 MyTextBox TabIndex=0 来修复它。

帮助说明了一些关于调用 Repaint 的内容,这根本没有任何意义:

您只能将焦点移动到可见控件或窗体。在窗体的 Load 事件完成之前,窗体和窗体上的控件是不可见的。因此,如果在窗体的 Load 事件中使用 SetFocus 方法将焦点移动到该窗体,则必须在 SetFocus 方法之前使用 Repaint 方法。

4

4 回答 4

2

在这种情况下,最好的办法是确保获取焦点的文本框在 Tab Index 属性中编号为 0。

于 2011-02-25T13:18:33.910 回答
1

根据我的经验,当我试图将焦点设置为 1) not visible或 2) not enabled时,我总是遇到该错误。我假设您已经检查过这些,但是当您收到错误消息时,值得在运行时仔细检查(特别是因为您说您在运行时正在改组控件)。

我经常使用 .SetFocus 方法,没有任何问题。我不记得在将焦点设置到已经拥有它的控件时收到错误消息,正如 Remou 在他的回答中所说。

如果您尝试将焦点设置到已过滤所有记录绑定表单的表单页眉/页脚中的控件,我相信还会发生第三种情况。我知道这种情况会导致未绑定组合框中的内容“消失”,但我认为它也可能对 SetFocus 方法造成严重破坏。但是,如果您在数据输入模式下打开表单,那应该不是问题。

于 2011-02-25T14:15:47.503 回答
1

您无法设置焦点,因为控件尚不存在,请尝试将代码放在 OnActivate 事件中

或者在尝试设置焦点之前将 DoCmd.Repaint 放在 OnLoad 事件中。两者都应该工作,但我不在电脑附近检查

于 2011-02-25T12:15:33.243 回答
1

将 SetFocus 移动到窗体的 On Current 事件。然后应该可以工作,除非表单的记录源不包含任何记录并且您已将表单的 Allow Additions 属性设置为 No。在这种情况下,您的文本框将无法用于 SetFocus,但在我的测试中它不会引发错误.

于 2011-02-25T16:48:53.277 回答