//
Delphi5下在建立from時為何執行了formshow事件,如何不讓它執行呢,我只想在show時再執行,我記得delphi4下是沒有此問題的,沒有太在意
//
if FrmMyGod= nil then
Application.CreateForm(TFrmMyGod, FrmMyGod); //為何在此執行了FrmMyGod的formshow事件
.........
FrmMyGod.WindowState := wsNormal;
FrmMyGod.Show;
Delphi5下在建立from時為何執行了formshow事件,如何不讓它執行呢,我只想在show時再執行,我記得delphi4下是沒有此問題的,沒有太在意
//
if FrmMyGod= nil then
Application.CreateForm(TFrmMyGod, FrmMyGod); //為何在此執行了FrmMyGod的formshow事件
.........
FrmMyGod.WindowState := wsNormal;
FrmMyGod.Show;
另一个可能就是
if FrmMyGod= nil then
Application.CreateForm(TFrmMyGod, FrmMyGod); //為何在此執行了FrmMyGod的formshow事件
你这句代码根本没有执行,而是转到
FrmMyGod.WindowState := wsNormal;
FrmMyGod.Show;
而执行了FrmMyGod.Show;
当你在主表单(假设叫FrmMain)的FormCreate中执行 Application.CreateForm(TFrmMyGod, FrmMyGod); 后,
程序的主表单已经变为 FrmMyGod 了,这时程序是把 FrmMyGod 显示出来,而不是原来的主表单。这是因为 Application.CreateForm(TFrmMyGod, FrmMyGod); 比 Application.CreateForm(TFrmMain, FrmMain); 先执行完,Application.CreateForm 会把第一次的调用中的Form设为主表单。解决方法,不要用Application.CreateForm,这样创建:
FrmMyGod := TFrmMyGod.Create(Application);
...
try
FrmMyGod.Showmodal;
finally
freeandnil(FrmMyGod);
end;
我有測試 過,可惜還是不行,你也可以試試,怎麼這麼奇怪!!!!!!!!!!!!!
if FrmMyGod= nil then
Application.CreateForm(TFrmMyGod, FrmMyGod); //a:為何在此執行了FrmMyGod的formshow事件
FrmMyGod.sCustNo := sCustNo;
.........
FrmMyGod.WindowState := wsNormal;
FrmMyGod.Show;//b:此處根本就沒有執行FrmMyGod的formshow事件在FrmMyGod的formShow事件里就是把scustno給顯示在label上
測試發現根本就沒有顯示出來,我絕對有調試,
// FrmArrange := TFrmArrange.Create(FrmArrange);
這個方法我也有測試,效果還是一樣
最好的方法是測試,調試一下,就會知道確實是這樣
要是很簡單的話,我也不用在此詢問各位再此謝謝各位!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
showmodal確實是行,還有其他方法嗎
formshow事件。
chenquan(嘉威王子) 的方法 不就是用FrmMyGod:=TFrmMyGod.Create(Application); 而不是用Application.CreateForm 来创建的嘛,跟用showmodal和show没什么关系的。
用FrmMyGod:=TFrmMyGod.Create(Application);
與 用Application.CreateForm 這個方法,我都試過,
結果是 不行,真的,不信你試試用showmodal方法能行的原因,我不是太清楚
我分析一下,
在formcreate時,如果此form is visibled(True),則在formcreate時執行formSHOW事件
相反此form is visibled(False),則在formcreate時不執行formSHOW事件//各位可以通過下面的代碼進行測試
//formstyle 已經修改成非子窗体了
if FrmMyGod= nil then
Application.CreateForm(TFrmMyGod, FrmMyGod); //a:為何在此執行了FrmMyGod的formshow事件
FrmMyGod.sCustNo := sCustNo;
.........
FrmMyGod.WindowState := wsNormal;
FrmMyGod.Show;//b:此處根本就沒有執行FrmMyGod的formshow事件在FrmMyGod的formShow事件里就是把scustno給顯示在label上這個奇怪的問題,難道非要visibled := False時,才不執行formshow嗎?
測試程序已發送,請查收哪位要測試程序,請貼出email,我會發送給各位,讓大家都來查找,測試,調試其中的問題
再次謝謝各位!
程序收到了,我试了一下,果真是这样,我原来想的也有些问题。
其实问题就是在Visible属性上,它默认是False的,所以在创建Form时,如果它是True,因为Visible值发生了变化,就一定会把Form显示出来,也就会产生OnShow事件(这时FrmMyGod.Show;是多余的了)。
所以这时需要把Visible设为False。
以前沒有太在意,真是奇怪
今天結帖