在mainfrm创建内嵌窗体innerfrm后,再在mainfrm操作报内存错误
这个是unit UPublicMethods;公共单元的方法:
procedure OpenInsetFrm(Frm: TForm; FrmClass: TFormClass; Onwer: TWinControl);
var
I: Integer;
begin
if Onwer.ComponentCount > 0 then
begin
for I := Onwer.ComponentCount - 1 to 0 do
TForm(Onwer.Components[I]).Free;
end;
Frm := FrmClass.Create(Onwer);
with Frm do
begin
BorderStyle := bsNone;
WindowState := wsMaximized;
Parent := Onwer;
// Show;
end;
end;
uses UForeignerManagementFrm, UAbroadManagementFrm, UPublicMethods;
var
Frm_ForeignerManagement: Tfrm_ForeignManagement;
Frm_AbroadManagement: Tfrm_AbroadManagement;
procedure TMainFrm.btn_AbroadManagementFrmClick(Sender: TObject);
begin
UPublicMethods.OpenInsetFrm(Frm_AbroadManagement, Tfrm_AbroadManagement, pnl_Frm);
Frm_AbroadManagement.IsAdd := True;
Frm_AbroadManagement.Show;
end;
procedure OpenInsetFrm(Frm: TForm; FrmClass: TFormClass; Onwer: TWinControl);
var
I: Integer;
begin
if Onwer.ComponentCount > 0 then
begin
for I := Onwer.ComponentCount - 1 to 0 do
TForm(Onwer.Components[I]).Free;
end;
Frm := FrmClass.Create(Onwer);
with Frm do
begin
BorderStyle := bsNone;
WindowState := wsMaximized;
Parent := Onwer;
// Show;
end;
end;
procedure OpenInsetFrm(Frm: TForm; FrmClass: TFormClass; Onwer: TWinControl);
var
I: Integer;
begin
if Onwer.ComponentCount > 0 then
begin
for I := Onwer.ComponentCount - 1 to 0 do
Onwer.Components[I].Free; //直接释放好了,如果你转成TForm的话有可能出问题,因为此Component[i]有可能不是TForm类
end;
Frm := FrmClass.Create(Onwer);
with Frm do
begin
BorderStyle := bsNone;
WindowState := wsMaximized;
Parent := Onwer;
// Show;
end;
end;