お世話になります。
TEditコントロールを動的に生成して、使用後にすべてクリアするという処理を以下のように書いています。
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
FMX.Layouts, FMX.Edit;
type
TForm1 = class(TForm)
ButtonGenerate: TButton;
ButtonClear: TButton;
FlowLayout1: TFlowLayout;
procedure ButtonGenerateClick(Sender: TObject);
procedure ButtonClearClick(Sender: TObject);
private
FEditArray: array[0..2] of TEdit;
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.ButtonGenerateClick(Sender: TObject);
var
EditTemp: TEdit;
I: Integer;
begin
for I := 0 to Length(FEditArray) - 1 do
begin
EditTemp := TEdit.Create(Self);
EditTemp.Parent := FlowLayout1;
EditTemp.Text := IntToStr(I);
FEditArray[I] := EditTemp;
end;
end;
procedure TForm1.ButtonClearClick(Sender: TObject);
var
I: Integer;
begin
for I := 0 to Length(FEditArray) - 1 do
FreeAndNil(FEditArray[I]);
end;
end.
以上についてWindowsだとFreeAndNilをした際に、すべてのTEditが解放されてフォーム画面から消えてくれるのですが、
AndroidだとTEditが消えずに画面上に残ってしまいます。
プログラムに問題があればご指摘ください。また問題がWindowsとAndroidの挙動の違いであればどう対処
すればよいでしょうか。
よろしくお願いいたします。
FreeAndNilでなくDisposeOfを使ってみてください。
procedure TForm1.ButtonClearClick(Sender: TObject);
var
I: Integer;
begin
for I := 0 to Length(FEditArray) - 1 do
FEditArray[I].DisposeOf;
// FreeAndNil(FEditArray[I]);
end;
返事が遅れましてすいません。
お教えいただいたDisposeOfで解決しました。
解放されるタイミングの問題なのですね。
ありがとうございました!
ツイート | ![]() |