ローカル変数を使用したフォーム インスタンスの作成
フォームがメモリ内に存在する間の制御 への移動
モーダル フォームの一意なインスタンスを安全に作成するには、イベント ハンドラの中でローカル変数を新規インスタンスへの参照として使用します。ローカル変数を使用する場合は、ResultsForm が自動作成されるかどうかは問題になりません。イベント ハンドラのコードでは、フォームを表すグローバル変数を参照しません。次に例を示します。
procedure TMainForm.Button1Click(Sender: TObject);
var
RF:TResultForm;
begin
RF:=TResultForm.Create(self)
RF.ShowModal;
RF.Free;
end;
void __fastcall TMainMForm::FirstButtonClick(TObject *Sender)
{
TResultsForm *rf = new TResultsForm(this); // rf is local form instance
rf->ShowModal();
delete rf; // form safely destroyed
}
このイベント ハンドラでフォームのグローバル インスタンスを決して使用しないようにしている方法に注意してください。
一般に、アプリケーションではフォームのグローバル インスタンスを使用します。ただし、モーダル フォームの新規インスタンスが必要で、そのフォームの使用がアプリケーションの個別のセクション(単一の関数など)に限られる場合、そのフォームを取り扱う最も安全かつ効率的な方法は通常、ローカル インスタンスです。
もちろん、モードレス フォームのイベント ハンドラでは、ローカル変数を使用できません。フォームが使用されている間はフォームが確実に存在するように、フォームのスコープがグローバル スコープでなければならないからです。Show 関数はフォームが開くとすぐに制御を返すので、そこで使用されていたローカル変数は、直ちにスコープの外に出ることになります。