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
だけでテストすると最初に書いた様な動作となりました。
よって、特殊なケースだと思われますので、
そんな事は無いはずだでもいいですので、回答お願いします。
で、何が問題なんですか?
エスパーじゃなければ、誰も分かりませんが。
さっそくありがとうございます。
説明が不明でしょうか、起動時にはFormCreate
だけが先に実行されると思うのですが、
FormShowが先に実行されるため他のフォームの
起動して欲しくない、FormShowイベントが発生
してしまっています。MainのFormShowイベント
も先に一度実行された後もう一度実行されます。
再現できる簡潔なソースがないと判断がしにくいです。
ソースは長すぎてどこまで表示すればいいのか分かりません
が、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のイベントの順に実行されてしまっています。
1 Unit1のFormCreate
2 Unit2のFormCreate
3 Unit1のFormShow
の様に期待するのは間違っていないと思います。
1 Unit1のFormCreate
2 Unit1のFormShow
3 Unit2のFormCreate
4 Unit2のFormShow
となるにはどこかでShowに関連する何かがあるように思われるのですが・・・
上記のソースでは不明ですね。
KKKさん、ありがとうございます
>期待するのは間違っていないと思います。
それが、知りたかったのですが、Showに関連する
するものが分かりません、トレースしてもFormCreate
からFormShowに行くだけで、何故そうなるのかわかりません
今まで、そうなってなかった物で、急にこんな事に
なって参りました。
フォームのVisible プロパティがTrueになってるからとか?
これだと、Create時にShowされます。
ちゃうのか?
迷える狼さん正解です。
この症状が出る前に別の問題があってその時
私が何の事か分からずに
フォームのVisible プロパティをTrueにしてました。
自分で、問題を作ったみたいです。
助かりました。
迷える狼さん、kkkさん、でさん有難うございました。
ツイート | ![]() |