サブフォームをButton1のクリックで作成し、
Button2でリリースしたいのですが、次のようなコードにすると、
初めてButton1を押した時には、作成されるのですが、Button2でリリースしても
2回目以降は作成されません。つまり、Form2のインスタンスは無くても
Form2はnilでは無いようです。
nilとは、インスタンスが無い状態を表すのではないのでしょうか?
また、Form2のインスタンスがない状態は、どのように調べたらよいのでしょうか。
よろしくお願いします。
procedure TForm1.Button1Click(Sender: TObject);
begin
if Form2 = nil then
Form2 := TForm2.Create(nil)
else
exit;
Form2.show;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if Form2 <> nil then
Form2.release;
end;
> nilとは、インスタンスが無い状態を表すのではないのでしょうか?
違います。そのインスタンス変数がなにも参照を持ってないことを示します。
> 2回目以降は作成されません。つまり、Form2のインスタンスは無くても
> Form2はnilでは無いようです。
これは当然です。1回目で
> Form2 := TForm2.Create(nil)
と、Form2 という名前の変数に代入してますね。でも
> Form2.release;
このあと、Form2 には nil を代入してませんから、インスタンスが無くなっても
Form2 には、代入されたままになっています。Release は遅延を利用して
インスタンスを破棄するメソッドですが、変数に自動的に nil を代入するわけ
ではありません。
ちょっと勘違いをしていたようです。
どうもありがとうございました。