Delphi:TImage.Createによりアクセス違反が発生する
-
10-07-2019 - |
質問
初心者の質問には事前に謝罪しますが、なぜ「アクセス違反」と表示されるのですか?以下のコードのエラー(" Create(SelectorForm);"行)?メインフォームを所有者として使用してみましたが、違いはありませんでした。
var
SelectorForm: TSelectorForm;
ArrayOfImages: Array [1..10] of TImage;
implementation
procedure TSelectorForm.FormCreate(Sender: TObject);
var
Loop: Byte;
begin
for Loop := 1 to 10 do
begin
with ArrayOfImages[Loop] do
begin
Create(SelectorForm);
end;
end;
end;
解決
問題は、あなたが効果的にこれをしていることです:
var
imageVariable: TImage;
begin
imageVariable.Create (ParentForm);
end;
"作成&quot ;;メソッドは、まだ割り当てられていない変数で呼び出されています。
これを行う必要があります:
var
imageVariable: TImage;
begin
imageVariable := TImage.Create (ParentForm);
try
//use the object
finally
FreeAndNil (imageVariable);
end;
end;
またはより具体的にはコードで:
for Loop := 1 to 10 do
begin
ArrayOfImages[Loop] := TImage.Create (Self);
end;
オブジェクトを解放することを忘れないでください
編集:@andiwのコメントを受け入れ、オブジェクトを解放するヒントを取り戻します。 EDIT2:@Gerryのコメントを受け入れ、所有者としてSelfを使用します。
他のヒント
上記のコードには多くの問題があります。 (開始時にそのような" With"を使用しないでください。ループ変数にByteを使用しないでください)
最終的には、フォームを親として作成されたTImageのインスタンスの配列が必要になると思います。
その仮定に基づいて...(未テスト)のようなものが欲しい
var
ArrayOfImages: Array [0..9] of TImage;
i : integer;
begin
for i := 0 to 9 do
begin
ArrayOfImages[i] := TImage.Create(theForm);
end;
end;
ここで、使用が終了したらアレイをクリーンアップする必要があります。各Imageインスタンスでfreeを呼び出す必要があります。
所属していません StackOverflow