ScrollBox上に動的生成したLabelを解放したい

解決


ミレ  2011-11-10 12:41:19  No: 41201  IP: 192.*.*.*

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;  //解放できずに残ってしまう

編集 削除
ミレ  2011-11-10 12:43:21  No: 41202  IP: 192.*.*.*

【訂正】
ScrollBox1上の方のコードで
「NewLbl.Parent := Form1;」は不要です。

編集 削除
ミレ  2011-11-10 12:52:01  No: 41203  IP: 192.*.*.*

自己解決しました。

FindComponentできてないのが問題だ、ということで、
何となく頭に「ScrollBox1.」を付けたら大成功。
Parentを指定して動的生成したときは、こうやって消すのですね。

TLabel(ScrollBox1.FindComponent('NewLbl_1')).Free;

ありがとうございました。

編集 削除
ミロ  2011-11-10 14:33:50  No: 41204  IP: 192.*.*.*

違います。この場合Parentではなく、Ownerに指定したものが重要です。
Parentは単にどこの上に表示するかという見た目の指定で使われます。
それに対しOwner(Createで引数に指定したコンポーネント)は子の管理を担当するので、
FindComponentはこのOwnerに指定したコンポーネントに対して行う必要があります。

編集 削除
ミレ  2011-11-10 23:33:45  No: 41205  IP: 192.*.*.*

Ownerに指定したものが重要だったのですね。
ミロさん、御指摘ありがとうございました。

編集 削除
ミレ  2011-11-10 23:34:19  No: 41206  IP: 192.*.*.*

(解決チェックし忘れました)

編集 削除