我正在寻找删除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
。您可能还会看到多个控件。毕竟,问题的代码创建了两个图表控件,因此也许其中一个仍然可见,并且您将其误认为是销毁的控件。