|
Как правильно переходить между формами в FormSet ?
|
|||
---|---|---|---|
#18+
Привет! Снова вопрос по FormSet-ам. Что надо: сет содержит 2 формы, одна (1я) - список, выбираем в нем запись, появляется 2я - редактирование записи из этого списка, соотв. на фоне 1й формы появляется 2я. В хелпе предписано активно юзать свойство форм Visible. Соотв. вызов второй формы выглядит так: Код: plaintext 1. 2. 3.
Создается впечатление что хоть 2я форма и доступна, но она какбы не считается фоксой запущенной и события, происходящие для меня визуально в ней, 2й, реально обрабатываются 1й. Пробовал еще курить хелп и вызывать 2ю форму через show() - тогда все ок, все события обрабатываются 2й формой, как и надо. Но тогда вылазит другая проблема - когда 2ю форму делаю невидимой (закончили редактирование) и пытаюсь вернуться в 1ю форму, то 1я форма как бы "зависает" (судя по дебаггеру в строке с show(), т.е. на вызове 2й формы), и в итоге повторно вызвать редактирование и перейти во 2ю форму невозможно. Пробовал давать на выходе из 2й формы CLEAR EVENTS - но безуспешно. Т.е. видно что выполнение show() должно чем-то закончится, но непонятно чего именно ждет show() чтобы прога/форма нормаль продолжила работу. Что делать чтобы Enter/Escape не "уходили" в первую форму, т.е. как правильно переходить между формами в FormSet-е? вфп9 спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2010, 11:58 |
|
Как правильно переходить между формами в FormSet ?
|
|||
---|---|---|---|
#18+
ОМГ лично я делаю так: Находясь на 1й форме ThisFormSet.Form2.Show ThisFormSet.Form1.Hide Никогда еще проблем не было ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2010, 13:04 |
|
Как правильно переходить между формами в FormSet ?
|
|||
---|---|---|---|
#18+
Прикрепленый файл ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2010, 13:10 |
|
Как правильно переходить между формами в FormSet ?
|
|||
---|---|---|---|
#18+
Есть два понятия: "Видимая" форма и "активная" форма. Нажатия клавишь обрабатываься на той форме, которая "активна". Проще говоря, в которой находится фокус. Это значит, что в Вашем случае недостаточно сделать форму видимой, ее еще надо сделать активной. Для чего достаточно перевести фокус в любой объект на этой форме Код: plaintext 1. 2. 3. 4. 5.
Основное отличие FormSet от не связанных друг с другом форм - это возможность "общей модальности". Т.е. если сделать модальным FormSet, то свойство модальности будет распространено на сам FormSet, но между формами внутри FormSet можно будет свободно переключаться. Другими средствами добиться такого же эффекта довольно сложно. Есть еще вопрос общего DataEnvironment для всех форм, но это, во-первых, легко решаемо обычной Default DataSession, а, во-вторых, не очень-то и нужно. Следствием этой самой общей модальность и является запрет на использование методов Form.Show() если сам FormSet модальный. По той причине, что форма, вызванная из модальной формы автоматически становится модальной. Как следствие, FoxPro останавливается на команде Show() и ждет, пока форма не будет закрыта. Судя по описанию, никакой необходимости в использовании "общей модальности" для нескольких форм - нет. Ведь формы у Вас скрытые и открываются "по требованию". Поэтому, проще сделать независимые формы, а не один общий FormSet. Так проще будет управлять формами. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2010, 17:34 |
|
Как правильно переходить между формами в FormSet ?
|
|||
---|---|---|---|
#18+
KpaqpTukОМГ лично я делаю так: Находясь на 1й форме ThisFormSet.Form2.Show ThisFormSet.Form1.Hide Никогда еще проблем не былоHide пробовал тоже, но хотел чтобы форма со списком оставалась видимой. В Вашем примере если ее оставлять видимой - проблемы на месте. Хотя, в целом - это вариант решения. Спасибо! ВладимирМСудя по описанию, никакой необходимости в использовании "общей модальности" для нескольких форм - нет. Ведь формы у Вас скрытые и открываются "по требованию". Поэтому, проще сделать независимые формы, а не один общий FormSet. Так проще будет управлять формами. Спасибо, Владимир! Ваши ответы как всегда исчерпывающи... Но проблема в том, что прилагаемый пример содержит немодальный формсет, а установка фокуса по Вашему примеру не дает абсолютно никакого результата, т.е. проблема остаётся на месте. Да и фокус 2я форма, вернее её Text1, получает нормально, иначе нельзя бы было в этот текстбокс вносить данные. Что интересно, когда они обе видны, даже если кликнуть конкретно по 2й форме, нормально она активируется, фокус и все такое, но все равно проблема на месте - набираешь в текстбокс жмешь ентер - а он отрабатывает на 1й форме и все тут! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2010, 00:25 |
|
Как правильно переходить между формами в FormSet ?
|
|||
---|---|---|---|
#18+
Вобщем многочасовой менингит показал - проблема кроется в кнопке со свойством Default=.T. Если таковая имеется на 1й форме - то ей (что естественно) и всем остальным (что неестественно) формам формсета нельзя пользоваться ентером для ввода данных в тектсбоксы, т.к. из любой формы формсета по ентеру сработает нажатие той самой кнопки 1й формы. Что еще более замечательно, можно программно, при появлении 2й формы у 1й убирать с кнопки Default, но фокс чихать хотел на такие мансы и все равно кнопка остается для него со св-вом Default, судя по реакции на нажатие ентера во 2й форме. Что еще куда интереснее, если, скажем у первой формы вообще нет изначально кнопки с установленным св-ом Default, а при вызове 2й формы тупо установить это св-во любой кнопке и тут же его убрать: Код: plaintext 1. 2. 3.
Еще интереснее вариант, когда на первой форме кнопка Default есть, но при активации 2й формы 1й даешь Enabled=.F. Код: plaintext 1. 2.
Логика такого поведения мне непонятна, но я догадываюсь, что она примерно такая - если снимаешь св-во Default, то обязательно надо такое установить другой кнопке, иначе зачем ты еще это ваще можешь делать? Но лично я-то ожидаю реакции на снятие с кнопки Default-а как у формы, у которой никогда не было такой кнопки. короче для формсетов кнопка с установленным Default - опасная вещь, причем неважно даже если такая кнопка спрятана в контейнере фокс ее вычислит и будет на нее молиццо. Уж не знаю глюк это или фича, но явление сие для меня оказалось весьма досадным. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2010, 11:34 |
|
|
start [/forum/topic.php?fid=41&msg=36415517&tid=1585678]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 145ms |
0 / 0 |