PUBLIC oForm oForm = CREATEOBJECT('FirstForm') oForm.Show() Define Class FirstForm As Form Add Object txt1 As TextBox With Top=10,Left=10 Add Object txt2 As TextBox With Top=50,Left=10 Add Object cmdSecond As CommandButton With ; Caption='Call Modal Form',AutoSize=.T.,Top=100,Left=10 Procedure cmdSecond.Click Local loForm, luVal1, luVal2 loForm = Create("Secondform") loForm.Left = thisform.Left + 100 loForm.Top = thisform.Top + 100 loForm.Show(1) * Following code waits for secondform to become visible=.f. * in any manner luVal1 = loForm.txtStart.Value luVal2 = loForm.txtEnd.Value Release loForm * Show result Thisform.txt1.Value = m.luVal1 Thisform.txt2.Value = m.luVal2 Endproc Enddefine Define Class SecondForm As Form Add Object txtStart As TextBox With Top=10,Left=10,Value=Date()-7 Add Object txtEnd As TextBox With Top=50,Left=10,Value=Date() Add Object cmdRelease As CommandButton With Top=100,Left=10,Caption='Exit' Procedure cmdRelease.Click Thisform.Hide() Endpro EnddefineThe technique shown above is also a way to get multiple values from a modal form instead of returning a value from unload.