procedure TMainForm.button1Click(Sender: TObject);
begin
    if Application.FindComponent('frmBaseData')<>nil then//调试时这个地方跳过
    begin
      if frmBaseData.WindowState=wsMinimized then
        if MainForm.MDIChildCount=0 then frmBaseData.WindowState:=wsNormal
        else if (ActiveMDIChild.WindowState=wsMinimized) then frmBaseData.WindowState:=wsNormal
        else frmBaseData.WindowState:=ActiveMDIChild.WindowState;
      frmBaseData.BringToFront;
    end
  else
    frmBaseData:=TfrmBaseData.Create(Application);
    if MainForm.MDIChildCount=1 then frmBaseData.WindowState:=wsMaximized;end;明明有这个窗体,怎么条件显示为空呢??
再创建提示错误:An unknwn error has occurred. 

解决方案 »

  1.   

    if frmBaseData <>nil then//调试时这个地方跳过 
      

  2.   

    如果frmBaseData是个窗体的话,uses中加入这个单元的引用,然后用
    if assigned(frmBaseData) then
    ...
    就可以
      

  3.   

    frmBaseData是个fsMDIChild类型的窗体
      

  4.   

    if Assigned(frmBaseData) then 
      

  5.   

    窗体关闭的时候要释放
    Action:=caFree;
    frmBaseData:=nil;
      

  6.   

    楼上的大哥 把你的代码替换了
    结果一样 也是直接就蹦过去了,显示frmbasedata=nil?????郁闷
      

  7.   

    FindComponent是基于TComponent类的组件管理的基础上的,也就是说frmBaseData必须是在Application下create的,如果是你自己create的话,那这个返回就是nil了。另外你说的//调试时这个地方跳过 ,不知道是不是这里没有编译进去。
    delphi编译器会把某些没有没有作用的代码不编译进去的.
      

  8.   

     
    frmBaseData:=TfrmBaseData.Create(Application); 老提示我错误是为什么啊?
      

  9.   

    我又实验了一下 发现问题出在frmBaseData这个窗体上
    同样的调用别的fsMDIChild类型的窗体,一样的代码就不会出现错误,
    可问题是不知道窗体哪里设置不一样了
      

  10.   

    试一下这样,
    procedure TMainForm.button1Click(Sender: TObject); 
    begin 
        if Slef.FindComponent('frmBaseData') <>nil then//调试时这个地方跳过 
        begin 
          if frmBaseData.WindowState=wsMinimized then 
            if MainForm.MDIChildCount=0 then frmBaseData.WindowState:=wsNormal 
            else if (ActiveMDIChild.WindowState=wsMinimized) then frmBaseData.WindowState:=wsNormal 
            else frmBaseData.WindowState:=ActiveMDIChild.WindowState; 
          frmBaseData.BringToFront; 
        end 
      else 
        frmBaseData:=TfrmBaseData.Create(MainForm); 
        if MainForm.MDIChildCount=1 then frmBaseData.WindowState:=wsMaximized; 
    end