PageControl里显示窗体,窗体里按钮关闭时有时会报异常
网上找的下边这段代码,窗体里关闭按钮点击后有时就出地址码错误或者提示:Abstract Error.
我跟踪是在关闭按钮代码:Close; 后边报错(Close;后边就是end;了)
我用的TRzPageControl,改成TPageControl测试也是偶尔出现这种情况。
新建立了个单独的工程,整了几个窗口,每个窗口上边只放个memo和Button,测试也是偶尔这样。
MyForm := PFormClass.Create(Self);
改成
MyForm := PFormClass.Create(MyTabSheet );
也是一样不行。
后来改进成TForm和TTabSheet都单独释放也是不行
谁给我指条明路吧。。。
以下为网上的代码,各种改进测试都无效,难道是窗体释放异常?
-----------------------------------------------------------------------------------------------
delphi 使用PageControl嵌套显示窗体,需要必须实现两个部分:
1.创建标签页和创建窗体。
2.指定窗体关闭函数,该函数包含关闭当前标签页。
1.创建标签页和创建窗体。
//如果不存在就创建标签页和窗体,如果存在,就找到。
//PFormClass:要创建的窗体的类,CName:窗体的Cption;EName :窗体的Name
procedure TMainForm.CreateTabSheet(PFormClass: TFormClass;CName,EName:string);
const
MyTabSheetFirstName = 'MyTabSheet_';
var
MyForm:TForm;
MyTabSheet : TTabSheet;
MyTabSheetName :string;
begin
MyTabSheetName := MyTabSheetFirstName + EName;
//查找该标签页是否已经存在
MyTabSheet := TTabSheet(self.FindComponent(MyTabSheetName));
//不存在,就创建出新的标签页
if MyTabSheet = nil then
begin
try
//创建新标签页
MyTabSheet := TTabSheet.Create(self);
MyTabSheet.Name := MyTabSheetName;
MyTabSheet.PageControl := pgcMain;
MyTabSheet.Caption := CName;
MyTabSheet.Align := alClient;
//创建窗口
try
MyForm := PFormClass.Create(self);
myform.Name := EName;
MyForm.Parent := MyTabSheet;
MyForm.BorderStyle := bsNone;
MyForm.Top := 0;
MyForm.Left := 0;
MyForm.Width := MyTabSheet.Width;
MyForm.Height := MyTabSheet.Height;
MyForm.Align := alClient;
//关联窗体关闭时,执行的函数。
MyForm.OnClose := CloseTabSheet;
MyForm.Show;
except
FreeAndNil(MyForm);
Abort;
end;
except
FreeAndNil(MyTabSheet);
Exit;
end;
end;
//设置当前的标签页为活动页
pgcMain.ActivePage := MyTabSheet;
end;
2.指定窗体关闭函数,该函数包含关闭当前标签页。
//关闭窗体时,也关闭其所处的标签页
procedure TMainForm.CloseTabSheet(Sender: TObject; var Action: TCloseAction);
begin
if (sender as TForm).Parent <> nil then
begin
TTabSheet((sender as TForm).Parent).free;
//把关闭的标签页的前一页设为活动页
pgcMain.SelectNextPage(false);
abort;
end;
end;