ожидание закрытия немодальной формы

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
BeerMaster
Сообщения: 11
Зарегистрирован: 07 июл 2004, 12:09
Откуда: Красноярск

Хочу из программы открыть форму и продожить выполнение тойже процедуры после ее закрытия. Форма дожна быть немодальной, т.е acDialog не подходит (это надо для того чтобы пользоваться find'ом в форме). Каким образом? Пробовал так:

Код: Выделить всё

    DoCmd.OpenForm "frm_Import"
    Do While (Application.SysCmd(acSysCmdGetObjectState, acForm, "frm_Import") = acObjStateOpen)
       If GetInputState() Then  DoEvents
       DoEvents
    Loop
Все класно, только при потере фокуса моей формы (ctrl-F нажал) все замирает. Есть какое-то решение?
beerMaster
__________
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Есть.
Вместо всего что написано выше можно сделать только

DoCmd.OpenForm "frm_Import", , , , , acDialog

Этого достаточно, так как DoCmd.OpenForm в данном случае выполняется синхронно, т.е. ждет закрытия формы.
BeerMaster
Сообщения: 11
Зарегистрирован: 07 июл 2004, 12:09
Откуда: Красноярск

дык ведь хочу открыть форму __немодально__, т.е. хочу иметь возможность переключаться в другие окна (например "поиск") В том то и дело, что acDialog не походит (см. текс первого письма)
__________
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Тогда в модуле формы определите глобальную переменную (напрмиер типа Boolean), перед запуском формы установите ее в true (лучше даже это сделать в обработчике события "Открытие формы"), а в обработчике события "Закрытие формы" переключайте ее в False.
Т.е.

Код: Выделить всё

    DoCmd.OpenForm "frm_Import" 
    Do While ПЕРЕМЕННАЯ 
       .........
       DoEvents 
    Loop
BeerMaster
Сообщения: 11
Зарегистрирован: 07 июл 2004, 12:09
Откуда: Красноярск

Проблема не в том, чтобы определить открыта ли форма. Это я делаю так:
Do While (Application.SysCmd(acSysCmdGetObjectState, acForm, "frm_Import") = acObjStateOpen)
,
А в том, что такой вариант ожидания (DoEvents) лично у меня не совсем корректно работает. Точнее: после открытия формы и входа в это цикл я могу, в принципе, вызвать окно поиска (нажав ctrl-f или мышью правка/поиск), но в этом окне поиска я могу, почему-то, только изменять поле "образец". На мышинные клики форма не реагирует, перемещаться табуляцией на другие поля не возможно. Я могу ввести с клавиатуры искомый образец и нажать enter или escape. Другие действия мне недоступны (например немогу установить совпадение с любой частью поля). Проверял и в 2000 и в 2003 аксессе. Видимо такой цикл не корректен. Как быть?
__________
Ответить