:: Visual Foxpro, Foxpro for DOS
Помогите мне разобраться с модальной формой
ZenTigra
Автор

Сообщений: 514
Дата регистрации: 03.12.2004
Тема возможно написана не корректно, но вопрос вот в чем
Есть форма, на ней имеются пара кнопок и Grid,
При нажатии на кнопку исполняется некоторый код
потом происходит запуск второй формы, (она модальная)
после ее закрытия фоку должен попасть в Grid
Пример кода при нажатии на кнопку.
WAIT WINDOWS 'Подождите идет открытие формы №2' TIMEOUT 2
DO FORM form2
WAIT WINDOWS 'Форма №2 закрыта' TIMEOUT 2
THISFORM.Grid1.SetFocus

Как сделать чтоб форма №2 была не модальная, и ТОЛЬКО ПОСЛЕ ЕЕ закрытия исполнить некоторый код, и получить фокус в Grid1?
Ratings: 0 negative/0 positive
Re: Помогите мне разобраться с модальной формой
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
1 - Если форма 2 не модальная, то что помешает пользователю НЕ закрывая её вернуться в форму 1 и чего-то там продолжать делать? Это то совершенно чётко осознаётся?
2 - передать в форму 2 ссылку на форму1 (ThisForm), в Init формы2 запомнить этот параметр в свойство (к примеру oParentForm), и в процессе закрытия формы2 (после того как она уже скрыта, или вообще в каком Unload) вызвать определённый метод формы1 в котором будет этот самый "код продолжения" и прописан.
WAIT WINDOWS 'Форма №2 закрыта' TIMEOUT 2
THISFORM.Grid1.SetFocus()

Правда я не помню корректно ли фокус именно самому гриду передавать в общем случае, не нужно ли всё-же его текстбоксу в определённой (запомненной заранее, ну или "той которая нужна") колонке передавать (если грид не в режиме AllowCellSelection=.F.)

И обязательно проверяй ссылку на форму на ISNULL() - т.к. если формы не модальные, то пользователь запросто может закрыть первую ДО закрытия второй - и тут уж некуда и незачем будет "переводить фокус".


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Помогите мне разобраться с модальной формой
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
ZenTigra
имеются пара кнопок
Нам интересна только 1 кнопка?
Не совсем ясно, что же хочется.
ZenTigra
При нажатии на кнопку исполняется некоторый код
Ну видимо этот код можно просто поместить в код который вызывается по клику формы.
ZenTigra
потом происходит запуск второй формы, (она модальная)
При вызове модальной формы, выполнение вызвавшего кода приостанавливается
Т.е ваш код вполне рабочий.
Даже неясно почему возник вопрос.

Я сначала подумал, что
ZenTigra
При нажатии на кнопку исполняется некоторый код
Вызывается какая-то форма. Игорь кажется так же трактовал.
В таком случае все что он написал...
Но тогда не ясно, что будет...
Igor Korolyov
что помешает пользователю НЕ закрывая её вернуться в форму 1 и чего-то там продолжать делать?


------------------
Ratings: 0 negative/0 positive
Re: Помогите мне разобраться с модальной формой
ZenTigra
Автор

Сообщений: 514
Дата регистрации: 03.12.2004
Простите, что непонятно написал, но главный вопрос был в том, как после закрытии второй формы поставить фокус в Grid
Ratings: 0 negative/0 positive
Re: Помогите мне разобраться с модальной формой
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
А этот вопрос то и не заметил)
ZenTigra
Как сделать чтоб форма №2 была не модальная, и ТОЛЬКО ПОСЛЕ ЕЕ закрытия исполнить некоторый код, и получить фокус в Grid1?
Не помню откуда нелюбовь к модальным формам. Какие то глюки с ними...

Организовать псевдо-модальность несложно.
При вызове другой формы, передаешь ссылку на текущую
Т.е. вызов
do form SimilarlyModal with thisform

В ините SimilarlyModal
Param toForm
This.ParentForm=toForm
This.ParentForm.enabled=.f.
В дестрое не забыть
This.ParentForm.enabled=.t.

Ну и как показывал Игорь, легко вызвать любой метод вызвавшей формы. Через This.ParentForm.ЛюбойМетод

Причем так можно вызывать целую цепочку, поведение будет как у модальных, а глюков не будет.
Лучше все это разрулить в базовых классах форм, и обвязать различными проверками.

ZenTigra
Простите, что непонятно написал, но главный вопрос был в том, как после закрытии второй формы поставить фокус в Grid
Так разве ж THISFORM.Grid1.SetFocus() не ставит?


------------------
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 37 (Гостей: 37)

© 2000-2024 Fox Club 
Яндекс.Метрика