掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DelphiXE5のFreeでControlが消えない (ID:45332)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
自分の手元で確認できないのに、適当なことを言って済みませんでした。 ハッキリ言って私にはお手上げです。どなたか分かる方いませんか〜! ヘルプを見てみましたが特にVCLと変わらず、TComponentはVCLと同一ですので、なぜ改善されないのか?です。 http://docwiki.embarcadero.com/Libraries/XE5/ja/FMX.Memo.TMemo.Create これ、TPanelとTMemo、両方とも使える状態で残っちゃってるんですか? で、、、なるべく一般的な書き方をしたほうがトラブルが少ないと思いますので、いくつかアドバイスをさせてください。 (懲りずに適当なこと言いますので、話半分でお願いします!) ・ 「フォーム①でボタン1をクリック」 → めっちゃ分かりにくいです。「Form1でButton1をクリック」と記述してください。 ついでに言うと、丸数字は混乱の元なので一切使わない方が良いですよ。(1)とかどうですか。 ・ Form2のStart1、Start2メソッドについて。 現在、↓このようになってますが、 Form2.Start1(Self); procedure TForm2.Start1(Sender: TObject); 引数が要らないなら、↓このように出来ます。さらに、括弧は省略してもかまいません。 Form2.Start1(); procedure TForm2.Start1(); ・ いくつかちょっと書き直してみますね。ぜひやってみて欲しいです。 procedure TForm2.Button1Click(Sender: TObject); begin FreeAndNil(zPanel); // オブジェクトの変数を使い回すならFreeした後にnilを代入する。これにより、 // (1) nilならば空っぽであると判別できる。クラス内のオブジェクト変数の初期値はnilです。 // (2) 誤って何度もFreeしてしまうミスを防げる。nilをFreeしても、スルーされるだけなので。 Close; end; procedure TForm2.Start1(); begin if Assigned(zPanel) then Exit; // zPanelが空っぽでない場合は処理しない。 zPanel := TPanel.Create(Self); // TForm2クラスのメソッドなのでSelfと書けばForm2と同義。 zPanel.Parent := Self; zEdit := TMemo.Create(zPanel); // OwnerをTPanelにしておく。 zEdit.Parent := zPanel; zEdit.SetBounds(0, 0, 100, 50); end; >Relaseはすみません。どこで見たのか分からなくなってしまいました。 RelaseはVCLとは何もかも異なるようですね。VCLではフォームはFreeでなくRelaseを使用せよ、とされています。 Destroyはクラスの内部で使うためのものですから、むやみに呼び出しちゃいけないのです。 お役に立てなくて残念ですが、上の落書きをご笑覧いただければと思います。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.