визуальное освобождение формы Foxpro без выполнения оставшегося кода - PullRequest
0 голосов
/ 15 мая 2018

У меня есть старое приложение, встроенное в Visual Foxpro 9. Я хочу завершить форму, не выполняя оставшийся код.Событие Form.Release освобождает форму после выполнения оставшегося кода в событии, из которого он вызван.Я хочу использовать это при возникновении любой ошибки, может кто-нибудь помочь?

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

Ответы [ 3 ]

0 голосов
/ 16 мая 2018

Main.prg

Do Form form1
Do Form form2
Do form formN
Read Events

Errhandle.prg

lparameters tnerror, tcMessage, tcProg, tnLineNo
Local lcError
TEXT to m.lcError textmerge noshow
Error No: << m.tnerror >>. Message: << m.tcMessage >>
Source: << m.tcProg >> at line << m.tnLineNo >>
ENDTEXT
Messagebox(m.lcError, 0+4096, "Error", 5000)

Метод формы, где ожидается ошибка:

Local loForm
loForm = thisform
On Error ;
  return ErrHandle(Error( ), Message( ), Program( ), Lineno( )) ;
         and m.loForm.Release()
local lc
lc = "Hello"
If m.lc = 1 && explicit error


EndIf

_screen.Caption = "This code wouldn't run"
On Error

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

0 голосов
/ 06 августа 2018

В случае ошибки формы введите следующий код:


LPARAMETERS nError, cMethod, nLine

* Обработать ошибку / очистить / MessageBox / Записать ошибку в файл или таблицу / и т. Д.

thisform.release

ВЕРНУТЬСЯ К МАСТЕРУ


** Надеюсь, это поможет

0 голосов
/ 15 мая 2018

Main.Prg

On Error Do ErrHandle With Error( ), Message( ), Program( ), Lineno( )

Do Form form1
Do Form form2
Do form formN
Read Events


Procedure ErrHandle(tnerror, tcMessage, tcProg, tnLineNo)
    Local lcError
    TEXT to m.lcError textmerge noshow
Error No: << m.tnerror >>. Message: << m.tcMessage >>
Source: << m.tcProg >> at line << m.tnLineNo >>
    ENDTEXT
    Messagebox(m.lcError, 0+4096, "Error", 5000)
    Local loForm
    loForm = _vfp.ActiveForm
    If !Isnull(m.loForm)
        m.loForm.Release()
    Endif
Endproc

Это просто освободит активную форму.

...