|
|
|
| Здравствуйте.
Вообщем грубо говоря есть два текстовых поля в форме, в которые вводятся числовые значения.
Необходимо проверять не превышает ли значение "hstg5" значение "lstg5". Если первышает - выдать сообщение, стереть введенные данные, и установить фокус на этом же поле.
Private Sub hstg5_AfterUpdate()
Dim lstg5, hstg5 As Integer
lstg5 = Me![lstg5]
hstg5 = Me![hstg5]
If lstg5 > hstg5 Then
MsgBox ("Введите корректное значение")
Me![hstg5].Value = ""
hstg5.SetFocus
End If
End Sub
|
Вроде всё должно работать, но нет!!! Фокус не возвращается на это же поле, а перекидывается на любое соседнее. Однако если же прописать SetFocus на любое другое поле, то он соверешнно нормально устанавливается там. В чем дело, так и не понял!!! | |
|
| |
|
|
|
| надо повесить процедуру проверки на BeforeUpdate, а если неверно, то отменять изменения (Cancel=true) | |
|
| |
|
|
|
| Цитата из Help
События Выход (Exit) и Потеря фокуса (LostFocus) для изменяемого элемента управления
возникают после событий До обновления (BeforeUpdate) и После обновления (AfterUpdate):
До обновления > После обновления > Выход > Потеря фокуса
|
т.е все работает как заявлено, на событие после обновления Вы переводите фокус в поле hstg5, затем происходят события Выход > Потеря фокуса, которые переводят фокус в другой контрол. | |
|
| |
|
|
|
| просто поменяйте местами команды
Me![hstg5].Value = ""
и
hstg5.SetFocus
т.е. получится так:
...
MsgBox ("Введите корректное значение")
hstg5.SetFocus
Me![hstg5].Value = ""
End If
...
может в этом случае сработает как задумано | |
|
| |