我有一张表格。当用户单击TESTBUTON时,将生成一个数组(此处为循环)并填充数组。 (这样可行)。 现在,用户可以再次点击按钮更改某些参数。 比我想要清除/释放/销毁旧数组一样,创建它。
我找到了很多检查但是它们不起作用(因为我不知道在哪里放置不同的程序)。 所以我用所有部分制作了这个样本。 有人可以将我的程序移到安装位置,或者给我一个显示正确实现的示例。
unit frmmywindow;
interface
uses
type
TArrayA = record
Field1:integer;
Field2:integer;
Field3:integer;
Field4:integer;
String5:string;
//other fields, strings, integers..
end;
private
{ private declarations }
public
{ public declarations }
destructor Destroy; override;
end;
var
var ArrayA : array of TarrayA;
implementation
destructor TArrayA.Destroy;
begin
ArrayA.Free;
inherited;
end;
procedure TArrayA.Free;
begin
if Assigned(self) then Destroy;
end;
procedure TForm1.btnTest(Sender: TObject);
var
x: integer;
reccount: integer;
begin
ArrayA.free:
ArrayA.create;
reccount := 1000;
for x := 1 to reccount do
begin
setLength(ArrayA,x+1);
ArrayA[x].field1 := 2000 - x;
ArrayA[x].field2 := x;
ArrayA[x].field3 := x;
ArrayA[x].field4 := x;
ArrayA[x].string5 := 'str' + inttostr(x);
end;
end;
答案 0 :(得分:0)
您的代码存在许多问题。
TArrayA
是记录(通常我会链接到结构化类型的DocWiki文档,但它似乎是正确的现在)。记录不是类,没有析构函数 和您不应该在其上调用Free
即可。记录被称为value types。他们甚至没有合适的构造函数,即使语法暗示他们这样做。记录"构造函数"仅仅是初始化者。另一个问题是,您不应该自己编写Free
代码,即使类也是如此。 Free
从所有类实例TObject
的根继承。对于类,如果要为其提供析构函数,覆盖继承的析构函数:
destructor Destroy; override;
文档中描述了如何为类声明,定义和使用它们。
正如我已经评论过的那样,你应该更好地熟悉这门语言。我建议你阅读 Delphi 或 Object Pascal语言指南(名称不同,具体取决于版本),这是与Delphi一起安装的文档的一部分。