是不是子窗体都需要在程序运行过程中动态创建?
在程序中动态创建的子窗体如何通过按钮时间去关闭它?就象正常窗体的Form1.close那样。

解决方案 »

  1.   

    onclose事件中写
    action := cafree;
      

  2.   

    主窗体上的按钮或其它控件控制子窗体的关闭,是不是这个意思?如果是的话,那就是
    Button.Click :  子窗体.close但是必需在子窗体的OnClose事件中加入
    action := cafree;
      

  3.   

    对的,一定要在运行的时候去创建
    在子窗体的CLOSE事件中:
    ACTION:=CAFREE ;
    F_child:=nil;
      

  4.   

    创建的时候可以这么写: 
    begin
        判断是否已经打开了改窗口,没有的话 then 
        Application.CreateForm(Tform, form1);
        Form1.Show;
    end;关闭:
    procedure Tform1.Button1Click(Sender: TObject);
    begin
      Close;
    end;
    procedure Tform1.FormClose(Sender: TObject;
      var Action: TCloseAction);
    begin
      Action := caFree;
    end;
      

  5.   


    if not assigned(form1) then
      form1:=TForm1.craate(Application);
    form1.show;
      

  6.   

    所有的子窗体除了第一个要他自动出现的那个子窗体自动创建外
    其余的都不要自动创建  可以自己定义创建下面是代码你可以先建立一个过程申明过程
    procedure ShowMDIForm(FormClass: TFormClass; var frm;AOwner: TComponent); procedure Tfrmmain.ShowMDIForm(FormClass: TFormClass; var frm;AOwner: TComponent);
    var
      i: Integer;
      bFound: Boolean;
      NewForm: TForm;
    begin
    bFound:=False;
    //NewForm:=Nil;
    //查找该窗口是否已存在,如果存在就显示
    For i:=0 to frmmain.MDIChildCount-1 do
        begin
        if MDIChildren[i].ClassName = FormClass.className then
           begin
           newForm:=MDIChildren[i];
           Tform(frm):=newform;
           newform.Show;
           newform.WindowState:=wsMaximized;
           self.Update;
           bFound:=True;
           Break;
           end;
        end;
    //如果不存在,就重新创建
    if Not bFound then
      begin
       newform:= TForm(FormClass.NewInstance);
      TForm(frm):= newform;
      newform.Create(Owner);
      newform.Show;
      newform.WindowState:=wsMaximized;
      self.Update;
      end;end;这个也可以在主窗体中创建   然后就在主窗体的按钮事件中添加如下代码procedure Tfrmmain.Button1Click(Sender: TObject);
    begin
    showMDIform(Tform1,form1,form1);
    end;就可以啦上面的代码都是通过测试的
    够详细吧
      

  7.   

    关闭子窗口事 只需在子窗口的close事件中
    写入action := cafree;就ok啦
      

  8.   

    打开窗口的时候
    begin
      if not assigned(c_form) then
      begin
        c_form:=TC_form.create(application);
        c_form.show;
      end;
    end;
    主要是为了判断该实例是否已经初始化过
    在窗口的Close()里写
    aciton:=caFree;
    在窗口的Destroy里写
    c_from:=nil;
    这种写法是很常用的