在MDI窗体中通过菜单动态创建子窗体的问题。

danrushui 2003-02-18 08:08:15
我想通过菜单创建子窗体,可是菜单很多,每次在创建前要检查一下是否已经创建过了该菜单要创建的窗体。想把检查是否已经创建和创建写成一个过程以下是大致思路:
procedure TMainFrm.CreateChild({不知此处如何设参数});
var
i:integer;
bExit:boolean;
begin
bExit:=False
for i=MainFrm.MDIChildCount downto 0
begin
if MainFrm.MDIChildren[i].Name=ChildName then
begin
MainFrm.MDIChildren[i]{调用一个API,恢复到初始状态}
bExit:=True
end;
end;
if bExit=False then
Application.CreateForm({不知此处如何用参数});
end;
以上是我只做一个菜单用的方法,谁有别的方法思路请给予指导一下。
...全文
60 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
luckyboy97 2003-06-04
  • 打赏
  • 举报
回复
楼上的说的对,不需要全部检查,只要检查当前的就可以了
seawavefj 2003-06-03
  • 打赏
  • 举报
回复
只要检查自己要创建的窗体是否存在就可以了
yoisyois 2003-06-03
  • 打赏
  • 举报
回复
MainFrm.MDIChildren[i].BringToFront;//调到最前面

bbs791109 2003-06-03
  • 打赏
  • 举报
回复
樓上的正確
radeonle 2003-06-03
  • 打赏
  • 举报
回复
结贴吧
feng93017 2003-06-03
  • 打赏
  • 举报
回复
Params ChildName is name of the child form.
params TChildClass is class name of the child form.
feng93017 2003-06-03
  • 打赏
  • 举报
回复
如果没有创建,那么创建它,如果已经创建,把它置为最前面。

procedure TMainFrm.CreateChild(ChildName: string, TChildClass: string);
var
i:integer;
begin
for i= MDIChildCount downto 0
begin
if MDIChildren[i].Name=ChildName then
MDIChildren[i].BringToFront
else
begin
ChildName := TChildClass.Creat(Self);
ChildName.Show;
end;
end;
end;
radeonle 2003-02-18
  • 打赏
  • 举报
回复
楼上的说的对呀,也可以创建了一个窗体后,把对应的菜单按钮设成false.
当关闭窗口时再把这个菜单对应的按钮设成true.
idilent 2003-02-18
  • 打赏
  • 举报
回复
不用吧,你的每个菜单项都使创建自己的窗体,这样就检查自己要创建的窗体是否存在就可以了,何必要全部检查一遍呢?

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