在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方法。
答案 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,但在我的测试中它不会引发错误