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

lib*_*lib 1 delphi teechart

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

我以编程方式创建TChart:

var parentform: TForm;
begin
newchart:= TChart.Create(parentform);
newchart.Parent:= parentform;
... 
Run Code Online (Sandbox Code Playgroud)

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

newChart.FreeAllSeries;
FreeAndNil(newChart);
Run Code Online (Sandbox Code Playgroud)

如果我使用

NewChart.Parent := nil, 
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*edy 5

摆脱TChart控制或最简单的任何控制的最直接的方法是调用Free它:

newChart.Free;
Run Code Online (Sandbox Code Playgroud)

FreeAndNil如果您愿意,可以打电话.这与调用具有相同的效果Free,但也将变量的值设置为nil.如果您稍后测试变量的值以检测您是否仍然可以访问控件,那么这很有用.如果你再也没有引用变量,那么FreeAndNil你就不会得到太多.

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

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

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

  • @Arnaud:不."发布"完全是出于另一个目的而设计的.它用于从该表单的事件处理程序中释放表单及其所有组件.有关详细信息,请参阅[文档](http://docwiki.embarcadero.com/Libraries/en/Vcl.Forms.TCustomForm.Release). (4认同)