f_sl_kh:=Tf_sl_kh.Create(self);
    f_sl_kh.tag := 1;
    f_sl_kh.Show;我碰到问题了,跟踪程序发现,当Tf_sl_kh.create后,便跳到f_sl_kh的formshow事件里去了。而该事件里有个判断      if f_sl_kh.Tag = 1 then
而正如各位可以看到的,    f_sl_kh.tag := 1; 在     f_sl_kh:=Tf_sl_kh.Create(self); 的下一行。
程序便出错了。
谁可以告诉我,为什么当Tf_sl_kh.create后不是执行下一行代码    f_sl_kh.tag := 1; 反而会跳到f_sl_kh的formshow事件里去了呢?    f_sl_kh:=Tf_sl_kh.Create(self);
    f_sl_kh.tag := 1;
    f_sl_kh.Show;我碰到问题了,跟踪程序发现,当Tf_sl_kh.create后,便跳到f_sl_kh的formshow事件里去了。而该事件里有个判断      if f_sl_kh.Tag = 1 then
而正如各位可以看到的,    f_sl_kh.tag := 1; 在     f_sl_kh:=Tf_sl_kh.Create(self); 的下一行。
程序便出错了。
谁可以告诉我,为什么当Tf_sl_kh.create后不是执行下一行代码    f_sl_kh.tag := 1; 反而会跳到f_sl_kh的formshow事件里去了呢?大家帮帮忙,看出原因的请指教! 

解决方案 »

  1.   

    create会载入属性,如果你的form的visible = true,则会调用OnShow,如果是这样的话,那么在
    f_sl_kh:=Tf_sl_kh.Create(self);
    返回以前,OnShow实际已经被调用了,而默认,tag是等于0的,除非你设置了,所以
    if f_sl_kh.Tag = 1 then
    的判断出乎你的意料了是不是这样?随便说说,
      

  2.   

    如果是MDIChild窗口的话 Visiable=True,所以创建完成后就会调用Show
      

  3.   

    你可以在formshow再加一个全局变量pvShow : Integer
    如:
    if (f_sl_kh.Tag = 1) and (pvShow=1) then
    begin
      
    end
    else begin
      pvShow := 1;
    end;
      

  4.   

    alphax(英文水皮士) 兄的随便说说可是一语中的呀。
    呵呵……
    的确如此。
      贴子示众7天,让感兴趣的人看看,然后结贴。
      

  5.   

    你的应该是MDI子窗体吧,Create以后会自动Show出来的
      

  6.   

    解决方法之一:
    在Tf_sl_kh类中写另一个构造函数,在这个构造函数中设f_sl_kh.tag := 1,然后再调用原来的构造函数
    大体如下:
    Constructor MyCreate(AOwner:TComponent);
    begin
      f_sl_kh.tag := 1;
      Create(AOwner);
    end;
      

  7.   

    跟风写的那样,
    f_sl_kh.tag := 1;
        f_sl_kh.Show;
    放在form的oncreate里就是你想要的了
      

  8.   

    不知道楼主出了什么错了,我试了一下,没发现什么问题,具体我是这样试的。form1:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      form2:=TForm2.Create(self);
      form2.Tag:=1;
      form2.Show;
    end;form2
    procedure TForm2.FormShow(Sender: TObject);
    begin
      if form2.Tag = 1 then
      begin
        showmessage('test');
      end;
    end;
    没遇到问题,不过如果屏蔽了这行//Application.CreateForm(TForm2, Form2);再FORM2 的 visible =ture 的话 就会报错,原因应该 正如alphax(英文水皮士)  说的那样。