PRIVATE goApp LOCAL loForm1, loForm2, loRef goApp = CREATEOBJECT('AppManager') loForm1 = CREATEOBJECT("_Form") loForm1.Name = "MyForm1" loForm2 = CREATEOBJECT("_Form") loForm2.Name = "MyForm2" loRef = goApp.GetFormObjectRef(loForm2.Name) RETURN DEFINE CLASS _Form AS Form PROCEDURE Init goApp.Add2FormList(THIS) ENDPROC ENDDEFINE DEFINE CLASS AppManager AS CUSTOM ADD OBJECT FormList AS Collection PROCEDURE Add2FormList LPARAMETERS toForm IF TYPE('toForm') <> 'O' RETURN .f. ENDIF IF UPPER(toForm.BaseClass) <> [FORM] RETURN .f. ENDIF LOCAL lcHWND lcHWND = TRANSFORM(toForm.HWND) THIS.FormList.Add(toForm, TRANSFORM(toForm.HWND)) ENDPROC PROCEDURE GetFormObjectRef LPARAMETERS tcName tcName = ALLTRIM(UPPER(tcName)) LOCAL llFound, loForm FOR EACH loForm IN THIS.FormList IF UPPER(loForm.NAME) == tcName AND UPPER(loForm.BASECLASS) = 'FORM' llFound = .T. *!* BAM! As soon as the next line executes, *!* loForm is no longer an object! EXIT ENDIF ENDFOR IF llFound AND VARTYPE(loForm) <> "O" MESSAGEBOX("loForm is no longer an object!",16,"ERROR!") loForm = .NULL. ENDIF RETURN loForm ENDPROC ENDDEFINE