一个主窗体里,里面放了一个PageControl,动态生成Page,然后打开窗体A时,把parent都设为PageControl中Page的parent,现在窗体A中有一个关闭按扭,在关闭的时候我想顺想删除刚刚生成的那个Page,要怎么做呢?我在主窗体里添加了一个 全局的函数 DeletePage,然后在窗体A中调用,但是出现abstract error,我要怎么处理呢?

解决方案 »

  1.   

    子窗体向主窗体PostMessage,主窗体响应消息删除对应的TabSheet
    不能在子窗体中释放主窗体的对象,即使是回调也不行
      

  2.   

    不要这样做,DELPHI已经为我们提供了DOCKING的支持,为什么不用呢!DELPHI的DEMOS下面有一个Docking的例子,请查考!
      

  3.   

    比如:你动态成PageControl组件的tabsheet1和一个Form1,并把
    Form1.Parent的属性设置为tabsheet1;可以这样动态删除。。比如Form1里面有个CLOSE的BUTTON1
    button1_click;
    begin
      self.Parnet.free; //这样就可以了...
    end;
      

  4.   

    self.Parnet.free 也是不错哦,还是会出错,Project xxxx raised exception class yyyyy with message 'zzzzzz'.Process stopped.  Use Step or Run to continue.
      

  5.   

    不要试图在控件的事件里释放自身
    因为释放parent时,parent会释放它的所有子控件,所以parent.free肯定出错我已经说了方法了,要释放的话,子窗口PostMessage一个消息到父窗口
    父窗口收到消息后释放对应的TabSheet,消息处理的代码到处有,自己找
      

  6.   

    主窗体代码
    procedure TForm1.Button1Click(Sender: TObject);
    begin
            //创建tabsheet代码省略
            Form2.Show;
    end;procedure TForm1.DeletePage();
    begin
            Form1.PageControl1.ActivePage.Destroy;
            Form2.Close;
    end;子窗体代码
    procedure TForm2.FormActivate(Sender: TObject);
    var
            i: integer;
    begin
            for i:=0 to self.ControlCount-1 do
                    self.Controls[0].Parent := Form1.PageControl1.ActivePage;
    end;procedure TForm2.Button1Click(Sender: TObject);
    begin
            Form1.DeletePage();
    end;这样是可以的啊