質問

I have declared variable of TStringList in private section. In a button click event I want to access that TStringList object.

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

Now whenever i click on that button each time its newly created and memory is allocated to that variable. Is there any property/function using which we can determine object is created for that variable or not and it will not give the access violation error also?

役に立ちましたか?

解決

if not Assigned(sVariable) then
  sVariable:= TStringList.Create;
sVariable.add('Test1');

他のヒント

Another way to approach it, expanding on David's answer, is through a property with a read method.

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;

Edit: Added the Free call in an overridden destructor.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top