// 定义一个基本类类型
TMyChildClass = class of TBaseChild;
// 定义一个枚举,表示不同的子窗体,在主窗体中根据不同的需求设置
TChildType = (ctA, ctB);
// 主窗体中建立子窗体过程,根据选择传入子窗体类型,假设每个子窗体只要一个
procedure MainForm.CreateChild(ChildType: TChildType);
const
ChildClass: array[TChildType] of TMyChildClass = (TAChild, TBChild);
var
Child: TBaseChild;
I: Integer;
begin
I := 0;
// 查找该类型子窗体是否存在
while (I < MDIChildCount) and not (MDIChildren[I] is ChildClass[ChildType]) do
Inc(I);
// 存在,显示之
if I < MDIChildCount then
MDIChildren[I].Show
else // 否则,建立该类型子窗体
begin
Child := ChildClass[ChildType].Create(Application);
Child.Show;
end;
end;
if not Assigned(frmUserList) then
begin
Application.CreateForm(TfrmUserList, frmUserList);
frmUserList.Show;
end
else
begin
frmUserList.Show;
frmUserList.BringToFront;
end;