动态窗口创建问题 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错误呢?
请高手指点!
...全文
299 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 两次了

13,825

社区成员

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

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