起動時他のUnitのFormShowが開く

解決


TS  2005-04-24 04:38:06  No: 14442

WindowsXP,Delphi7Proで

フォームをいくつか作り起動後

Unit1,2にそれぞれOnCreate,OnShowのイベントを設定したとき
1 Unit1のFormCreate
2 Unit2のFormCreate
3 Unit1のFormShow
となると思うのですがこれが現在作っているプログラムで
1 Unit1のFormCreate
2 Unit1のFormShow
3 Unit2のFormCreate
4 Unit2のFormShow
5 Unit1のFormShow
の順番でプログラムが動作しています。

今までは、こんな事は無かったんですが、
急にこう言う動作になってしまいました。
新しいプログラムを作ってshowmessage
だけでテストすると最初に書いた様な動作となりました。
よって、特殊なケースだと思われますので、
そんな事は無いはずだでもいいですので、回答お願いします。


  2005-04-24 04:50:47  No: 14443

で、何が問題なんですか?

エスパーじゃなければ、誰も分かりませんが。


TS  2005-04-24 05:06:51  No: 14444

さっそくありがとうございます。
説明が不明でしょうか、起動時にはFormCreate
だけが先に実行されると思うのですが、
FormShowが先に実行されるため他のフォームの
起動して欲しくない、FormShowイベントが発生
してしまっています。MainのFormShowイベント
も先に一度実行された後もう一度実行されます。


kkk  2005-04-24 06:55:31  No: 14445

再現できる簡潔なソースがないと判断がしにくいです。


TS  2005-04-24 07:24:24  No: 14446

ソースは長すぎてどこまで表示すればいいのか分かりません
が、OnCreateのイベントの中にはOnShowのイベントが実行
される様な記述はしていません。
procedure TMain_Form.FormCreate(Sender: TObject);
var
  i,Count: Integer;
  BaseColor : TColor;
  st:string;
begin
  //未使用のタブシートを見えなくする
  for i:=1 to ComponentCount -1 do
    begin
      if (Components[i] is TTabSheet) then
        begin
        st:=TTabSheet(Components[i]).Caption;
        if pos('TabSheet',st)>0 then
          TTabSheet(Components[i]).TabVisible:=False
        else
          begin
            //ここで表示される順番にタブのCaptionを取得
            Tab_Caption[Count]:=TTabSheet(Components[i]).Caption;
            inc(Count);
          end;
        end;
    end;

  //ヒント表示
  Application.OnHint:=DisplayHint;

   st:=Tochi_hiyoudai[1];
  {コンポーネントを配列化する}
  for i:=1 to 10 do begin
    DBEdits[i] := FindComponent('DBEdit'+IntToStr(i)) as TDBEdit;
//    buttons[i].tag := i; {ついでに 後の事も考えて tag も設定しておく}
    StringGrid2.ColWidths[i]:= DBEdits[i].Width +5;
    StringGrid2.Cells[i,0]:=Tochi_hiyoudai[i];

  end ;
  PageControl1.OwnerDraw:=True;
  Panel1.Visible:=False;
end;

//フォームが表示される時
procedure TMain_Form.FormShow(Sender: TObject);
var i:integer;
begin
  showmessage('test');
 //Filter_Change;
end;
同じことを言っている様で済みません
プログラムが最初に起動したときの動作はフォームをいくつか
配置した時それぞれのOnCreateのイベントだけが実行され
最後にメインのフォームのOnShowのイベントが実行されると
思うのですが、これがそれぞれにフォームのOnCreateのイベント
OnShowのイベントの順に実行されてしまっています。


kkk  2005-04-24 07:52:37  No: 14447

1 Unit1のFormCreate
2 Unit2のFormCreate
3 Unit1のFormShow
の様に期待するのは間違っていないと思います。
1 Unit1のFormCreate
2 Unit1のFormShow
3 Unit2のFormCreate
4 Unit2のFormShow
となるにはどこかでShowに関連する何かがあるように思われるのですが・・・
上記のソースでは不明ですね。


TS  2005-04-24 08:13:20  No: 14448

KKKさん、ありがとうございます
>期待するのは間違っていないと思います。
それが、知りたかったのですが、Showに関連する
するものが分かりません、トレースしてもFormCreate
からFormShowに行くだけで、何故そうなるのかわかりません
今まで、そうなってなかった物で、急にこんな事に
なって参りました。


迷える狼  2005-04-24 09:29:10  No: 14449

フォームのVisible プロパティがTrueになってるからとか?
これだと、Create時にShowされます。

ちゃうのか?


TS  2005-04-24 18:43:57  No: 14450

迷える狼さん正解です。
この症状が出る前に別の問題があってその時
私が何の事か分からずに
フォームのVisible プロパティをTrueにしてました。
自分で、問題を作ったみたいです。
助かりました。
迷える狼さん、kkkさん、でさん有難うございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加