procedure TForms1.FormClose(Sender: TObject; var Action: TCloseAction); 
begin 
action:=cafree; 
Forms1:=nil;////这一句 
end; 
目前这样关子窗口可以的,但我不想写Forms1,有没办法用其它的变量来代替。

解决方案 »

  1.   

    if (Sender) is TForm then
      Sender := nil;
      

  2.   

    楼主貌似是想把其他关掉,而不关闭FORM1吧
      

  3.   

    这还看不出来?
    lz另一个地方用了
    if Assigned(Forms1) then估计这个 Forms1 类型的有很多个,所以不想每个都打。
      

  4.   

    5楼理解的对,就是子窗口有很多,操作可能中途关了又开,开了又关,主窗口不关的情况下,不nil,重新打开曾关过子窗口会出错的。所以必须nil;但每个子窗口名字又不同,一个一个打,累死。
      

  5.   

    self是指针,可读不可写,试过,不行。sender也是不行的,我原来就想用sender,失败了。
      

  6.   

    procedure TForms1.FormClose(Sender: TObject; var Action: TCloseAction); 
    var
      f :TForms1;
    begin 
      if not (Sender) is TForms1 then exit;
      f := Sender as TForms1;
      action:=cafree; 
      f := nil;
    end;