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父控件。您可能还可以看到多个控件。毕竟,问题的代码创建了两个图表控件,因此其中一个可能仍然可见,而您将其误认为是您销毁的控件。

于 2012-06-21T15:09:48.907 回答