在一个主Form里有一个菜单  (“文件”->“打开窗体1”)   
一个子窗体 在子窗体里放一个dxDockPanel1 (exprees的控件) 然后Form的BorderStyle设成bsNone;procedure TfrmRecipe.dxDockPanel1Close(Sender: TdxCustomDockControl);  //子窗体上的dxDockPanel1的关闭事件  
begin
  ModalResult:=mrCancel;
end;第一次能关闭  然后再 “文件”->“打开窗体1” 的时候就出现问题了 用frmRecipe.close 也是这样的错误  倒哦~ 有解决的方法吗?

解决方案 »

  1.   

    欢迎大家加入DELPHI程序员群1805366,一起进步!
      

  2.   

    你创建子窗体的代码,没把真正form实体的引用保存到frmRecipe变量中!
    而frmRecipe变量还是保存的你先前的form引用!
      

  3.   

    帮忙看看要怎么改合适呢?procedure TfrmMain.dxBarButton5Click(Sender: TObject);
    begin
      frmRecipe.ShowModal; //看诊登记
    end;************************************************
    unit URecipe;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, dxDockControl, dxDockPanel, cxRadioGroup, cxControls,
      cxContainer, cxEdit, cxTextEdit, ExtCtrls, cxMaskEdit, cxDropDownEdit,
      cxMemo, cxLookAndFeelPainters, cxButtons, cxGroupBox, TFlatButtonUnit;type
      TfrmRecipe = class(TForm)
        dxDockSite1: TdxDockSite;
        dxLayoutDockSite1: TdxLayoutDockSite;
        dxDockPanel1: TdxDockPanel;
        dxDockingManager1: TdxDockingManager;
        Panel1: TPanel;
        Panel2: TPanel;
        Label13: TLabel;
        rdStu: TcxRadioButton;
        rdTeachar: TcxRadioButton;
        rdWorker: TcxRadioButton;
        rdOther: TcxRadioButton;
        btnOk: TFlatButton;
        btnCancel: TFlatButton;
        cxGroupBox1: TcxGroupBox;
        Label1: TLabel;
        cxTextEdit1: TcxTextEdit;
        Label2: TLabel;
        edtName: TcxTextEdit;
        Label3: TLabel;
        cbSex: TcxComboBox;
        cbDoctor: TcxComboBox;
        Label10: TLabel;
        edtAge: TcxTextEdit;
        Label4: TLabel;
        lbJob: TLabel;
        Label5: TLabel;
        memo: TcxMemo;
        FlatButton1: TFlatButton;
        Label9: TLabel;
        memoRecipe: TcxMemo;
        FlatButton2: TFlatButton;
        editMoney: TcxTextEdit;
        Label8: TLabel;
        Label6: TLabel;
        memoRe: TcxMemo;
        edtStuID: TcxTextEdit;
        procedure rdTeacharClick(Sender: TObject);
        procedure rdWorkerClick(Sender: TObject);
        procedure rdOtherClick(Sender: TObject);
        procedure btnCancelClick(Sender: TObject);
        procedure rdStuClick(Sender: TObject);
        procedure btnOkClick(Sender: TObject);
        procedure dxDockPanel1Close(Sender: TdxCustomDockControl);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      frmRecipe: TfrmRecipe;implementation{$R *.dfm}
    procedure TfrmRecipe.rdStuClick(Sender: TObject);
    begin
      lbJob.Caption:='学号      :';
    end;
    procedure TfrmRecipe.rdTeacharClick(Sender: TObject);
    begin
      lbJob.Caption:='教师号 :';
    end;procedure TfrmRecipe.rdWorkerClick(Sender: TObject);
    begin
      lbJob.Caption:='员工号 :';
    end;procedure TfrmRecipe.rdOtherClick(Sender: TObject);
    begin
      lbJob.Caption:='临时号 :';
    end;procedure TfrmRecipe.btnCancelClick(Sender: TObject);
    begin
      ModalResult:=mrCancel;
    end;procedure TfrmRecipe.btnOkClick(Sender: TObject);
    begin
      ModalResult:=mrOk;
    end;procedure TfrmRecipe.dxDockPanel1Close(Sender: TdxCustomDockControl);
    begin
      ModalResult:=mrCancel;
    end;end.
      

  4.   

    这个问题我也见过,不过的窗体是在别的窗体中动态调用,例如
    form1:=TForm1.Create(Application); form1是一个mdi窗体.
    如果没有在Form1的Destroy中加入 form1:=nil;
    第一个打开\关闭都没有问题,如果第二打开就会出错,
    如果用Self:=nil都不行.我已经在Form1.OnClose中写入Action:=caFree,
    不知道楼主是怎么打开窗体的,把代码拿出来看看.
      

  5.   

    procedure TfrmMain.dxBarButton5Click(Sender: TObject);
    begin
      frmRecipe.ShowModal; //看诊登记
    end;
      

  6.   

    在URecipe的关闭事件里直接写Close();看看如何。