//
Delphi5下在建立from時為何執行了formshow事件,如何不讓它執行呢,我只想在show時再執行,我記得delphi4下是沒有此問題的,沒有太在意
//
      if FrmMyGod= nil then
        Application.CreateForm(TFrmMyGod, FrmMyGod); //為何在此執行了FrmMyGod的formshow事件
      .........
      FrmMyGod.WindowState := wsNormal;
      FrmMyGod.Show;

解决方案 »

  1.   

    不会执行的,你确定你FormCreate事件中没有写相关的代码。
    另一个可能就是
    if FrmMyGod= nil then
            Application.CreateForm(TFrmMyGod, FrmMyGod); //為何在此執行了FrmMyGod的formshow事件
    你这句代码根本没有执行,而是转到
          FrmMyGod.WindowState := wsNormal;
          FrmMyGod.Show;
    而执行了FrmMyGod.Show;
      

  2.   

    不会吧?据我所知,6里肯定没有这个现象,你FrmMyGod.OnCreate事件里写了什么么?
      

  3.   

    FrmMyGod.OnCreate事件里应该写了什么才会这样的,要不使用单步跟踪一下
      

  4.   

    FrmMyGod.OnCreate事件肯定寫了東西,這個與formshow無關(只是些分辯率的設置)在delphi5里確實有此情況,不相信的話,你們可以測試
      

  5.   

    你的formstyle 可能设置为fsMDIChild了,这种类型的窗体,不需要show就自动显示的,你可以修改他的formstyle为其他类型,就可以了
      

  6.   

    你的formstyle 可能设置为fsMDIChild了,这种类型的窗体,不需要show就自动显示的,你可以修改他的formstyle为其他类型,就可以了對,老兄說的不錯,程序不可修改成其他类型啊呀!!
      

  7.   

    不关这个事,MDIChild也得.show才能显示,可能是delphi5的bug了看来。
      

  8.   

    跟Delphi版本无关,
    当你在主表单(假设叫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);
    ...
      

  9.   

    FrmMyGod:=TFrmMyGod.CreateForm(Application);
          try
            FrmMyGod.Showmodal;
          finally
            freeandnil(FrmMyGod);
          end;
          
      

  10.   

    謝謝 sysu(死树) 的回答
    我有測試 過,可惜還是不行,你也可以試試,怎麼這麼奇怪!!!!!!!!!!!!!
      

  11.   

    我同意sysu(死树) 的看法,你最好把project中的代码贴出来!
      

  12.   

    //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上
    測試發現根本就沒有顯示出來,我絕對有調試,
    // FrmArrange := TFrmArrange.Create(FrmArrange);
    這個方法我也有測試,效果還是一樣
    最好的方法是測試,調試一下,就會知道確實是這樣
    要是很簡單的話,我也不用在此詢問各位再此謝謝各位!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      

  13.   

    chenquan(嘉威王子) 的方法
    showmodal確實是行,還有其他方法嗎
      

  14.   

    formstyle 设置为fsMDIChild,创建该窗体就会执行
    formshow事件。
      

  15.   

    to 楼主,不明白你上面说的,
    chenquan(嘉威王子) 的方法 不就是用FrmMyGod:=TFrmMyGod.Create(Application); 而不是用Application.CreateForm 来创建的嘛,跟用showmodal和show没什么关系的。
      

  16.   

    謝謝sysu(死树) 的解答,
    用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嗎?
      

  17.   

    To sysu(死树) 
    測試程序已發送,請查收哪位要測試程序,請貼出email,我會發送給各位,讓大家都來查找,測試,調試其中的問題
    再次謝謝各位!
      

  18.   

    to 楼主:
    程序收到了,我试了一下,果真是这样,我原来想的也有些问题。
    其实问题就是在Visible属性上,它默认是False的,所以在创建Form时,如果它是True,因为Visible值发生了变化,就一定会把Form显示出来,也就会产生OnShow事件(这时FrmMyGod.Show;是多余的了)。
    所以这时需要把Visible设为False。
      

  19.   

    好像只能把Visible设为False。才可以
    以前沒有太在意,真是奇怪
    今天結帖