我有一个自定义组件类,用作将评论和用户详细信息等加载到表单的框架。Class 是面板的子类,包含 3 个标签和一个备忘录。
在关闭我的表单或尝试释放对象时,我收到“无效指针操作”错误。我知道这是因为尝试两次释放对象,或者访问不可用的 RAM。但是,我不知道如何解决它。这让我有点退缩,因为我必须加载关于不同主题的不同评论,而且在我清除当前评论的形式之前我不能。
这是与类相关的代码:
type
TSkeleton = class(TPanel)
private
fName : TLabel;
fStudNo : TLabel;
fTimeAndDate : TLabel;
fComment : TMemo;
public
Constructor Create (AOwner: TComponent); overload; override;
constructor Create(AOwner:TForm; sName, sStudNo, sTime, sDate, sComment: string; ComCount: integer); overload;
end;
{ TSkeleton }
constructor TSkeleton.Create(AOwner: TComponent);
begin
//
end;
constructor TSkeleton.Create(AOwner: TForm; sName, sStudNo, sTime, sDate,
sComment: string; ComCount: integer);
begin
inherited Create(AOwner);
Parent := AOwner;
Width := 800;
Height := 250;
Top := 448+((ComCount-1)*250);
Left := 16;
BevelInner := bvSpace;
BevelOuter := bvLowered;
fName := TLabel.Create(fName);
self.InsertControl(fName);
with fName do
begin
Caption := sName;
Font.Name := 'Garamond';
Font.Size := 30;
Left := 7;
Top := 4;
end;
fStudNo := TLabel.Create(fStudNo);
self.InsertControl(fStudNo);
with fStudNo do
begin
Caption := sStudNo;
Font.Name := 'Garamond';
Font.Size := 15;
Left := 15;
Top := 52;
end;
fTimeAndDate := TLabel.Create(fTimeAndDate);
self.InsertControl(fTimeAndDate);
with fTimeAndDate do
begin
Caption := sTime + ' ' + sDate;
Font.Name := 'Garamond';
Font.Size := 20;
Left := 583;
Top := 4;
end;
fComment := TMemo.Create(fComment);
self.InsertControl(fComment);
with fComment do
begin
Lines.Add(sComment);
Font.Name := 'Garamond';
Font.Size := 12;
Left := 152;
Top := 56;
Height := 161;
Width := 633;
ReadOnly := True;
ScrollBars := ssVertical;
end;
end;
如果您想查看使用的其他代码(读取文本文件、创建对象数组等),请说出来。它与课程没有直接关系,所以我认为没有必要。
先感谢您。
编辑:基于@Remy Lebeau 的代码和@NGLN 的评论,我决定发布所有必要的内容。
根据@Remy 的代码修复课程后,我仍然收到错误消息。这让我相信错误出在我使用类的地方,尤其是在我创建的对象数组中。
以前,我的代码是
for i := 0 to ComCount-1 do
begin
fArrObjects[i+1] := TSkeleton.Create(TargetForm);
with fArrObjects[i+1] do
begin
Parent := TargetForm;
TheName := fArrComments[i][0];
StudNo := fArrComments[i][1];
Time := fArrComments[i][2];
Date := fArrComments[i][3];
Comment := fArrComments[i][4];
ComCount := i+1;
end;
改变
fArrObjects[i+1]
至
fArrObjects[i]
解决了这个问题。
感谢@Remy 纠正课堂上的错误。