50!!50分!!请高手赐教:我的MDI Application,如何每次只显示一个ChildForm?

machin 2001-09-05 04:44:29

如果要再打开一个新的childform,则需判断是否已有childform,如果有,则关闭,然后才新开。

如果没有,则新开一个childform。

在下不懂,忘指教!!
...全文
223 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
machin 2001-09-11
  • 打赏
  • 举报
回复

自己提前。。。 :(
machin 2001-09-10
  • 打赏
  • 举报
回复
to: zhaowin(可可)

谢谢你的解决方案,但是对于那个图片的问题,我该如何解决呢?

狂人恳请高手指教。。
zhaowin 2001-09-10
  • 打赏
  • 举报
回复
试一试,包你满意!!!
procedure OpenForm(FormClass: TFormClass; var fm; AOwner:TComponent);
var
i: integer;
Child:TForm;
begin
for i := 0 to Screen.FormCount -1 do
if Screen.Forms[i].ClassType=FormClass then
begin
Child:=Screen.Forms[i];
if Child.WindowState=wsMinimized then
ShowWindow(Child.handle,SW_SHOWNORMAL)
else
ShowWindow(Child.handle,SW_SHOWNA);
if (not Child.Visible) then Child.Visible:=True;
Child.BringToFront;
Child.Setfocus;
TForm(fm):=Child;
exit;
end;
Child:=TForm(FormClass.NewInstance);
TForm(fm):=Child;
Child.Create(AOwner);
end;
machin 2001-09-08
  • 打赏
  • 举报
回复

高手快来,狂人提前。。。。
machin 2001-09-07
  • 打赏
  • 举报
回复

自我更新。。。
machin 2001-09-07
  • 打赏
  • 举报
回复

感谢jin_fei指教。

如果我要在 主form 显示一张jpg图片,用image控件。

我该怎么做呢?怎么老是显示不出来呢??
machin 2001-09-07
  • 打赏
  • 举报
回复

狂人来提前。。。
machin 2001-09-07
  • 打赏
  • 举报
回复

谢谢wangzh,我也来提前一下。。。
ecgnis 2001-09-07
  • 打赏
  • 举报
回复
up
machin 2001-09-06
  • 打赏
  • 举报
回复

狂人在此感谢各路高人的指教。

加分,加分。。。
jin_fei 2001-09-06
  • 打赏
  • 举报
回复
我的第一张贴子的意思是一个MDIFORM,可能有好几个MDICHILDFORM,但是有时候我可能需要我可以一个类的child只要一个,(在数据库方面比较多,如工资窗口和仓库窗口等),就用这一个过程。
(刷新一下) 的现在意思是MDIFORM只能有一个子窗口,那么打开其它的窗口之前我是要先判决一下此窗口是不是已打开的,(不然关掉再打开不爽),如果不是再关闭后再打开,所在我觉得正确的是先判断一下,至于方法第一个中有然后再根据结果执。
skypeople(飞飞)要问的内容意思是新建一个,倘若近按我上所述,此处应是关闭后,再新建加一名关闭代码?

machin 2001-09-06
  • 打赏
  • 举报
回复

如果我要在 主form 显示一张jpg图片,用image控件。

我该怎么做呢?怎么老是显示不出来呢??
skypeople 2001-09-05
  • 打赏
  • 举报
回复
jin_fei(金飞)的第一张贴子应该可以解决你的问题,,但是他的最后Child:=TForm(FormClass.NewInstance);
TForm(fm):=Child;
Child.Create(AOwner);
不知道在干什么。。希望jin_fei(金飞)能告之一下,,,
fangmins 2001-09-05
  • 打赏
  • 举报
回复
其实他的意思就是要:
if mdichildcount=1 then MDIChildren[0].Close;

//既然只能有一个活动,就没有必要判断多个了!!
kylincn 2001-09-05
  • 打赏
  • 举报
回复
我今天感冒有点晕,好像越看越不对劲,各位谅解!
kylincn 2001-09-05
  • 打赏
  • 举报
回复
不好意思,打错了!

应该是
procedure TMainForm.FileNew1Execute(Sender: TObject);
var
frmcnt :integer;
begin
if mdichildcount>0 then
for frmcnt:=1 to mdichildcount do
MDIChildren[frmcnt].Close
else
CreateMDIChild('你的子窗体的名称');

end;
Tense 2001-09-05
  • 打赏
  • 举报
回复
up
kylincn 2001-09-05
  • 打赏
  • 举报
回复
我认为StarRains(星雨)的方法有理,不过我也有点自己的看法
可以这么写
procedure TMainForm.FileNew1Execute(Sender: TObject);
var
frmcnt :integer;
begin
if mdichildcount>0 then do
begin
for frmcnt=1 to mdichildcount do
MDIChildren[frmcnt].Close;
CreateMDIChild('你的子窗体的名称');
end;
end;

其实不难吧!
jin_fei 2001-09-05
  • 打赏
  • 举报
回复
对不起我没有看清题目,刚才那个错了,在控纽中加入如下代码
var
i:integer;
begin
if mdiform.mdichildcount > 0 then begin
for i := 0 to mdiform.mdichildcount do begin
mdiform.child[i].close;
end;
end; //关闭已存在的窗口
mdichileform.show;
end;
这个代码还有一个问题,当已有的子窗口就是要打开的窗口,代码你应先判断一下是否有你要打开的窗口存在,方法就是我上一个中用的
jin_fei 2001-09-05
  • 打赏
  • 举报
回复
用我下面的函过程
procedure OpenMdiForm(FormClass: TFormClass; var fm; AOwner:TComponent);
var
i: integer;
Child:TForm;
begin
for i := 0 to Screen.FormCount -1 do
if (Screen.Forms[i].ClassType=FormClass) then
begin
Child:=Screen.Forms[i];
if Child.WindowState=wsMinimized then
ShowWindow(Child.handle,SW_SHOWNORMAL)
else
ShowWindow(Child.handle,SW_SHOWNA);
if (not Child.Visible) then Child.Visible:=True;
Child.BringToFront;
Child.Setfocus;
TForm(fm):=Child;
exit;
end;
Child:=TForm(FormClass.NewInstance);
TForm(fm):=Child;
Child.Create(AOwner);
end;

你要打开一个子窗口时openmdiform(mdiform,mdichildform,self)
加载更多回复(3)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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