Как установить фокус на TextBox в форме загрузки - PullRequest
4 голосов
/ 25 февраля 2011

Работа в A2003 и A2007.

Как мы можем гарантировать, что выбранный TextBox получит фокус при загрузке формы?Если мы поместим MyTextBox.SetFocus в Form_Load, то получим ошибку:

can't move the focus to the control

Эта форма предназначена для быстрого ввода данных, и форма несколько перестраивается на основе последних использованных настроек.Таким образом, есть несколько различных текстовых полей, каждое из которых может нуждаться в фокусировке в зависимости от пользователя.Мы не можем просто исправить это во время разработки, задав MyTextBox TabIndex = 0.

Помощь говорит что-то о вызове Repaint, что просто не имеет никакого смысла:Вы можете переместить фокус только на видимый элемент управления или форму.Форма и элементы управления в форме не отображаются до тех пор, пока не завершится событие Load формы.Поэтому, если вы используете метод SetFocus в событии Load формы для перемещения фокуса на эту форму, вы должны использовать метод Repaint перед методом SetFocus.

Ответы [ 4 ]

2 голосов
/ 25 февраля 2011

Лучше всего в этом случае убедиться, что текстовое поле для получения фокуса имеет номер 0 в свойстве Tab Index.

1 голос
/ 25 февраля 2011

Переместите SetFocus на событие On Current формы. Должен работать тогда, если, возможно, источник записей формы не содержит записей, и вы установили для свойства «Разрешить добавления» значение «Нет». В этом случае ваше текстовое поле не будет доступно для SetFocus on, но в моем тестировании оно не выдает ошибку .

1 голос
/ 25 февраля 2011

По моему опыту, я всегда получал эту ошибку, когда элемент управления, на который я пытался установить фокус, был 1) не виден или 2) не включен .Я предполагаю, что вы уже проверили их, но стоило бы дважды проверить во время выполнения, когда вы получите сообщение об ошибке (особенно если вы сказали, что вы перетасовываете элементы управления во время выполнения).

Я использую метод .SetFocusдовольно регулярно без проблем.Я не помню, чтобы когда-либо получал сообщение об ошибке при настройке фокуса на элемент управления, который уже имеет его, как сказал Рему в своем ответе.

Я полагаю, что есть и третий случай, который возникает, если вы попытаетесь установить фокус на элемент управления в верхнем / нижнем колонтитуле формы формы bound , которая имела все его записи отфильтрованы .Я знаю, что эта ситуация приводит к «исчезновению» содержимого в несвязанном комбинированном окне, но я думаю, что это может также нанести ущерб методу SetFocus.Если вы открываете форму в режиме ввода данных, это не должно вызывать проблем.

1 голос
/ 25 февраля 2011

Вы не можете установить фокус, так как элементы управления еще не существуют, попробуйте вместо этого поместить код в событие OnActivate

Или просто вставьте DoCmd.Repaint в событие OnLoad, прежде чем пытаться установить фокус,Оба должны работать, но я не рядом с компьютером, чтобы проверить

...