みなさん、こんにちは。
フォームの継承で質問させていただきます。
継承元Form (TfrmBaseMDIForm)を作り、そのフォームを継承し、TForm2を作っています。
この状態で、親フォーム(Form1)からTForm2を生成し、propertyに値を設定し、Form2を表示するコーディングをしています。
実際に呼ばれる順番は、次の「丸数字」の順番になります。
期待している順位は、
①→④→②→③
なのですが、期待通りになりません。
ご教授をお願いします。
◇継承元Form (TfrmBaseMDIForm)
type
TfrmBaseMDIForm = class(TForm)
:
public
FMode: String;
property Mode: String read FMode write SetMode;
end;
procedure TfrmBaseMDIForm.SetMode(const Value: string);
begin
FMode := Value; <-- ④
end;
procedure TfrmBaseMDIForm.FormShow(Sender: TObject);
begin
if FMode ・・・ <-- ②
end;
◇継承先Form (TForm2)
procedure TForm2.FormShow(Sender: TObject);
begin
inherited;
if (FMode = 'N') then <-- ③
:
end;
◇呼出Form (TForm1)
Form2 := TForm2.Create(Self); <-- ①
Form2.Mode := 'E';
Form2.Show;
遊歩人
では?
--
takashi <taka...@csjpn.com>
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
いつでもどこでもメールチェック!freemlのスマートフォンアプリ
http://ad.freeml.com/cgi-bin/sa.cgi?id=igCMT
------------------------------------------------------[freeml byGMO]--
snail3 さん、こんにちは。
早々のリプライありがとうございます。
SetModeメソッドを呼び出しても結果は同じです。
少し補足をします。
イベント・メソッドの実行順は次の通りです。
①Form2 := TForm2.Create(Self); ß呼出Form
↓
②TfrmBaseMDIForm.FormCreate
↓
③TForm2.FormCreate
↓
④TfrmBaseMDIForm.FormShow
↓
⑤TForm2.FormShow
↓
⑥TForm2.Mode := 'E'; ; ß呼出Form
↓
⑦TfrmBaseMDIForm.SetMode
⑤のイベント実行前に、⑥のプロパティセットを実行させたいと思っています。
実際には、前述の通り⑤の後となってしまいます。
私の理解が間違っているのでしょうか?
遊歩人
TfrmBaseMDIFormもしくはTForm2のVisibleプロパティがTrueになっている
なんて事はありませんか?
それでCreateと同時にOnShowイベントまで行ってしまうとか。
Quest
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
使い方はいろいろ♪一部のメンバーだけにMLメールを送ろう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=igF22
------------------------------------------------------[freeml byGMO]--
リプライありがとうございます。
>TfrmBaseMDIFormもしくはTForm2のVisibleプロパティがTrueになっている
>なんて事はありませんか?
確かにTrueになっていましたが、Falseに変えても現象は変わりません。
今まで、このプロパティはあまり意識したことがありません。
試しに、FormStyleを「fsNormal」に変更し、SDIにすると期待通りの動作をします。
継承フォームは、いろいろな問題があると言われますが、何か根本的問題があるので
しょうか?
継承フォームに変更する前は、CreateParamsで継承先フォームを呼んでいました。
その場合は、問題なく期待通りの動作をしていました。
遊歩人
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
メンバーで使える掲示板を活用しよう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=igKr0
------------------------------------------------------[freeml byGMO]--
TfrmBaseMDIForm = class(TForm)
:
public
FMode: String;
constructor Create(AOwner: TComponent; aMode: string);
property Mode: String read FMode write SetMode;
end;
constructor TfrmBaseMDIForm.Create(AOwner: TComponent; aMode: string);
begin
inherited Create(AOwner);
Mode := aMode;
end;
Quest
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
メールだけでみんなを招待できる便利機能♪
http://ad.freeml.com/cgi-bin/sa.cgi?id=igL3U
------------------------------------------------------[freeml byGMO]--
ありがとうございます。
同じプロジェクト内にSDIで全く同じ考えで作っているFormがありますが、
そちらは全く問題なく動いています。
従来通りCreateParamsでFormを呼び出す方法に戻します。
遊歩人
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
練習や試合の予定調整は「とっとと決め太郎」におまかせ!
http://ad.freeml.com/cgi-bin/sa.cgi?id=igLLz
------------------------------------------------------[freeml byGMO]--
↓は参考になりませんか
MDIChildフォーム単位で子フォームを管理するサンプル
http://www42.tok2.com/home/okapony/download/indexc.html#MDIChild
MDI DEVELOPMENT IN DELPHI. Part I.
http://delphi.about.com/od/objectpascalide/l/aa042500a.htm
--
takashi <taka...@csjpn.com>
MLホームページ: http://www.freeml.com/delphi-users
----------------------------------------------------------------------
毎日豪華プレゼントキャンペーン開催中!くまポン
http://ad.freeml.com/cgi-bin/sa.cgi?id=igRaB
------------------------------------------------------[freeml byGMO]--