以编程方式从表单中删除图表

时间:2012-06-21 14:22:13

标签: delphi teechart

我正在寻找正确的方法来删除TChart并释放所有内存。 我正在使用带有标准TeeChart 7的Delphi2007

我以编程方式创建TChart:

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

然后,我想从表单中删除图表(不关闭表单本身),但我只得到图表变成空白并保留在表单上:

newChart.FreeAllSeries;
FreeAndNil(newChart);

如果我使用

NewChart.Parent := nil, 

我不再看到图表,但我认为TChart对象仍然存在(直到父窗体被销毁)。有没有具体的方法来做到这一点? 谢谢

1 个答案:

答案 0 :(得分:5)

摆脱TChart控件或几乎所有控件的最简单方法是在其上调用Free

newChart.Free;

如果您愿意,可以致电FreeAndNil。这与调用Free具有相同的效果,但也将变量的值设置为nil。如果您稍后测试变量的值以检测您是否仍然可以访问控件,那么这很有用。如果你再也没有引用变量,那么FreeAndNil对你的影响不大。

控件将自动释放其拥有的其他内容,例如您使用FreeAllSeries手动释放的系列。你不需要自己释放它们。

仅清除控件的Parent属性不会释放控件。您可以通过重新分配Parent属性并观察控件是否重新出现在屏幕上来证明这一点。如果控制已不复存在,那就不会发生。

如果控件在释放后仍然在屏幕上可见,那么您还有其他问题。也许父控制没有正确地重新绘制自己。您可以尝试在父控件上调用Refresh。您可能还有多个控件可见。毕竟,问题的代码创建了两个图表控件,所以也许其中一个仍然可见,并且你把它误认为是你销毁的控件。

相关问题