Going with Mikes steps, you create the second form in the first forms Init. At that ime the first form is not yet visible and that will be the reason the second form is behind, its creation starts later, but finishes fully before the first form init, show and activate of the first form happens after second form init finished. By the way LISA is mnemonic for Load,Init,Show,Activate and tells you that this is the order of events, so what happens is first.L, first.I, but not yet finished, then called from first.I second.LI, fully, and that already is the time when Windows knows second.hwnd and its zorder, while first is not yet fully inited. second.SA (show and activate) do not happen before first.SA, but the finish of the init is the time the zorder of a form is determined by Windows, not the Show.
If you still want to try, the [tt]DO FORM MenuForm NAME THISFORM.oMenu NOSHOW[/tt] should rather be done the first time you'd like to do [tt]THISFORM.oMenu.Visible = .T.[/tt], as that will cause it to appear in front. You then will need to but check by VARTYPE() or ISNULL(), whether THISFORM.oMenu is an object or still .NULL.
But as I already said and you closed it, creating the form as usual is good enough anyway, Mikes approach is advanced, but the recipe obviously doesn't work this way. I use such a report, where I have a form filtering from about 10000 items, which are loaded into a datasession cursor. That then only nees to be done once per application start and in that case it matters, but not in your case.
Bye, Olaf.