Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема с обработкой ошибки во внешней форме / 17 сообщений из 17, страница 1 из 1
01.09.2020, 14:57
    #39994503
glamis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой ошибки во внешней форме
В процессе работы программы вызывается внешняя форма
Код: vbnet
1.
2.
3.
4.
5.
6.
try
	DO FORM (_formname) TO rc
CATCH TO _oerr
	rc=.f.
	=MESSAGEBOX(catcherr(_oerr))
ENDTRY 


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

Кто-нить сталкивался с такой проблемой?
...
Рейтинг: 0 / 0
02.09.2020, 07:35
    #39994678
asdor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой ошибки во внешней форме
glamis,

Вполне возможно чего то не знаю.
Но что такое
Код: sql
1.
DO FORM (_formname) TO rc 



Что вообще вы имели ввиду этими "TO"

Изобретение собственного синтаксиса?
И фокс не ругается?
...
Рейтинг: 0 / 0
02.09.2020, 07:46
    #39994679
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой ошибки во внешней форме
asdor, в хэлп загляни
http://www.foxclub.ru/rhproject/project/html/a727f12a-4d9f-45ca-aa01-c1bea7de9749.htm TO VarName

Указывает переменную для хранения значения, возвращаемого формой. Если переменная еще не существует, Visual FoxPro автоматически создаст ее. Используйте команду RETURN в процедуре события Unload формы для указания возвращаемого значения. Если вы не указали возвращаемое значение, то будет возвращено дефолтное true (.T.). Если вы используете TO, то свойство формы WindowType должно быть установлено в 1 (Modal). Если процедура события Init формы возвращает .F., экземпляр формы не будет создан,и процедура события Unload не вернет значения в VarName.

glamis, думаю надо пример кода с демонстрацией ошибки.
...
Рейтинг: 0 / 0
02.09.2020, 07:58
    #39994680
asdor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой ошибки во внешней форме
Dima T
asdor, в хэлп загляни
http://www.foxclub.ru/rhproject/project/html/a727f12a-4d9f-45ca-aa01-c1bea7de9749.htm%5DTO]http://www.foxclub.ru/rhproject/project/html/a727f12a-4d9f-45ca-aa01-c1bea7de9749.htm]TO VarName



Сорян. И правда. Просто не использую модальных форм. Никогда. Потому конструкция вызвала удивление)
...
Рейтинг: 0 / 0
02.09.2020, 08:56
    #39994689
glamis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой ошибки во внешней форме
Вопрос решил: помогла конструкция NAME:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
_vName=sys(2015)
try
	Do FORM (_formname) NAME (_vName) to rc
catch to _oerr
	messagebox(catcherr(_oerr))
	&_vName..release
Endtry



При штатном завершении
isnull(&_vName)=.t.

PS. макрос использую, тк в моем случае возможно рекурсивное использование
...
Рейтинг: 0 / 0
02.09.2020, 20:03
    #39994984
asdor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой ошибки во внешней форме
glamis
макрос использую, тк в моем случае возможно рекурсивное использование

Рекурсивное использование модальной формы?
Ох... готовьтесь хлебнуть)
...
Рейтинг: 0 / 0
03.09.2020, 19:38
    #39995354
glamis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой ошибки во внешней форме
asdor,
Использую, давно и очень успешно. Только не надо понимать рекурсию как расчет факториала.
...
Рейтинг: 0 / 0
04.09.2020, 06:34
    #39995452
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой ошибки во внешней форме
glamis
PS. макрос использую, тк в моем случае возможно рекурсивное использование

Тут достаточно объявить переменную как LOCAL
...
Рейтинг: 0 / 0
04.09.2020, 07:32
    #39995457
asdor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой ошибки во внешней форме
glamis
asdor,
Использую, давно и очень успешно.

Вызов из одной модальной формы, другой, неизбежно приведет к "недоразумениям".
Модальная форма, она потому и модальная, что кроме нее, больше ничего на экране не доступно.
Вы же нарушаете этот принцип.
И говорите что все ок.
Ну-ну)

Если же речь, об обычных формах, то конечно все в порядке, сколько угодно, но тогда вызов в первом топике, не верен.
...
Рейтинг: 0 / 0
04.09.2020, 07:46
    #39995462
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой ошибки во внешней форме
asdor
Вызов из одной модальной формы, другой, неизбежно приведет к "недоразумениям".

С чего вдруг? Например одна форма вызвала форму выбора из справочника, там вызвали форму добавления в справочник, там выбор из другого справочника и т.д. В чем криминал?

