名前 題名 ▼ takiさん > ▼ takaさん > > > Button3変数 > > 変数は ここにありますよという、封筒の宛先にすぎませんので > > Button3 にnilをいれても 封筒の宛先を砂消しで消すことにしかなりませんので宛先の住所地はなくなりません。 > > Button3本体を消滅させるのは巡航ミサイルの Free 手続きです > > ミサイルを飛ばした後は、だれが撃ったかわからないようにButton3変数を焼却します > > > > PanelArray[i]に登録したものを動的に破棄したい場合は、 > > if Not(csDestroyingHandle in ControlState) And Assigned(PanelArray[i]) then > > begin > > // try exceptでくくったほうが安全 > > FreeAndNil(PanelArray[i]); > > // 同じ配列内で親子関係のパネルがネストされている場合は注意 > > end; > > > > 配列にnilを代入していたコードを以下のように変更しました。 > procedure TForm1.Button3Click(Sender: TObject); > var > i:integer; > begin > for i := 0 to High(FPanelArray1) do begin > if Not(csDestroyingHandle in ControlState) And Assigned(FPanelArray1[i]) then begin > FreeAndNil(FPanelArray1[i]); > end; > end; > end; > > 5枚のパネルは消えて、Self.ControlCountの値も9から4に戻りました。 > > 基本は自分で生成したコンポーネントは自分で始末するべきなんでしょうね。 > でも、もし忘れていてもForm(Owner)が知っているのでFormが始末してくれるんですね。 > > 勉強になりました。ありがとうございます。 GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link