掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
自動生成していないFormからの参照のエラーを回避するには? (ID:47275)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
igyさん 試していただいてありがとうございます。 こちらではエラーになります。 長文となりますが、UPします。問題解決のために行数を少なくしたもので 業務としては意味のないものです。 まずはプロジェクト************************************************* program z1156; uses System.StartUpCopy, FMX.Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}, Unit3 in 'Unit3.pas' {Form3}; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm3, Form3); Application.Run; end. 次にUNIT1のType以降************************************************ type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { private 宣言 } public { public 宣言 } end; var Form1: TForm1; implementation {$R *.fmx} uses Unit2; procedure TForm1.Button1Click(Sender: TObject); begin if not Assigned(Form2) then Form2 := TForm2.Create(Application); Form2.Show; end; procedure TForm1.FormCreate(Sender: TObject); begin Form2 := nil; end; end. 次にUNIT2のType以降************************************************ type TForm2 = class(TForm) Button1: TButton; ButtonListDisp: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure ButtonListDispClick(Sender: TObject); private { private 宣言 } procedure ButtonSettingOkClick(Sender: TObject); public { public 宣言 } end; var Form2: TForm2; implementation {$R *.fmx} uses Unit1, Unit3; procedure TForm2.Button1Click(Sender: TObject); begin close; end; procedure TForm2.ButtonListDispClick(Sender: TObject); begin Label1.Text := Form3.SelectOkButton.Text; //ここでエラー Form3.Panel1.Parent := Form2; Form3.Panel1.Visible := true; Form3.SelectOkButton.OnClick := ButtonSettingOkClick; end; procedure TForm2.ButtonSettingOkClick(Sender: TObject); begin Form3.Panel1.Visible := false; self.Label1.text := Form3.SelectOkButton.Text; //これは参照のテスト用 end; procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := TCloseAction.caFree; Form2 := nil; end; end. 最後にUNIT2のType以降************************************************ FormにPanelを配置しその上にListBoxとLabelとButtonを置いています。 type TForm3 = class(TForm) SelectList: TListBox; Panel1: TPanel; SelectOkButton: TButton; SelectTitle: TLabel; private { private 宣言 } public { public 宣言 } end; var Form3: TForm3; implementation {$R *.fmx} end. こちらでしている操作は、 (1)プログラムを立ち上げて、 (2)Button1をクリックしてForm2を表示 (3)Form2のButtonListDispをクリックして、Form3にあるパネルを表示 (4)SelectOkButtonを押下 (5)Form2の右上の閉じるボタン[X]を押下 (6)Form1に戻るので(2)の操作 (7)(3)の操作をするとエラーが発生 となります。 Form2を自動生成にして、Form2のFormCloseをコメント化すると エラーは発生しません。 // Action := TCloseAction.caFree; // Form2 := nil; 不思議です。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.