ローカル変数を使って VCL フォームのインスタンスを作成する

提供: RAD Studio
移動先: 案内検索

VCL フォーム アプリケーションの作成方法 への移動


モーダル VCL フォームの一意のインスタンスを作成するための安全な方法は、イベント ハンドラ内のローカル変数を使用して、新しいインスタンスを参照することです。 ローカル変数を使用する場合、フォームを自動生成するかどうかは関係ありません。 イベント ハンドラ内のコードでは、グローバル フォーム変数への参照は行いません。 RAD Studio を使用して、次のプロシージャは、モーダル フォーム インスタンスを動的に作成します。 これは、起動時に 2 つ目のフォームの呼び出しを(任意)で削除します。

VCL アプリケーションの構築は、次の手順で行います:

  1. プロジェクト ディレクトリを作成。
  2. プロジェクトに 2 つのフォームを作成。
  3. 2 つ目のフォームの呼び出しを起動時に削除(任意)。
  4. フォームをリンク。
  5. モーダル フォームを作成、表示するコントロールを、メイン フォーム上に作成。その後、イベント ハンドラを記述。
  6. アプリケーションをビルドして実行。


2 つのフォームを作成するには

  1. [ファイル|新規作成|その他...|Delphi プロジェクト(または %C++Builder% プロジェクト)] を選択し、[VCL フォーム アプリケーション]アイコンをダブルクリックします。 VCL フォーム デザイナ に Form1 が表示されます。
  2. [ファイル|新規作成|その他...|Delphi プロジェクト|Delphi ファイル(または %C++Builder% プロジェクト)] を選択し、[フォーム]アイコンをダブルクリックします。 VCL フォーム デザイナ に Form2 が表示されます。


任意で Form2 の呼び出しを起動時に削除するには

  1. [プロジェクト|オプション|フォーム] を選択します。 [プロジェクト オプション] ダイアログが表示されます。
  2. Form2 を [自動作成フォーム]リストで選択し、[>] をクリックします。 Form2 が [使用可能フォーム]リストに移動します。
  3. [OK] をクリックして、ダイアログを閉じます。


Form1 と Form2 をリンクするには

  1. Form1 を選択し、[ファイル|ユニットを使う]を選択します。 [ユニットの使用]ダイアログが表示されます。
  2. Form2(Form1 が参照する必要があるフォーム)を、このダイアログで選択します。
  3. [OK] をクリックします。

Delphi の場合、ユニット名 Unit2 を含む uses 句は、Unit1 の実装セクション内に配置されます。

C++ の場合、#include "Unit2.h" 指令が、Unit1.h に追加されます。


Form2 から Form1 を表示する

  1. 必要に応じて Form1 を選択し、それから、ツール パレット[Standard] ページから、フォームに TButton を配置します。
  2. オブジェクト インスペクタ で Button1 を選択した状態で、[イベント]タブ上で OnClick イベントをダブルクリックします。 コード エディタ が、TForm1.Button1Click(Delphi)、または、TForm1::Button1Click(C++)のイベント ハンドラ ブロックにカーソルがある状態で表示されます。
  3. Delphi の場合、このイベント ハンドラ ブロックに単純にカーソルを挿入し、ローカル変数を定義する次の文を入力します:
var FM: TForm2;
C++ の場合、次の変数宣言を入力します:
TForm2 *FM;
  1. カーソルをイベント ハンドラ ブロックに挿入し、次のコードを入力します:
FM := TForm2.Create(self);
FM.ShowModal;
FM.Free; 
FM = new TForm2( this );
FM->ShowModal();
FM->Free();


アプリケーションをビルドして実行するには

  1. プロジェクトでファイルを保存します。それから、[実行|実行」を選択します。 アプリケーションが実行され、Form1が表示されます。
  2. ボタンをクリックします。Form2 が表示されます。
  3. Form2 が表示されたら、Form1 のクリックしてアクティブにしてみます。 何も発生しません。
Form2 の右上端の X をクリックします。 Form2 は閉じられ、Form1 がアクティブ フォームになります。

関連項目