Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Volod Эксперт
Вступление в Клуб: 19.09.2007
|
Вт Фев 08, 2011 13:20  Запуск Msgbox из Onfocus |
|
Полезность: Нет оценки
|
Понадобилось вызвать Msgbox из Onfocus.
Код: | Public Sub Memo1_OnFocus(bGet)
if bGet=True then
Msgbox "Примечание" , vbInformation, "Информация"
end if
End Sub |
В этом случае приходится нажимать на кнопку ОК в Msgbox одиннадцать раз.
А если так, то два раза.
Код: | Public Sub Memo1_OnFocus(bGet)
Msgbox "Примечание" , vbInformation, "Информация"
End Sub |
Во втором случае это объяснимо, но в первом и 11 раз - не пойму - это фича или баг? |
|
 |
r00st Эксперт
Вступление в Клуб: 14.09.2007
|
Вт Фев 08, 2011 13:36   |
|
Полезность: Нет оценки
|
Ну какой же это баг? Скорее, "пасхальное яйцо"
По делу: возможно, 11 связано с количеством контролов на форме? |
|
 |
ALEX_DV Участник
Вступление в Клуб: 26.02.2010
|
Чт Фев 17, 2011 07:55   |
|
Полезность: 1
|
11 это предел безумия. С контролами точно не связано.
1. Если есть необходимость валидировать поле через OnFocus с использованием MsgBox, то используйте ветку для bSet=false (выход из поля). В этом случае MsgBox будет точно один раз и после нажатия OK в MsgBox'е, фокус из поля перейдет на след. контрол формы или программно можете вернуть в тоже поле.
2. Если использовать MsgBox в теле функции OnFocus, то он логично будет вылезать два раза. При входе в поле вызовется OnFocus(True) - вход в поле. MsgBox попал в стек. Т.к. вызван MsgBox, то поле теряет фокус и тут же срабатывает OnFocus(False), который в свою очередь вызывает ещё раз MsgBox. На экране мы видим сперва ВТОРОЙ MsgBox, потом ПЕРВЫЙ.
И только после этого фокус переходит на след контрол формы.
3. Вызов MsgBox в ветке bSet=true почему-то приводит к зацикливанию. Почему 11 итераций, а не 666, трудно сказать. Есть мысли, но оставлю их при себе.
Если вам нужно перехватить именно вход в контрол, то нужно думать ) Может как-то изменить логику обработки задачи в целом. |
|
 |
Volod Эксперт
Вступление в Клуб: 19.09.2007
|
Чт Фев 17, 2011 09:08   |
|
Полезность: Нет оценки
|
Спасибо, это нюансы я знаю, и вопрос был именно про фокус = TRUE. Хотел сначала выяснить у общественности. Буду обращаться в ЦФТ. |
|
 |
ALEX_DV Участник
Вступление в Клуб: 26.02.2010
|
Вт Мар 01, 2011 03:52   |
|
Полезность: Нет оценки
|
ЦФТ ответил? |
|
 |
Volod Эксперт
Вступление в Клуб: 19.09.2007
|
Вт Мар 01, 2011 09:28   |
|
Полезность: Нет оценки
|
ALEX_DV пишет: | ЦФТ ответил? |
Пока не запрашивал. |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|