私のアプリケーションには複数のフォームがあります。 TForm1.FormCreate(メインフォーム)ですべての設定を読み込みます。 form8に私の設定パネルがあります。TForm1.FormCreateから別のフォームを初期化するには?
procedure TForm1.FormCreate(Sender: TObject);
begin
settings:=TMemIniFile.Create('');
settings.Create('settings.ini');
if settings.ReadString('settings','ComboBox1','')='1' then
form1.ComboBox1.checked:=true else form1.ComboBox1.checked:=false;
//line below crashes application because form8 has not been initialized yet
if settings.ReadString('settings','ComboBox2','')='1' then
form8.ComboBox1.checked:=true else form8.ComboBox1.checked:=false;
settings.free
end;
form8の初期化を強制する方法はありますか?そこでUI要素を設定できますか?私は本当にTForm1.FormCreateからそれを行うことを好むでしょう。はい、私は私が私のアプリケーションもトレイで最小限に抑えられるので、form1.Onshowまたはform1.Onactivateから設定をロードできることを知っていますが、今度はform1.Oncreateにコードを入れる必要があります。 DPR内
は、必要な情報を受け取るコンストラクタを宣言します。 –
実際、メインフォームを他のフォームの表示を管理するのではなく、それ以外の方法で表示します。他のフォームは*メインフォームから*読みます。あるいは、アプリケーション全体のためにグローバルに共有されているバックグラウンドのオブジェクトから、より優れています。 –
TForm1.FormCreateのform1への参照は悪い習慣です - 'ComboBox1.Checked:= True'を使用してください。これは、特定のインスタンスではなく、常にTForm1の現在のインスタンスを参照します。また、ブロック全体を 'ComboBox1.Checked:= settings.ReadString( 'settings'、 'ComboBox1'、 '')= '1' 'に置き換えることもできます –