2 helenxd Helenxd 于 2016.01.26 14:19 提问

delphi 中MDI程序设计 10C
 本人在编写MDI程序建立子窗体时,出现如图所示的错误,求教大神!

具体内容:建立三个窗体mianformj,childform1,childform2,在mainform上放两个按钮,buttto1,button2,分别点击这两个按钮,能够在mainform中打开两个子窗体。部分代码如下:
mainform中的代码:
procedure OpenChildForm(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;

procedure TMainForm.Button1Click(Sender: TObject);
begin
OpenChildForm(TChildForm1,ChildForm1, Self);
end;

procedure TMainForm.Button2Click(Sender: TObject);
begin
OpenChildForm(TChildForm2,ChildForm2, Self);
end;

childform1,childform2 中代码相同: Action:=caFree;
错误提示: project project1.exe rasied exception class EInvalidOperation with message 'cannot create form.No MDI forms are currently active.

2个回答

feng1790291543
feng1790291543   Ds   Rxr 2016.01.26 19:46

你使用raise 异常捕获啊,两个 ChildForm ,没有实例化,是随机值指针吧,先创建在传进去试试

lyhoo163
lyhoo163   Rxr 2016.02.13 08:55

一、子窗口要动态创建
二、调用子窗口的代码
if not Assigned(SetSaleFrm) then
begin
SetSaleFrm:=TSetSaleFrm.Create(Self);
SetSaleFrm.WindowState:=MID_WindowState;
end
else SetSaleFrm.BringToFront;

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
070_《Delphi7程序设计技巧与实例》
◆清华大学教师力作,包含作者多年编译器研究与程序设计教学经验 ◆深入Object Pascal语言核心,澄清许多容易让人迷惑的概念 ◆披露Delphi/Kylix实现的技术内幕,详细阐释深入编程的思考方法与实现策略 ◆全书131个实例,近70,000行源代码,读者可直接使用的类与子程序近百个
DELPHI中MDI子窗口的关闭 和打开
Delphi中MDI子窗口的关闭方式默认为缩小而不是关闭,所以当你单击子窗口右上角的关闭按钮时会发觉该子窗口只是最小化,而不是你预期的那样被关闭。解决办法是在子窗口的OnClose事件处理过程中加入如下代码,示例: procedure ChildForm.OnClose(Sender: TObject; var Action: TCloseAction); begin    Acti
子窗子显示在MDI主窗体panel控件之上
机房收费系统中,需要将子窗子显示在MDI主窗体panel容器控件之上。查了资料。大概网上有两种方法。一种是是可以将子窗体上的控件直接内嵌到panel控件之上,还有一种是子窗子显示在MDI主窗体panel控件之上。 通过这个需求的实现,感觉到知识学习是无穷尽,因为对于panel容器控件,自己也是第一次使用,所以这个知识对于自己而言是新的东西,面对这样无穷尽的新知识的学习,我要学会的站到一个高的位置上去抽象出这些学习这种新知识的方法,自己总结了一下方法: 1.学会去网上查询。 去网上查自己想要的东西,不
Delphi封装Mdi窗体到Dll并使用插件管理,tabControl制作多页面
源码下载地址 1.ShareMem的引用要放在各单元的第一位置,否则会报错 2.dll中mdi子窗体关闭时要,      Action:=caFree;     TestForm2:=nil; 3. 主窗体代码 unit MainUnit; interface uses ShareMem,Windows, Messages, Sys
在MDI窗体调用子窗体时怎样使不被MDI窗体上的图片挡住
最近大家都在忙着敲机房收费系统,我也一样。前几天发现了一个问题,在点击主窗体上的按钮调用子窗体时,子窗体不显示。开始时以为是我把子窗体的名字敲错了导致无法调用,后来在仔细核对下排除了这种可能。那么为什么和敲学生时一样的步骤现在却出现了这个问题呢?通过在网上查和问同学发现很多同学都遇到了这个问题,也有同学已经解决了。这里就在来说说如何解决,权当强调了吧。 首先出现这个问题是因为我们的MDI
Cannot creat form. No MDI forms are currently active.
我遇到的问题是,将一个工程中的窗体移到另一个工程中去,同时将这个窗体继承的原来的基类更改为新工程中的基类。但我把原来工程的基类窗体也移到新工程来了。所以导致新工程中有两个基类窗体,所以在编译运行时出现:Cannot creat form. No MDI forms are currently active. 所以我将新工程中创建的这个原来工程的基类窗体取消掉后,问题得倒解决。    No M
解决Delphi MDI 闪烁问题
解决Delphi MDI 闪烁问题
给你的MDI程序加上一个标签栏,方便地切换和关闭子窗体
效果如下图所示,应该说还不错吧,菜单简陋了一点,不过你可以根据自己的需要扩充。 因为能力有限,没能实现给当前的TabPage加一些修饰,不像专业软件那么漂亮,不过还能凑合用^_^ 做法如下: 首先创建一个MDI子窗口的基类 using System;using System.Drawing;using System.Collections;using System.C
Windows编程之MDI
MDI 创建 1 CilentWindow 1.1 CLIENTCREATESTRUCT typedefstruct tagCLIENTCREATESTRUCT {     HANDLE hWindowMenu;     UINT  idFirstChild; } CLIENTCREATESTRUCT, *LPCLIENTCREATESTRUCT; hWindowMenu  多文
判断MDI窗体的子窗体是否存在
//***************************************************************************//函 数名: CreateForm //返 回值: boolean //参 数: TForm //功 能: 判断MDI窗体的子窗体是否存在 //************************************************