CftClub.ru
Клуб специалистов ЦФТ-Банк

Запуск Msgbox из Onfocus

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
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    Ответить с цитатой
Полезность: Нет оценки
Ну какой же это баг? Скорее, "пасхальное яйцо" Smile

По делу: возможно, 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 пишет:
ЦФТ ответил?


Пока не запрашивал.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru