[別画面で開く]ボタンがクリックされた場合、ActiveXコントロールのActivateメソッドを呼び出します。Activateメソッドを使用すると、別ウィンドウで実行することができます。また、表示したウィンドウを閉じる場合は、Deactivateメソッドを使用します。
この手続きでは、ボタンに表示されている文字列を判定して、1つのボタンで、開く動作と閉じる動作ができるようにしています。
ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. PROCEDURE DIVISION. IF "Caption" OF CmCommand2 = "別画面で開く" THEN INVOKE SelectColorControl1 "Activate" MOVE "別画面を閉じる" TO "Caption" OF CmCommand2 ELSE INVOKE SelectColorControl1 "Deactivate" MOVE "別画面で開く" TO "Caption" OF CmCommand2 END-IF
モジュールをビルドし、作成したアプリケーションを実行してみてください。アプリケーションを起動した時点では、配置したActiveXコントロールはフォーム上にそのまま表示され、オプションボタンの選択により、フォームの背景色を変更することができます。
[別画面で開く]ボタンをクリックすると、配置したActiveXコントロールは別ウィンドウに表示されます。
ポイント
ActiveXコントロールがActivateメソッドにより別ウィンドウに表示されると、フォームに配置されていたActiveXコントロールは消去されます。
つねに、別ウィンドウで表示されるようなアプリケーションを作成する場合は、配置したActiveXコントロールが見えないように設計時に大きさを調整しておくか、ActiveXコントロールのプロパティ設定ダイアログボックスで、[共通]タブの[可視]のチェックをはずしてください。Activateメソッドの詳細は、「9.3.5 Activateメソッドの役割」を参照してください。
ActiveXコントロールは、呼び出し元のフォームが開かれたときに一度だけ初期化されますが、ActiveXコントロールのOpenedイベントは、別ウィンドウおよび呼び出し元のフォームに表示されるごとに発生します。Openedイベントの詳細は、「9.3.6 OpenedイベントとClosedイベント」を参照してください。
ActiveXコントロールを別ウィンドウで表示しても、そのウィンドウが閉じられたとき、呼び出し元フォームにCloseChildイベントは発生しません。ウィンドウが閉じられたタイミングを知りたい場合は、ActiveXコントロール側のClosedイベント内で、ウィンドウが閉じられたことを意味するカスタムイベントを発生させ、呼び出し元フォームにそのカスタムイベントが通知されるようにします。
Activateメソッドの代わりにDoModalメソッドを使うと、開いたウィンドウが閉じられるまで呼び出し元のフォーム(MainForm)を無効状態にできます。つまり、ActiveXコントロールは、ダイアログボックスを使用するように、モーダルなウィンドウで表示されます。
ActivateメソッドとDoModalメソッドの動作の違いは、「CallFormメソッドとOpenFormメソッドの違い」と似ています。