Если использовать просто DO FORM, то проблем нет, а если код-обертку glamis`а, то будет проблема с используемыми переменными т.к. по умолчанию область видимости PRIVATE.
...
Рейтинг: 0 / 0
04.09.2020, 08:39
    #39995467
asdor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой ошибки во внешней форме
Dima T
В чем криминал?

Криминала нет, если форма не модальная.
В случае модальной первой, и последующих форм, регулярно происходит, не знаю каким образом, но модальная форма прячется за основную, основная недоступно, программа висит.
Это основное что вспомнил. На фоксклубе обсуждали как то это. Не помню какие еще глюки.
Кстати, трудно воспроизводимые при отладке. Но когда пользователей много, то это регулярно.
Я просто отказался от модальных. Только messagebox)))

В фреймвоке, реализовал "псевдомодальность".
Т.е. при вызове, "псевдомодальной" формы, делаю недоступной вызывающую (enable=.f.)
При закрытии, обратно все разрешаю.
...
Рейтинг: 0 / 0
04.09.2020, 09:04
    #39995475
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой ошибки во внешней форме
asdor
Dima T
В чем криминал?

Криминала нет, если форма не модальная.
В случае модальной первой, и последующих форм, регулярно происходит, не знаю каким образом, но модальная форма прячется за основную, основная недоступно, программа висит.

Моя прога на 6 фоксе (учет товара в магазине) из только модальных форм отработала более 10 лет в ежедневном режиме на 20+ рабочих местах и ни разу не было ничего подобного.

Нынче тоже использую модальные для ожидания ввода из справочников, только вызываю через Form.Show(1), тут тоже никогда не видел данной проблемы.

Такую проблему я наблюдал, но причиной ее был вызов SetFocus() на контрол первой формы, вроде по таймеру на той же первой форме, может по событию какому-то, не помню.
...
Рейтинг: 0 / 0
04.09.2020, 10:47
    #39995511
asdor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой ошибки во внешней форме
Dima T,
Это не единственная проблема.
Работает - повезло)
Подход, в принципе, не верный. ИМХО.

Но я бы, работающее, трогать не стал))))

вот навскидку, первое попавшееся
http://forum.foxclub.ru/read.php?29,614664,page=1
...
Рейтинг: 0 / 0
04.09.2020, 12:38
    #39995585
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой ошибки во внешней форме
asdor
Это не единственная проблема.
Работает - повезло)
Подход, в принципе, не верный. ИМХО.

Отчасти согласен, иногда работать с такой прогой не очень удобно, но писать в таком стиле проще. Той проги уже нет. В нынешних модальные вызовы свел к минимуму, но они есть. Сейчас у меня все формы немодальные, но если надо чтобы форма что-то вернула, и потом с этим чем-то дальше в коде надо работать, то тут я ее вызываю модально.
В общем я криминалом модальные формы не считаю.

asdor
вот навскидку, первое попавшееся
http://forum.foxclub.ru/read.php?29,614664,page=1

По ссылке похоже тот же старый косяк с фокусом, только фокус не явно в коде отправляется не туда, а с помощью свойств AllwaysOnTop, AllwaysOnBottom.

К сожалению VFP9 дописывали быстро-быстро, а потом вообще забросили, поэтому не успели все косяки нормально устранить.
...
Рейтинг: 0 / 0
05.09.2020, 08:51
    #39995873
glamis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой ошибки во внешней форме
Dima T,
У модальной формы есть одно, я считаю, главное преимущество - она управляет процессом. Переключиться из нее можно только туда, куда она разрешит (прописано в сценарии). Иначе - начинается бардак в работе пользователя. Мало ли что ему взбредет в голову... Видел я таких пользователей, которые чуть не экран пытались пододвинуть под курсор от мыши.
...
Рейтинг: 0 / 0
05.09.2020, 20:47
    #39995949
asdor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой ошибки во внешней форме
glamis
Dima T,
У модальной формы есть одно, я считаю, главное преимущество - она управляет процессом. Переключиться из нее можно только туда, куда она разрешит (прописано в сценарии). Иначе - начинается бардак в работе пользователя. Мало ли что ему взбредет в голову... Видел я таких пользователей, которые чуть не экран пытались пододвинуть под курсор от мыши.

Нет такого преимущества.
Модальная форма, останавливает ход программы, на своем вызове, и продолжает после ее закрытия.

Я понимаю старье, нет смысла дорабатывать.
Но новое так писать... Оглянитесь немного, на другие языки. Везде - модальность зло. Почти что паблик)))
...
Рейтинг: 0 / 0
06.09.2020, 09:30
    #39995975
glamis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с обработкой ошибки во внешней форме
asdor,
Спор о преимуществах и недостатках метода не имеет смысла в отрыве от конкретики. Модальная форма живет по принципу - можно только то что разрешено, модлес - можно то что доступно.

Кто сказал, что модал останавливает программу - модал переключает программу на исполнение конкретного действия. И только. Грубо говоря во время ввода наименования контрагента или его ИНН можно переключиться и начать ввод наименование номенклатуры. И не закончив с номенклатурой начать просматривать курс валют. Но зачем? Закончи с контрагентом, переключись на номенклатуру, и тд. Хотя никто не запрещает предусмотреть все эти возможности в модале.

Главное не мода на тип формы, а конкретные потребности системы. В конце-концов в каждый конкретный квант времени человек делает какое-то одно действие. Вот и пусть сделает. А прога его подождет.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проблема с обработкой ошибки во внешней форме / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]