三个窗体:
form1.button1.clickà自动打开FORM2,自动运行完其中一个模块后à自动关闭FORM2à接下来运行form1.button2.click-à自动打开FORM3,运行完其中一个模块后à自动关闭FORM3à接下来运行form1.button3.click。此时的问题主要是到form1.button3.click运行完后,FORM2与FORM3的窗体才关闭,请问问题如在那里?procedure Tform2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;  
  Form1.BitBtn2.Click;
end;procedure Tform3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;  
  Form1.BitBtn3.Click;
end;

解决方案 »

  1.   

    三个窗体的关系是怎么样的,谁是主窗体?
    procedure Tform2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Self.Hide;  
      Form1.BitBtn2.Click;
    end;procedure Tform3.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Self.Hide; 
      Form1.BitBtn3.Click;
    end;
      

  2.   

    谢谢 zzllabc(抱朴子--清心释累,绝率忘情) 的关注 。
    form1为主窗体
      

  3.   

    不知道楼主的两个窗口是怎么 show 的,要是 ShowModal 的就好办了。procedure TForm1.button1Click(Sender: TObject);
    begin
      FORM2.ShowModal;
      button2.Onclick(Sender);
      BitBtn3.Onclick(Sender);
    end;procedure TForm1.button2Click(Sender: TObject);
    begin
      FORM3.ShowModal;
    end;
      

  4.   

    利用消息就好处理了。
    procedure Tform2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;  
      postMessage(form1.handle,MY_Msg,1,0);
    end;procedure Tform3.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;  
      postMessage(form1.handle,MY_Msg,2,0);
    end;
    procedure DelMsg(var Msg:TMessage);message MY_Msg;procedure Tform1.DelMsg(var Msg:TMessage);
    begin
      case Msg.WParam of
      1:BitBtn2.Click;
      2:BitBtn3.Click
      end
      

  5.   

    我知道你的意思
    这样写当然会是这样的,因为
    procedure Tform2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;  
      Form1.BitBtn2.Click;
    end;Tform2.FormClose事件中 调用 Form1.BitBtn2.Click;此时close事件并没有执行完成自然不会关闭
      

  6.   

    如果要达到你的效果
    这样就行
    procedure TForm1.button1Click(Sender: TObject);
    begin
      if   FORM2.ShowModal = mrok then 
         Form1.BitBtn2.Click;
    end;
    procedure Form1.BitBtn2Click(Sender: TObject);
    begin
      if FORM3.ShowModal = mrok then 
         Form1.BitBtn2.Click;end;
      

  7.   

    谢谢以上各位的关注。
    可能是我行表述不清,大家提供的解决办法还不成功。我做的是一个数据下载、数据解压、数据选择和数据导入的程序,缺省状态下是全自动,当然也可以单步运行,单步运行较为简单,现在问题就出在全自动运行上。
    我再说一下:
    form1为主窗体,按下form1.button1后,自动打开form2,在form2中又有两个button,一个用以执行一段程序,一个用以返回(即结束form2),form2的运行顺序如下:
    第一、
    procedure TForm2.FormActivate(Sender: TObject);
    begin
      Button1.Click;
    end;
    第二、
    procedure TForm2.Button1Click(Sender: TObject);
    begin  
      begin
      运行一段程序........ 
      end;
      Button2.onClick(Sender);
    end;第三
    procedure TForm2.Button2Click(Sender: TObject);
    begin
      close;
    end;form2窗体从打开到关闭全部自动完成,不需按下form2的任何button(当然这两个button是为分步执行时设的)form3与form2相同。
    假如对form2以模式窗体显式,执行完form2的button1时,窗体就停下,必须按下form2的button2,窗体才能关闭,而这不是我想的, 我想要的是这个窗体运行完程序后自动关闭并开始下一步运行。
      

  8.   

    问题出在Sender上procedure TForm2.Button1Click(Sender: TObject);
    begin  
      begin
      运行一段程序........ 
      end;
      Button2.onClick(Sender);//注意这里,你觉得这个Sender是什么?
    end;改成Button2.onClick(Button2);试试
      

  9.   

    谢谢CHIJINGDE()的关注,改成Button2.Click也不起作用。也不知修改了哪里,form2窗体运行后可自动关闭,但form3运行后仍不能自动关闭,只有到程序全部运行完才关闭。困惑中.....
      

  10.   

    也不知修改了哪里,//呵呵,应该就是我说的那里阿form3运行后仍不能自动关闭?//贴代码出来看看
      

  11.   

    唉,问题还是没有解决:
       第二个窗体之所以自动关闭是因为第三个窗体的打开,而第三个窗体在全部程序运行完的SHOWMESSAGE后才关闭,就是因为最后的SHOWMESSAGE,第三个窗体才关闭,否则在第三个窗体运行完成后一直到最后的SHOWMESSAGE都会在第一个窗体前出现。
       这个问题只能自己慢慢研究了。(想不到VFP极简单的东西,到最DELPHI是这么难。为解决vfp中EVALUATE函数所能实现计算表达式的功能,用了一天才搞定,还只能满足一个条件)见者有分