4

我已经在私有部分声明了 TStringList 的变量。在按钮单击事件中,我想访问该 TStringList 对象。

sVariable:= TStringList.Create;
sVariable.add('Test1');

现在,每当我每次单击该按钮时,都会将其新创建的内存分配给该变量。是否有任何属性/函数可以用来确定是否为该变量创建了对象,并且它也不会给出访问冲突错误?

4

2 回答 2

10
if not Assigned(sVariable) then
  sVariable:= TStringList.Create;
sVariable.add('Test1');
于 2011-10-03T14:12:11.410 回答
5

另一种接近它的方法,扩展大卫的答案,是通过一个带有 read 方法的属性。

TMyForm = class (TForm)
private
  FStrList : TStringList;
public
  property StrList : TStringList read GetStrList;
  destructor Destroy; override;
end;

implementation

function TMyForm.GetStrList : TStringList;
begin
  if not Assigned(FStrList) then
    FStrList := TStringList.Create;
  Result := FStrList;
end;

destructor TMyForm.Destroy;
begin
  FStrList.Free;
  inherited;
end;

编辑:在重写的析构函数中添加了 Free 调用。

于 2011-10-03T14:55:07.043 回答