热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

无法创建MDIChild表单

如何解决《无法创建MDIChild表单》经验,为你挑选了1个好方法。

有一个主窗体(Form1),在执行时分别创建了MDIForm(Form2)和MDIChild(Form3)窗体。在我的测试中,MDIForm(Form2)的显示与预期的一样,但是当尝试显示MDIChild(Form3)时,出现以下错误:

无法创建表单。当前没有任何MDI表单处于活动状态

关于如何解决这个问题的一些想法?

program Project1;

uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2},
  Unit3 in 'Unit3.pas' {Form3};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.

形成:

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses
  Unit2, Unit3;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2 := TForm2.Create(Self);
  Form2.Show;
  Form3 := TForm3.Create(Form2);
  Form3.Show;
end;

end.

Remy Lebeau.. 5

该VCL(未在Win32 API)是硬编码,允许Application.MainForm设置为fsMDIForm托管fsMDIChild形式。您MainForm不是fsMDIForm父窗体,这就是您收到错误的原因。

技术上讲,可以使用辅助表单作为fsMDIForm父表单,但不是开箱即用的。它需要一些手动工作才能破解VCL的内部组件,以使其正常工作,即使如此,仍然存在漏洞和陷阱。请参见在CodeCentral上的单个应用程序提交中的“我的多个MDI父表单”(我十年来没有对其进行更新,因此对于现代VCL版本可能需要进行一些调整)。它引用的旧版Quality Central(不是Quality Portal!)票证可在archive.org上找到:#12006:以非MainForm形式托管MDI子表单。

话虽这么说,但MDI是一项过时的技术,微软很早以前就放弃了它,而现代Windows版本对MDI的支持很差,尤其是在使用Visual Styles时。您甚至不用担心现代软件中的MDI,还有其他/更好的UI设计选择。



1> Remy Lebeau..:

该VCL(未在Win32 API)是硬编码,允许Application.MainForm设置为fsMDIForm托管fsMDIChild形式。您MainForm不是fsMDIForm父窗体,这就是您收到错误的原因。

技术上讲,可以使用辅助表单作为fsMDIForm父表单,但不是开箱即用的。它需要一些手动工作才能破解VCL的内部组件,以使其正常工作,即使如此,仍然存在漏洞和陷阱。请参见在CodeCentral上的单个应用程序提交中的“我的多个MDI父表单”(我十年来没有对其进行更新,因此对于现代VCL版本可能需要进行一些调整)。它引用的旧版Quality Central(不是Quality Portal!)票证可在archive.org上找到:#12006:以非MainForm形式托管MDI子表单。

话虽这么说,但MDI是一项过时的技术,微软很早以前就放弃了它,而现代Windows版本对MDI的支持很差,尤其是在使用Visual Styles时。您甚至不用担心现代软件中的MDI,还有其他/更好的UI设计选择。


推荐阅读
  • 终端系统服务器部署一、安装IIS依次单击“开始”菜单—控制面板—添加和删除程序—添加和删除windows组件,出现窗口如下图a所示,将“应用程序服 ... [详细]
  • 猪猪猫.CNWINXPSP2电脑城装机12DVD[豪华版]
    直接下载地址http:bt.jujumao.cn点击下载种子下载信息[点击浏览该文件:2007-12-19猪猪猫.cn-winxpsp2电脑城装机12豪华版.torrent]| ... [详细]
  • 法国人家喻户晓的一首歌,很老的一首了。旋律轻盈,歌词温馨会把你带回到小时候的回忆中去。Ilrevientàmamémoire一切都回到我脑海中Dessouvenirsfamilie ... [详细]
  • 第一部分:TSqlTop有两种用法1,限制查询结果集返回的行数或总行数的百分比。当将TOP与ORDERBY子句结合使用时,结果集限制为前N个已排序行;否则,以未定义的顺序返回前N个 ... [详细]
  • windows10锁屏用户被锁定无法登陆怎么办?
    大家都知道如果太长时间离开电脑它就会自动锁屏,如果没有设置密码的话,回来之后直接登录就好了。但是如果设置了密码又锁屏了太长时间就有可能出现用户被锁定无法登录的问题。那么当大家遇到这 ... [详细]
  • 蓝屏代码0x000000d1什么原因,怎样解决?
    通常是由有问题的驱动程序引起的0x000000d1蓝屏原因。同时,有缺陷的内存、损坏的虚拟内存文件、某些软件(比如多媒体软件、杀毒软件、备份软件、DVD播放 ... [详细]
  • ExistsQueryeditExistsQueryeditExistsQueryeditExistsQueryeditReturnsdocumentsthathaveatleas ... [详细]
  • 调用:视图调用:1@Html.DropDownListFor(tt.HrEmpGuid,ViewData[Emp] as SelectList, new {@class   ... [详细]
  • 大家好!我在nginx.conf中这样写: ... [详细]
  • 1,Windows服务应用程序是一种需要长期运行的应用程序,它对于服务器环境特别适合。它没有用户界面,并且也不会产生任何可视输出。任何用户 ... [详细]
  • 缓冲区溢出实例(一)–Windows
    一、基本概念缓冲区溢出:当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被填满从而覆盖了相邻内存区域的数据。可以修改内存数据,造成进程劫持,执行恶意代码,获 ... [详细]
  • socket8 [命名管道]
    ::命名管道不但能实现同一台机器上两个进程通信,还能在网络中不同机器上的两个进程之间的通信机制。与邮槽不同,命名管道是采用基于连接并且可靠的传输方式,所以命名管道传输数据只能一对一 ... [详细]
  • docker整体了解
    Docker是一个基于LXC技术构建的容器引擎,基于Go语言开发,遵循Apache2.0协议开源Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移 ... [详细]
  • python有什么应用领域[python常见问题]
    python语言可以用来开发游戏,用于大数据的挖掘和处理,开发web,应用在系统运维,云计算,金融理财分析,人工智能等涉及 ... [详细]
  • 搜索栏算是UI中很简单的一个操作了,拖一个搜索栏上来。   搜索栏中比较重要的属性是占位符,也就是图中右侧的Placeholder,比如输入“请输入关键字”,显示如下: ... [详细]
author-avatar
郭珊孝文旺
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有