如何在表单加载中对文本框设置焦点
Posted
技术标签:
【中文标题】如何在表单加载中对文本框设置焦点【英文标题】:How to SetFocus on a TextBox in the Form Load 【发布时间】:2011-02-25 12:09:45 【问题描述】:在 A2003 和 A2007 中工作。
我们如何确保在表单加载时选定的 TextBox 获得焦点?如果我们将 MyTextBox.SetFocus 放在 Form_Load 中,则会出现错误:
can't move the focus to the control
此表单专为快速输入数据而设计,并且表单会根据上次使用的设置重新排列自身。所以有几个不同的文本框,其中任何一个都可能需要根据用户的焦点。我们不能只在设计时通过给 MyTextBox TabIndex=0 来修复它。
帮助说明了一些关于调用 Repaint 的内容,这根本没有任何意义:
您只能将焦点移动到 可见的控件或表单。一个表格和 窗体上的控件不可见 直到表单的 Load 事件有 完成的。因此,如果您使用 表单的 Load 事件中的 SetFocus 方法 要将焦点移至该表格,您 必须在之前使用 Repaint 方法 SetFocus 方法。
【问题讨论】:
您使用的是MyTextBox.SetFocus
(带有适当的控件名称)还是Me!MyTextBox.SetFocus
(或Me.MyTextBox.SetFocus
)?除了作为父窗体的成员之外,引用控件绝不是一个好主意,并且可能存在设置解决未指定控件引用所需的命名空间的时间问题。但是,我只是在我的测试表单中尝试了未指定的控件,并且没有我它工作得很好!或我。
@David-W-Fenton 现在我真的很困惑。我以为凯文·罗斯在
凯文的回答并没有真正解决这个问题。在我的测试示例中,我根本不需要重绘。您是否澄清过您是否有记录源,并且有时在没有加载记录的情况下打开表单?在这种情况下,控件将不存在,因此您无法为其设置焦点。
【参考方案1】:
在这种情况下,最好的办法是确保获取焦点的文本框在 Tab Index 属性中编号为 0。
【讨论】:
标签索引还是标签索引?顺便恭喜您成为标签 [ms-access] 的第一个也是迄今为止唯一的金牌会员 恭喜。我没注意到你是金的。 :-) @HansUp 它只是抛光得很亮的黄铜,但光线合适...... :)【参考方案2】:您无法设置焦点,因为控件尚不存在,请尝试将代码放在 OnActivate 事件中
或者在尝试设置焦点之前在 OnLoad 事件中放置一个 DoCmd.Repaint。两者都应该工作,但我不在电脑附近检查
【讨论】:
感谢您的回答。将代码移动到 OnActivate 不起作用,因为表单是一个弹出窗口,并且(显然)Access 中没有用于弹出窗口的 Activate 事件。但是将代码移动到“打开”事件(我认为这几乎是同一件事)解决了这个问题。 当我用谷歌搜索为什么 Form_Activate 没有触发其中一个结果时解释说没有用于弹出窗口的 Form_Activate,请改用 Open,所以我做到了。它似乎有效。不过现在你让我担心了。【参考方案3】:根据我的经验,当我尝试将焦点设置到的控件为 1)不可见或 2)未启用时,我总是遇到该错误。我假设您已经检查了这些,但是当您收到错误消息时,值得在运行时仔细检查(尤其是因为您说您在运行时对控件进行了改组)。
我经常使用 .SetFocus 方法,没有任何问题。我不记得在将焦点设置到已经拥有它的控件时收到错误消息,正如 Remou 在他的回答中所说。
我相信如果您尝试将焦点设置到 绑定 表单的 表单页眉/页脚 中的控件,也会发生第三种情况 em>它的所有记录都被过滤掉了。我知道这种情况会导致未绑定组合框中的内容“消失”,但我认为它也可能对 SetFocus 方法造成严重破坏。但是,如果您在数据输入模式下打开表单,那应该不是问题。
【讨论】:
我不是在问我为什么会收到错误消息。我知道访问不允许我们在表单加载中设置焦点,因为表单尚不可见。我在问如何动态指定哪个文本框将获得焦点,因为您不能在表单加载中执行 SetFocus。 我现在明白了。对不起,噪音。 这篇文章完全没有噪音。即使将 PopUp 设置为 True,可见表单也可以在 OnLoad 事件中将焦点设置为可见且启用的控件。我刚测试过。它没有问题。如果您打开隐藏的弹出表单,它甚至可以工作。显然这里还有其他事情发生,正如您 @mwolfe02 所暗示的那样,因为简单的案例工作得很好。【参考方案4】:将 SetFocus 移动到窗体的 On Current 事件。然后应该可以工作,除非表单的记录源不包含任何记录并且您已将表单的 Allow Additions 属性设置为 No。在这种情况下,您的文本框将无法用于 SetFocus,但在我的测试中它不会引发错误.
【讨论】:
以上是关于如何在表单加载中对文本框设置焦点的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用fancybox打开的新页面中将焦点设置在文本框上
如何在不丢失setfocus的情况下将光标设置到文本框的末尾?