如何在Form Load中的TextBox上设置焦点

时间:2011-02-25 12:09:45

标签: ms-access textbox setfocus

在A2003和A2003中工作A2007。

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

can't move the focus to the control

此表单专为快速数据输入而设计,表单根据上次使用的设置稍微重新排列。因此,根据用户的不同,有几个不同的文本框可能需要关注。我们不能通过给MyTextBox TabIndex = 0来确定设计时间。

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

  

您只能将焦点移动到a   可见的控制或形式。表格和   表单上的控件不可见   直到表单的Load事件有   完了。因此,如果你使用   表单的Load事件中的SetFocus方法   把焦点移到那个表格上,你   必须在之前使用Repaint方法   SetFocus方法。

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

根据我的经验,当我试图将焦点设置为1)不可见或2)未启用时,我总是遇到错误。我假设您已经检查了这些,但是当您收到错误消息时,在运行时进行双重检查是值得的(特别是因为您说您在运行时正在对控件进行洗牌)。

我经常使用.SetFocus方法而没有麻烦。我不记得在将焦点设置为Remou在其答案中说明的控件时,会收到错误消息。

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

答案 3 :(得分:1)

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