两个form ,form1 调用 form2  代码var
 lform : TForm2;
begin
 lform := TForm2.create(nil);(Application);
 lform.show(showmodal);end;在form2的onshow事件里写
procedure Tform2.onshow()
begin
  self.close; //这句不起作用
end;form2 会报错 cannot change visible in onshow or onhide并用 form2会依然显示,不会消失不管你在canclose 或 closequery 中去设置
action 和 canclose 都不行实际上是要完成一个功能就是,显示完了,立即自动关掉

解决方案 »

  1.   

    。你直接在form2显示时延迟几秒中,然后在self.close就行了。
      

  2.   


    var
      Form2: TForm2;
    implementation{$R *.dfm}procedure TForm2.Timer1Timer(Sender: TObject);
    begin
        Self.Close;
    end;添加个Timer,时间设置短一点
      

  3.   

    var
     lform : TForm2;
    begin
     lform := TForm2.create(nil);(Application);
     lform.show(showmodal);
     //show之后可以使用Sleep睡一下!后再关闭
     //或者在TForm2中加入Timer。时间到在关闭!
     sleep(2000);
     lform.close;end;
      

  4.   

    在oncreate和onshow里都是不能colse的,具体原因我也没深入研究。不过一般在onshow或者oncreate里需要colse都是有条件不满足的情况下才会这么做,所以可以把条件判断放到对象创建或显示之前。不然的话只能像楼上说的在timer里close,但是这样做不好,自己用无所谓,如果客户用就会提意见了。
      

  5.   

    在create事件代码最后写:
    PostMessage(Handle,WM_CLOSE,0,0);