Страница 1 из 1

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

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

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

    DoCmd.OpenForm "frm_Import"
    Do While (Application.SysCmd(acSysCmdGetObjectState, acForm, "frm_Import") = acObjStateOpen)
       If GetInputState() Then  DoEvents
       DoEvents
    Loop
Все класно, только при потере фокуса моей формы (ctrl-F нажал) все замирает. Есть какое-то решение?
beerMaster

Добавлено: 13 июл 2004, 22:57
Naeel Maqsudov
Есть.
Вместо всего что написано выше можно сделать только

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

Этого достаточно, так как DoCmd.OpenForm в данном случае выполняется синхронно, т.е. ждет закрытия формы.

Добавлено: 22 июл 2004, 07:35
BeerMaster
дык ведь хочу открыть форму __немодально__, т.е. хочу иметь возможность переключаться в другие окна (например "поиск") В том то и дело, что acDialog не походит (см. текс первого письма)

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

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

    DoCmd.OpenForm "frm_Import" 
    Do While ПЕРЕМЕННАЯ 
       .........
       DoEvents 
    Loop

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