Form1上にLabelの動的生成と解放は下記方法ででているのですが、
ScroolBar上に生成した場合には同じコードでは解放できません。
どのようにすれば解放できるのでしょうか?
よろしくお願いいたします。
//-------Form1上-------
//生成
NewLbl := TLabel.Create(Form1);
NewLbl.Parent := Form1;
NewLbl.Name := 'NewLbl_1';
NewLbl.Caption := 'あいう';
//解放
TLabel(FindComponent('NewLbl_1')).Free; //解放できて表示も消える
//-------ScrollBox1上-------
//生成
NewLbl := TLabel.Create(ScrollBox1);
NewLbl.Parent := ScrollBox1;
NewLbl.Parent := Form1;
NewLbl.Name := 'NewLbl_1';
NewLbl.Caption := 'かきく';
//解放
TLabel(FindComponent('NewLbl_1')).Free; //解放できずに残ってしまう
【訂正】
ScrollBox1上の方のコードで
「NewLbl.Parent := Form1;」は不要です。
自己解決しました。
FindComponentできてないのが問題だ、ということで、
何となく頭に「ScrollBox1.」を付けたら大成功。
Parentを指定して動的生成したときは、こうやって消すのですね。
TLabel(ScrollBox1.FindComponent('NewLbl_1')).Free;
ありがとうございました。
違います。この場合Parentではなく、Ownerに指定したものが重要です。
Parentは単にどこの上に表示するかという見た目の指定で使われます。
それに対しOwner(Createで引数に指定したコンポーネント)は子の管理を担当するので、
FindComponentはこのOwnerに指定したコンポーネントに対して行う必要があります。
Ownerに指定したものが重要だったのですね。
ミロさん、御指摘ありがとうございました。
(解決チェックし忘れました)
ツイート | ![]() |