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

解決


ミレ  2011-11-10 21:41:19  No: 41201

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 21:43:21  No: 41202

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


ミレ  2011-11-10 21:52:01  No: 41203

自己解決しました。

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

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

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


ミロ  2011-11-10 23:33:50  No: 41204

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


ミレ  2011-11-11 08:33:45  No: 41205

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


ミレ  2011-11-11 08:34:19  No: 41206

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加