动态窗口创建问题 CreateForm与new的区别

chiengod 2004-10-08 04:05:08
为什么
我用
Application->CreateForm(__classid(TfrmSelectTree), &frmSelectTree);
创建新窗体ok.

用以下
TfrmSelectTree *frmSelectTree=new TfrmSelectTree(NULL);
frmSelectTree->ShowModal();
delete frmSelectTree;
出现'control'has no parent window错误呢?
请高手指点!
...全文
328 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
virm 2004-10-29
  • 打赏
  • 举报
回复
检查你的子窗体的formcreate事件,下断点看看
futulove 2004-10-19
  • 打赏
  • 举报
回复
用NEW时楼主没有给父类,把NULL换成this就可以了
virm 2004-10-19
  • 打赏
  • 举报
回复
实际上createForm 和 new 应该没有差别,可能你在窗口的ondestory中没有delete自身new的资源
反正我尝试了一下,没有错误信息
Metawolf 2004-10-19
  • 打赏
  • 举报
回复
我做了个测试
代码如下 没有问题
TForm2* form = new TForm2(NULL);
TRadioGroup **RadioGroup=new TRadioGroup *[100];
RadioGroup = new TRadioGroup*[100];
RadioGroup[1]=new TRadioGroup(this);
RadioGroup[1]->Parent=form;
form->ShowModal();
delete form;
而且说明几个问题
form 里面的是this还是NULL的区别在于取得是否在子form里用owner的属性
楼主说的那个错误是给一个控件的parent 等于为一个没有Parent的控件报的错
我觉得要想找到原因要不你仔细查查,要不你多贴写代码
ssyqcwj 2004-10-18
  • 打赏
  • 举报
回复
一般使用这样的方法:
Application->CreateForm(__classid(TfrmSelectTree), &frmSelectTree);
创建的窗体是永久窗体!
要想动态创建,首先把你要创建的窗体从菜单Project->Options->Forms中的Auto-Create form移动到Available forms中,然后你再用new运算符创建这个窗体!
chiengod 2004-10-18
  • 打赏
  • 举报
回复
谁能说说CreateForm与new的区别和联系!
setdefault 2004-10-18
  • 打赏
  • 举报
回复
CreateForm与new创建出的窗体没有什么差别。错误在你的代码里。
你到底有没有在delete frmSelectTree;之前,释放RadioGroup,RadioGroup的Parent变成NULL当然现'control'has no parent window
chiengod 2004-10-18
  • 打赏
  • 举报
回复
哪位高手,能不能把问题说清楚!
chiengod 2004-10-09
  • 打赏
  • 举报
回复
出现'control'has no parent window错误

部分代码如下:
TRadioGroup **RadioGroup=new TRadioGroup *[100];
RadioGroup = new TRadioGroup*[count];
RadioGroup[iii]=new TRadioGroup(this);
RadioGroup[iii]->Parent=frmSelectTree;
高手帮我看看
Maconel 2004-10-09
  • 打赏
  • 举报
回复
要是还要往窗体是放东西的话,用new方便些吧,因为可以容易的得到这个窗体的指针。
那句new窗体的,看起来语法没什么问题,可能是那个窗体里的代码有问题。
你的那个错误是出现在哪句呢。
chiengod 2004-10-09
  • 打赏
  • 举报
回复
试了TfrmSelectTree *frmSelectTree=new TfrmSelectTree(Application);没什么用。
我是想动态创建窗体,然后动态的在窗体上建几个radiogroup
Lewolf 2004-10-09
  • 打赏
  • 举报
回复
这两个本身是区别不很大的,但是还是有一些区别的,这个错误估计是你的Form写的有问题,不如使用
TfrmSelectTree *frmSelectTree=new TfrmSelectTree(Application);
试试,也许就没有这个错误了。

要看看你是不是在Form中用到了这个Form的Owner!
chiengod 2004-10-09
  • 打赏
  • 举报
回复
如题
setdefault 2004-10-09
  • 打赏
  • 举报
回复
在frmSelectTree的OnDestroy中delete RadioGroup;
错误是因为RadioGroup的没有了Parent
chiengod 2004-10-09
  • 打赏
  • 举报
回复
好象:NULL、this、Application多是一个样!
futulove 2004-10-09
  • 打赏
  • 举报
回复
no parent
没有继承类把NULL改成this就好了
yingying0808 2004-10-09
  • 打赏
  • 举报
回复
TRadioGroup **RadioGroup=new TRadioGroup *[100];
RadioGroup = new TRadioGroup*[count];
new 两次了
随着通信电子技术的迅速发展,信息技术给家居行业产生了深远的影响,家居环境的智能化监控已经成为智能家居的一个重要的发展方向。人们逐渐对自己的生活提出一种更高的要求,他们需要一种智能化、可交互,并且融合现代创新科技的产品来改善他们的生活环境,使他们生活更加安全、舒适、便捷、智能。本文根据智能家居的发展背景和研究现状,并且从实用性和可行性角度出发,研究设计了一种基于STM32单片机的智能家居系统。该系统由一个多功能综合的技术系统组成,各个多功能子系统间具有协同配合能力。基于STM32单片机实现的功能子系统包括:智能温度检测,智能湿度检测,智能烟雾/火灾检测智能检测,无线传输,人机交互机构,风扇调节,报警模块。 整个系统分为前端51单片机采集板和后端STM32单片机接收板。 采集板使用DHT11温湿度传感器、MQ烟雾传感器完成室内家居环境的采集。然后通过nRFL24L01将采集到的数据发送给后端。接收板使用LCD1602完成数据显示、使用蜂鸣器模块报警,使用风扇驱动模块调节室内家居环境。本文完成了智能家居控制系统前端、后端软硬件的设计,使用Altium designer绘制了电路原理图,使用Keil C完成了51单片机和STM32单片机的编程与调试。 最后,对本文设计的基于STM32的智能家居控制系统进行部署调试。试验结果表明,该系统可成功应用在智能家居环境检测调节和火灾安全防护的领域,可提高家居生活智能化水平。

13,872

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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