[delphi-users:2495] フォームの継承で、イベントの呼ばれる順位について

935 views
Skip to first unread message

遊歩人

unread,
Apr 6, 2012, 5:58:38 PM4/6/12
to DelphiML

みなさん、こんにちは。

 

フォームの継承で質問させていただきます。

 

継承元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;

 

 

遊歩人

snail3

unread,
Apr 6, 2012, 7:23:57 PM4/6/12
to delphi...@freeml.com
Form2 := TForm2.Create(Self);
Form2.SetMode( '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]--

遊歩人

unread,
Apr 6, 2012, 8:16:29 PM4/6/12
to delphi...@freeml.com

snail3 さん、こんにちは。

 

早々のリプライありがとうございます。

SetModeメソッドを呼び出しても結果は同じです。

 

少し補足をします。

 

イベント・メソッドの実行順は次の通りです。

 

Form2 := TForm2.Create(Self); ß呼出Form

 ↓

TfrmBaseMDIForm.FormCreate

 ↓

TForm2.FormCreate

 ↓

TfrmBaseMDIForm.FormShow

 ↓

TForm2.FormShow

 ↓

TForm2.Mode := 'E'; ; ß呼出Form

 ↓

TfrmBaseMDIForm.SetMode

 

⑤のイベント実行前に、⑥のプロパティセットを実行させたいと思っています。

実際には、前述の通り⑤の後となってしまいます。

 

私の理解が間違っているのでしょうか?

 

遊歩人

Quest

unread,
Apr 6, 2012, 10:36:27 PM4/6/12
to delphi...@freeml.com
遊歩人さん、こんにちは。

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]--

遊歩人

unread,
Apr 7, 2012, 4:39:36 AM4/7/12
to delphi...@freeml.com
Quest さん、こんにちは。

リプライありがとうございます。

>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]--

Quest

unread,
Apr 7, 2012, 6:01:20 AM4/7/12
to delphi...@freeml.com
フォームの継承というより、MDIフォームが関係しているようです。
Form2.Show の部分をコメントアウトしても子フォームが表示されるので
MDI子フォームはCreateしただけで、Visibleの値に関係なく強制的に
表示されてしまうようです。
今までMDIアプリを作ってこなかったので気が付きませんでした。
パラメータが1つ2つなら、フォームのコンストラクタに渡してしまうという
力技もありますが・・・。

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]--

遊歩人

unread,
Apr 7, 2012, 6:24:27 AM4/7/12
to delphi...@freeml.com
Questさん、こんにちは。

ありがとうございます。
同じプロジェクト内にSDIで全く同じ考えで作っているFormがありますが、
そちらは全く問題なく動いています。

従来通りCreateParamsでFormを呼び出す方法に戻します。

遊歩人

MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
練習や試合の予定調整は「とっとと決め太郎」におまかせ!
http://ad.freeml.com/cgi-bin/sa.cgi?id=igLLz
------------------------------------------------------[freeml byGMO]--

snail3

unread,
Apr 7, 2012, 11:23:41 AM4/7/12
to delphi...@freeml.com
MDIフォームはつかったことが無いのに、いいかげんな事を書いてしまいました。


↓は参考になりませんか

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]--

Reply all
Reply to author
Forward
0 new messages