Self对象可能不是指的窗体!
换成Formname.Close;

解决方案 »

  1.   

    是不是MDI窗口?是的话要在OnClose里加Action := caFree;
      

  2.   


    一般Self指的是自己类的引用你用楼上的方法肯定没有问题
      

  3.   

    不是这样子的,我是这样的:
    在窗体上放了个dbgrid,双击dbgrid的一条记录,显示打印。打印完毕,出现本窗体,然后
    就关不掉了
    我跟踪代码,没有发现
    糊涂了……
      

  4.   

    你是在哪一个函数中调用Self.Close的?
      

  5.   

    ///////////////////////////
    procedure TfrmPSearJing.DBGrid1DblClick(Sender: TObject);
    begin
      try begin
      if not (Trim(self.DBGrid1.Fields[0].AsString) ='') then begin
                frmPsjing.QRLabel1.Caption:=self.DBGrid1.Fields[0].AsString;
                frmPsjing.QuickRep1.Preview ;
               end
         else  begin
               application.MessageBox(Pchar('请先查询!'),'提示信息!',mb_IconInformation+mb_oK);
               self.ComboBox1.SetFocus ;
               end;
         end;  except
          application.MessageBox(Pchar('请先查询!'),'提示信息!',mb_IconInformation+mb_oK);
      end;
    end;
    //////////////////
    procedure TfrmPsjing.QuickRep1Preview(Sender: TObject);
    begin
       form2.QRPreview1.QRPrinter :=self.QuickRep1.QRPrinter;
        form2.Show;
    end;
    ////////////
    procedure TForm2.CloseBtnClick(Sender: TObject);
    begin
    self.Close;
    end;
    /////////
    代码依次按照以上顺序走的
    当执行到最后时。form2.close时,返回到了frmPSearJing,然后就  关不掉了
      

  6.   

    改成这样行不行:
    procedure TfrmPsjing.QuickRep1Preview(Sender: TObject);
    begin
      form2 := TForm2.Create(Self);
      try
        form2.QRPreview1.QRPrinter :=self.QuickRep1.QRPrinter;
        form2.ShowModal;
      finally
        form2.Free;
      end;
    end;
      

  7.   

    仔细考虑一下你的form2有无实例产生,
    产生后的窗体名是否还是form2
      

  8.   

    你说的情况我碰到过,不是self.close的问题,是TQRPreview搞的鬼,在它身上找找问题根源吧!
      

  9.   

    这有什么怪,我有一次我的Form1.Wdith和Form1.Height都不能用啊,说什么变量没有定义,奇怪,我在Uesr下有Forms
      

  10.   

    嘻,倒是能关掉了,可是,我的form2的QRPreview上没有数据了。如果用
        form2.QRPreview1.QRPrinter :=self.QuickRep1.QRPrinter;
        form2.Show;  ////////////
    能显示数据,如果用:
    form2 := TForm2.Create(Self);
      try
        form2.QRPreview1.QRPrinter :=self.QuickRep1.QRPrinter;
        form2.ShowModal;///////////
      finally
        form2.Free;
      end;
    则能关掉,但是QRpreview不显示数据,当然。只是一闪。然后又回到了本窗体(不能关掉的窗体)  
      

  11.   

    选择project|Build,重新编译连接一下。
      

  12.   

    保险起见,声明局部变量Form2。
    procedure TfrmPsjing.QuickRep1Preview(Sender: TObject);
    var
      form2: TForm2;
    begin
      form2 := TForm2.Create(Self);
      try
        form2.QRPreview1.QRPrinter :=self.QuickRep1.QRPrinter;
        form2.ShowModal;///////////
      finally
        form2.Free;
      end;
    end;
      

  13.   

    to:peihexian(没什么好说的) 
    是TQRPreview搞的鬼,在它身上找找问题根源吧.....
    我知道呀,怎么找呀???????????
      

  14.   

    是不是MDI窗口?是的话要在OnClose里加 self.release.
      

  15.   

     Delphi中MDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会发觉该子窗口只是最小化,而不是你预期的那样被关闭。解决办法是在子窗口的OnClose事件处理过程中加入如下代码,示例:procedure ChildForm.OnClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;
    end;
       Delphi为一个Form的关闭行为指定了四种方式,分别是:caNone 禁止Form被关闭 
    caHide Form不被关闭,但是被隐藏。被隐藏的Form仍然可以被程序访问。 
    caFree Form被关闭,并且释放其占用的资源。 caMinimize Form被最小化而不是被关闭,这是MDI子窗口的默认关闭行为。 
      

  16.   

    我估计是TQRPreview搞的鬼,但是,错在哪我又不知道。。
      

  17.   

    在窗体中加入TQRreport则该窗体成为一个平台,最好不要直接用了。
      

  18.   

      如果是用TQRreport做的窗口则运行后的窗口名不是Form2,你可以查找一下窗口名再发消息关掉它。
      如果你是用TQRPreview自己做的,那么放个BitBtn,设置属性Kind:= bkClose即可。
      

  19.   

    是用TQRpreview自己做的。放个bitTn还是不管用
    你去看我帖子:
    http://www.csdn.net/expert/topic/445/445725.shtm
    多谢!
      

  20.   

    直接用Close();不就行了,我都用过没有问题的!