在主界面上有個函數負責生成
tSheet:=TtabSheet.Create(nil);
    tSheet.Name := 'Sheet_'+name;
    tSheet.PageControl := FrmOwner_pageconer;在界面基類退出事件裡負責清楚
if Application.FindComponent('Sheet_'+Self.Name) <> nil then //TFrmMain.openForm
      Application.FindComponent('Sheet_'+Self.Name).Destroying;
無論是Free FreeOnRelease,Destroying 都能得到執行不報錯!
可是PageControl的TabSheet還在。

解决方案 »

  1.   

    估计你建立的名称与你FindComponent的名称不对应,你可以这样试试tSheet:=TtabSheet.Create(nil);
        tSheet.Name := 'Sheet_OIK';
        tSheet.PageControl := FrmOwner_pageconer;在界面基類退出事件裡負責清楚
    if Application.FindComponent('Sheet_OIK') <> nil then //TFrmMain.openForm
         FreeAndNil(Application.FindComponent('Sheet_OIK'));
      

  2.   

    procedure TFormDemo.ButtonAddClick(Sender: TObject);
    begin
      with TTabSheet.Create(nil) do
      begin
        PageControl := PageControlOne;
        TabVisible := True;
        Caption := 'TabSheet' + IntToStr(PageIndex);
      end;
    end;
    procedure TFormDemo.ButtonDeleteClick(Sender: TObject);
    begin
      if PageControlOne.ActivePage <> nil then
       PageControlOne.ActivePage.Destroy;
    end;
      

  3.   

    哈哈 你喜歡用With語句 !! 原來你用ActivePage來關聯哦! 
       不過總得感覺不好牢固!
      先試下看
      

  4.   

    wywry(Wyatt) 
     估计你建立的名称与你FindComponent的名称不对应,你可以这样试试b
    不可能啊!不對得話就查不到啊
      

  5.   

    無論是Free FreeOnRelease,Destroying 都能得到執行不報錯!
      

  6.   

    满足你.:) :)procedure TFormDemo.ButtonAddClick(Sender: TObject);
    begin
      with TTabSheet.Create(nil) do
      begin
        PageControl := PageControlOne;
        Tag := 10000+PageIndex; //生成特殊标记
        TabVisible := True;
        Caption := 'TabSheet' + IntToStr(PageIndex);
      end;
    end;procedure TFormDemo.ButtonDeleteClick(Sender: TObject);
    var
      Idx: Integer;
    begin
      {处理方法一
      if PageControlOne.ActivePage <> nil then
        //销毁方法一
        PageControlOne.ActivePage.Destroy;
        //销毁方法二
        PageControlOne.ActivePage.Free;}   {处理方法二
       with PageControlOne do
       begin
         for Idx := Pred(ControlCount) downto 0 do
         begin
           if (Controls[Idx].Tag >= 10000) and (Controls[Idx] is TTabSheet) then
             //销毁方法一
             Controls[Idx].Destroy;
             //销毁方法二
             Controls[Idx].Free;
         end;
       end;}
    end;
      

  7.   

    //                             想从Application.FindComponent查到,参数就改成Application
        tSheet := TtabSheet.Create(Application);
        tSheet.Name := 'Sheet_' + Name;if Application.FindComponent('Sheet_'+Self.Name)