遭遇する可能性があるのは、2つのウィンドウが同じサイズ(またはフォーム2の方が大きい)であり、フォーム1が物理的に重なっていることです...両方のフォームが全画面表示領域を占める最大化モードに設定されていない限り。
とは言うものの、デフォルトでは、VFPがフォームを実行するとき、基本的にフォーム名に相関する変数名があります...つまり、実際のフォームの名前である場合は「Form1」と「Form2」です(これは疑わしいですが、テスト目的の場合があります)。
これで、サンプルを実行しています。フォーム1が表示され、ボタンをクリックすると、フォーム2が表示されます。(フォーム1の別のインスタンスを再実行するのではなく)「フォーム1に戻る」などのボタンをフォーム2に配置できます。そのクリックイベントでは、次のことができます
if wexist( "form1" )
activate window form1
endif
同様に、メインフォームで、フォーム2に戻りたいが、すでに開いているフォームの2番目のインスタンスを再作成したくない場合は、次のようなコードを使用できます。
if wexist( "form2" )
*/ Show the already loaded form
activate window form2
else
*/ Not loaded yet, do so now
do form form2
endif
あるフォームを別のフォームの中に表示することはできますが、少し面倒で慣れている場合もあります...これらは「フォームセット」と呼ばれます。そのためには、基本的に、すべてのフォームを1つの全体的な「フォームセット」に事前に構築します。単一のフォームを作成することから始めます。次に、「FORM」メニュー項目から、「CreateFormSet」のメニューオプションをクリックします。親の「フォームセット」レベルが作成され、フォーム自体が子の位置に移動します。次に、「フォーム」メニューから「新しいフォームの追加」を再度選択し、必要な数だけ追加できます。これを行うと、次のフォームを起動するために「do form」呼び出しを明示的に実行するだけでなく、すべてのフォームが作成されることに注意してください。ウィンドウごとにタイトルを設定したり、それらの物理的な位置を移動したりすることができます...フォームを保存して実行します...
あなたが試みるかもしれないもう一つの代替案は、「コンテナ」を使って作業し、自分でクラスライブラリを構築することです。コンテナは、他のコントロールを持つことができるコントロールに他なりません。利点は、一度作成してフォームの一部として使用したり、同じ最初のフォームを呼び出し続けることなく、必要に応じて複数のフォームで使用したりできることです。たとえば、住所情報のコンテナ。Company、Address1、Address2、Cityなどのラベル/テキストボックスがあり、それを保存できます。ここで、出荷先と請求先が記載された請求書が必要です。同じフォームで同じ「レイアウト」コンテナクラスの2つのインスタンスを使用できます。それらは同じように見え、同じように動作します。「コントロールソース」をそれぞれのフィールドにバインドするだけです。
これにより、「タブ付きページ」の使用を開始し、1つの「ページ」に関連付けられているすべてのもののコンテナーを作成することもできます。次に、すべてのコントロールを個別に1つのフォームにまとめるのではなく、そのコンテナをページに配置します...事前に時間がかかりますが、下流の管理にもメリットがあります。