|
|
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
Подскажите кто знает, как красиво сделать чтобы закрылись все формы в программе... ток меню чтоб осталось... Спасибо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2005, 11:51 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
Пройтись по колекции _SCREEN.Forms() или _VFP.Forms() и позакрывать все открытые формы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2005, 12:03 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
а по-подробнее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2005, 12:36 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
А поподробнее - это очень не тривиальная задача. Т.е. в теории все просто: Код: plaintext 1. 2. 3. 4. Это не опечатка, надо всегда использовать именно индекс 1, а не значение счетчика m.lnI, поскольку при закрытии формы общее количество форм в коллекции Forms уменьшается. Но это теория. А на практике есть масса тонкостей, в результате которых этот код может не сработать или же его надо будет прервать. Ну, например, если пользователь редактировал данные но еще их не сохранил следует ли его переспросить? А если он попросит подождать? Кроме того, такой код не годиться для FormSet. А как быть с модальными формами? А с системными окнами, вроде MessageBox()? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2005, 13:23 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
А можно и так, через коллекции Код: plaintext 1. 2. 3. 4. 5. В зависимости от целей закрытия всех форм, можно поменять реакцию на событие QueryUnload: Прервать закрытие всех форм, если хоть одна не дает себя закрыть или продолжить цикл FOR EACH. С уваженим, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2005, 13:43 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
Прошу прощение, ошибся... Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2005, 13:54 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
не работает. Ошибка "Unknown member FORMS." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2005, 14:20 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
sanya_tirне работает. Ошибка "Unknown member FORMS." Не понял !!! Как не работает ? В каком месте. У меня этот код уже года 3 во всех проектах работает и без проблемм ! Какая версия у вас VFP ? С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2005, 14:23 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
простите за неточность... Не работает вариант ВладимираM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2005, 14:24 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
sanya_tirпростите за неточность... Не работает вариант ВладимираM Тогда понятно. Я этот вариант когда-то тоже пробовал, но Владимир забыл поставить в цикле проверку типа: IF TYPE("_SCREEN.Forms[1]") == "O".... С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2005, 14:27 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
Код схожий с кодом ВладимираМ , но не совсем :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2005, 16:39 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
Ну да, опечатка Такого нет _SCREEN.Forms.Count но есть _SCREEN.FormCount ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2005, 16:53 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
2AleksMed внесу лепту свою do while _Screen.FormCount>1 _Screen.Forms(_Screen.FormCount).Release enddo ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2005, 16:55 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
2leaf Поехали ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2005, 16:59 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2005, 17:45 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
Я бы все-таки рекомендовал проверять событие _Screen.Forms(i).QueryUnload на предмет возврата из него .T. перед закрытием формы. Дело в том, что форма не "знает" в какой момент вы решите ее закрыть этим методом массового закрытия форм, а каждая ваша форма "обязана" в методе QueryUnload проверить, что она может корректно закрыться без потери данных(разумеется, с помощью вашего метода). С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2005, 19:09 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
Hi Aleksey-K! 1) Если уж явно вызывать QueryUnload(), то его нужно и писать специальным образом - т.к. штатно там совсем не нужно RETURN .T./.F. делать - ибо фоксу на это глубоко наплевать - там NODEFAULT рулит... 2) Цикл FOR EACH с _SCREEN.Forms обычно не проходит - т.к. по сути он трансформируется в FOR ln1 = 1 TO _SCREEN.FormCount - а это некорректно - если в ходе выполнения цикла формы будут закрываться - нумерация собъётся. Нужно либо цикл FOR ln1 = _SCREEN.FormCount TO 1 STEP -1 крутить, либо закрывать всегда первую форму с циклом DO WHILE. Ну и конечно проверка на TYPE("ссылка_на_форму_полученная_любым_способом.Name") = "C" никогда не помешает :) Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2005, 01:18 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
Igor Korolyov Hi Aleksey-K! 1) Если уж явно вызывать QueryUnload(), то его нужно и писать специальным образом - т.к. штатно там совсем не нужно RETURN .T./.F. делать - ибо фоксу на это глубоко наплевать - там NODEFAULT рулит... Так я об этом и говорю. Каждая ваша форма должна иметь свой прегруженный метод QueryUnload(), который будет проверять возможность сакрытия "себя", но вызывать его явно необходимо, т.к. Release() сам это не делает Igor Korolyov 2) Цикл FOR EACH с _SCREEN.Forms обычно не проходит - т.к. по сути он трансформируется в FOR ln1 = 1 TO _SCREEN.FormCount - а это некорректно - если в ходе выполнения цикла формы будут закрываться - нумерация собъётся. Нужно либо цикл FOR ln1 = _SCREEN.FormCount TO 1 STEP -1 крутить, либо закрывать всегда первую форму с циклом DO WHILE. Вот тут вы не правы, состав коллекции корректируется при каждом изменении ее состава при работе цикла FOR EACH... (во всяком случае в VFP8.0 + SP1). Это проверенно неоднократно и работает. С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2005, 09:15 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
2Aleksey-K может я конечно бяка но насчет nodefault() это у кого как у меня в QueryUnload() записано thisform.release() ну а тип конечно можно проверить тока лень писать было тем более выше уже написано ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2005, 10:25 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
Hi Aleksey-K! Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 2 leaf Release() в QueryUnload это конечно совершенно неправильно и безрассудно, тем более что в QueryUnload требуется обычно "предотвратить закрытие" а не продублировать его. Кроме того NODEFAULT это не функция - её без скобок пишут. Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 02:40 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
close all do form .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 10:26 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
2Igor Korolyov может Вы и правы насчет QueryUnload , но опять же это кто как работает мне например этот крестик только жить мешает ведь есть же кнопки а крестик я в большенстве случаев вообще отрубаю но поскольку у меня в методе Release() выполняются протекают некоторые жизнено важные процесы при чем для любой формы , то это просто страховка и не более того На мой взгляд он просто никогда не наступит крестика то немае ,хотя может я и не прав. И сделано это из соображений , что скобки лучше чем ошибки не более того! Ну а насчет NODEFAULT спасибо но это чисто машинально слишком много методов упоминалось - редкий случай когда скобки - и есть ошибки А так что получаеться пользователь жмет и жмет на крестик а форма то не закрывается пользователь в ужасе бежит к разработчику с большими глазами ... ну далее по Вашему тексту Ну опять же кто как может. По мне крестик есть - форма должна закрываться , а так кому что нравиться Кстате есть случаи когда return .f. - это совсем даже и не зло ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 10:49 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
Еще свой вариант до кучи :) Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 13:38 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
Igor Korolyov Hi Aleksey-K! Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 2 leaf Release() в QueryUnload это конечно совершенно неправильно и безрассудно, тем более что в QueryUnload требуется обычно "предотвратить закрытие" а не продублировать его. Кроме того NODEFAULT это не функция - её без скобок пишут. Да.. точно так... Век живи, век учись.. 2 формы остаются. С уважением, Алексей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 15:41 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
Hi XAndy! А зачем менять WindowType??? IMHO это не нужно - он вообще-то при спрятанной форме не имеет ровно никакого значения... 2 leaf 1) Есть понятие оконного пользовательского интерфейса, вот уже который год насаждаемого "маленькой но мягкой" корпорацией - и твои потуги "переучить" пользователей IMHO скорее тебе аукнуться, нежели им :) Тем паче что разумно и управляемо использовать "крестик" ну совсем не трудно :) 2) Если у тебя есть код который нужно исполнить при закрытии - то НЕ НАДО его писать в Release() - сделай свой метод и его и вызывай когда надо - в т.ч. и из QueryUnload и из твоей кнопки закрытия... Твой метод выполнит ТОЛЬКО твои действия - вызов же Release() может выполнить и системные и твои, и вообще получается каша. Ты бы ещё в Hide это прописал :( 3) насчёт NODEFAULT - почитай хелп, там однозначно описан синтаксис. В VFP9 уже будет ругаться... Это как с LOCAL - были оригиналы, которые не ставили запятых между перечисленными именами :) Эта экономия сильно по ним ударила в VFP7... Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2005, 02:42 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
2Igor Korolyov ну что Вам сказать кому что нравиться , хотя конечно Ваша увернность в своих силах и своих силах и возможностях подталкивает ввязаться в перепалку, но пожалуй не буду у каждого свой стиль у Вас просто свой Я же Вам намекал что QueryUnload нужен мне тока на тот случай если я забуду кнопкУ закрытия на форму кинуть . В этом случае на этапе тестирования и разработки будут некоторые трудности особенно если форма модальная склероз однако Ну не нужен мне ни этот метод ни этот крестик когда программа готова Хотя может Вы приведете пример обратного ? А так это всё просто голословно хотя и выглядит очень умно. Так как насчет контрпримера ? И народ поучиться. В каком месте это мне аукнется особенно если крести на форме серого цвета а ? На кой ляд мне отдельный метод если выход из формы один? Про стандарты microsoft скажу что они довольно неплохи, но к сожалению в фокспро их приходиться дорабатывать Я люблю разработчиков своей среды разработки, А Вы похоже нет. Конечно у всех есть свои недоработки и у них и у меня и у Вас уверен тоже Ну а про nodefault далось оно вам сказал же описка. Вы наверное давно им не пользовались раз так категоричны. Дело в том, что даже в 7.0 Вам не удасться закрыть окно метода если скобочки навесить автопроверка однако это напоминаю если забыли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2005, 11:03 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
автор крестика то немае А Ctrl-F4? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2005, 16:41 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
ну вот тогда если метод сработает и будет выход эквивалинтный нажатию кнопки "отмена" страховка то стоит Для меня форма типичное окно диалога в стиле виндоус из него возможно два пути выхода либо ОК либо Отмена . Вот крестик та самая отмена и есть. Такая у меня вот идеология. Готов послушать критику. Если не делать окно формы главным окном, что я не приемлю алергия знаете ли наэксперементировался уже, то крестик как таковой не очень то и нужен. А как у Вас организовано? з.ы. если пользователь достаточно умен что бы нажать Ctrl-F4 - это его проблемы получит выход без сохранения он же знал что нажимал как Вы думаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2005, 17:03 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
Ну а я делаю ВСЕ на ТОП-левел формах.. плохо это или хорошо = не знаю, мне нравится... Крестик отключаю, но правда из-за того, что на формы вешаю скины (заказчик часто так хочет) а копать как они действуют нету ни времени ни желания (чужой код), соответственно есть кнопка выхода на каждой форме.. хотя.. недавно заказчик все пытался на крестик закрыть, возможно придется переделать В принципе жалоб не наблюдалось, хотя все это дело вкуса.. или стиля :-) Вот мне например главное окно фоксе не нравится.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2005, 17:54 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
Hi leaf! 1) Закрой ЦЕЛИКОМ приложение, или ради прикола попробуй ShutDown сделать при работающей программе. И не надо только говорить что "никто так не поступает" - это ТВОЯ проблема как разработчика. 2) Ты никогда не задумывался, почему даже у MESSAGEBOX() есть крестик закрытия? P.S. Не в обиду будь сказано, но лично для меня наличие "задизейбленного" крестика в программе (если это конечно не игрушка какая, коим простителен нестандартный интерфейс) признак недостаточного профессионализма разработчика - если он такую простую вещь победить не может, то что можно ожидать от всего остального :( Posted via ActualForum NNTP Server 1.2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.05.2005, 04:09 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
могу как раз и не дисэблить крестик просто при его нажатии будет выход из формы без сохранения изменений и больше ничего, но разве это страшно ? На мой взляд естественное развите событий разве не так. Естественно там кроме thisform.release есть небольшая приписка типа признак что это выход по escape По поводу первого пункта не совсем понял проблему? Если объясните может и пойму что Вам ответить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2005, 11:18 |
|
||
|
Как закрыть все формы на экране?
|
|||
|---|---|---|---|
|
#18+
Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2006, 10:55 |
|
||
|
|

start [/forum/topic.php?all=1&fid=41&tid=1590355]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
156ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 488ms |

| 0 / 0 |
