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

我以编程方式创建TChart:

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


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

newChart.FreeAllSeries;
FreeAndNil(newChart);


如果我用

NewChart.Parent := nil,


我不再看到该图表,但我认为TChart对象仍然存在(直到父窗体被销毁)。是否有执行此操作的特定方法?
谢谢

最佳答案

摆脱TChart控件或几乎任何控件的最直接方法就是对此调用Free

newChart.Free;


如果愿意,您可以呼叫FreeAndNil。这具有调用Free的相同效果,但还将变量的值设置为nil。如果以后要测试变量的值以检测您是否仍然可以访问该控件,则这很有用。如果您再也没有引用变量,那么FreeAndNil不会给您带来太多帮助。

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

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

如果控件在释放后仍在屏幕上可见,则您还有其他问题。父控件可能未正确重新绘制自身。您可以尝试在父控件上调用Refresh。您可能还会看到多个控件。毕竟,问题的代码创建了两个图表控件,因此也许其中一个仍然可见,并且您将其误认为是销毁的控件。

10-05 22:15