1

TChart を削除してすべてのメモリの割り当てを解除するための正しい方法を探しています。標準の TeeChart 7 で Delphi2007 を使用しています

プログラムで TChart を作成します。

var parentform: TForm;
begin
newchart:= TChart.Create(parentform);
newchart.Parent:= parentform;
... 

次に、フォームからグラフのみを削除したい (フォーム自体を閉じない) のですが、グラフが空白になり、フォームにとどまることだけが得られます。

newChart.FreeAllSeries;
FreeAndNil(newChart);

私が使用する場合

NewChart.Parent := nil, 

もうグラフは表示されませんが、TChart オブジェクトはまだ存在していると思います (親フォームが破棄されるまで)。これを行うための特定の方法はありますか?ありがとうございました

4

1 に答える 1

5

TChartコントロール、またはほぼすべてのコントロールを取り除く最も簡単な方法は、それを呼び出すFreeことです。

newChart.Free;

FreeAndNil必要に応じて、代わりに電話することもできます。を呼び出すのと同じ効果Freeがありますが、変数の値を に設定しますnil。これは、後で変数の値をテストして、コントロールにまだアクセスできるかどうかを検出する場合に役立ちます。変数を二度と参照FreeAndNilしないと、あまり効果がありません。

コントロールは、 で手動で解放したシリーズなど、それが所有する他のものを自動的に解放しFreeAllSeriesます。それらを自分で解放する必要はありません。

コントロールのParentプロパティをクリアするだけでは、コントロールは解放されません。Parentプロパティを再割り当てし、コントロールが画面に再表示されるのを観察することで、それを証明できます。コントロールが存在しなくなっていれば、それは起こりませんでした。

コントロールを解放した後もコントロールが画面に表示されたままになる場合は、別の問題があります。親コントロールが適切に再描画されていない可能性があります。Refresh親コントロールを呼び出してみてください。複数のコントロールが表示される場合もあります。結局、質問のコードは2 つのチャート コントロールを作成するため、そのうちの 1 つがまだ表示されていて、破棄したコントロールと間違えた可能性があります。

于 2012-06-21T15:09:48.907 に答える