c++ builder 窗口间传递参数的问题

coriocarcsdn 2017-04-02 11:09:44
我是初学者, 遇到一个匪夷所思的问题, 就是有时候两个窗口间无法传递参数
做法是 两个form中设定公有变量,在new 新窗口的时候,将Form的公有变量赋值给新窗口的公有变量。

TForm2 * Point= new TForm2(this);
Point->a(Form2的一个公有变量)= a(Form1的一个公有变量, 两个窗口的公有变量同名);
Point->ShowModal();
delete Point;

有时候顺利传递数值, 有时候却无法传递。

最后发现问题非常滑稽!!! 每当无法传递数据的时候 我把 Point->a= a ;这一句中加一个空格, 就可以正常传递数据, 甚至是
加一个空格,然后在删除也可以正常传递!!


难道那一句有时候编译器会漏掉吗?
...全文
708 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooolinux 2017-05-05
  • 打赏
  • 举报
回复
引用 6 楼 coriocarcsdn 的回复:
[quote=引用 5 楼 u010165006 的回复:] Owner 为 Application ,就是程序结束时,对象(new的子窗体)随着Application的析构而结束; Owner 为 this(这里为Form1),就是随着主窗体Form1的析构而结束; 如果Owner 为 NULL,则是不使用 Owner 机制,需要自行delete 。 参考: http://blog.163.com/tab_98/blog/static/11924097201510164821412/
ou 这样啊!!! 那我new窗口的时候,用的都是this, showmodal 后,都自己手动delete,这样会有影响吗[/quote] 比如TForm2 * Form2= new TForm2(this); Owner是this(比如为Form1),那么Form1析构(销毁)的时候,会首先销毁它所拥有的(包括Form2窗体),如果以后再来delete Form2; 就造成了二次删除,程序崩溃。如果delete Form2顺序在前,Form1析构(销毁)在后,那没有影响,不过程序复杂了很难保证析构的顺序。
coriocarcsdn 2017-05-05
  • 打赏
  • 举报
回复
引用 5 楼 u010165006 的回复:
Owner 为 Application ,就是程序结束时,对象(new的子窗体)随着Application的析构而结束; Owner 为 this(这里为Form1),就是随着主窗体Form1的析构而结束; 如果Owner 为 NULL,则是不使用 Owner 机制,需要自行delete 。 参考: http://blog.163.com/tab_98/blog/static/11924097201510164821412/
ou 这样啊!!! 那我new窗口的时候,用的都是this, showmodal 后,都自己手动delete,这样会有影响吗
ooolinux 2017-05-05
  • 打赏
  • 举报
回复
Owner 为 Application ,就是程序结束时,对象(new的子窗体)随着Application的析构而结束; Owner 为 this(这里为Form1),就是随着主窗体Form1的析构而结束; 如果Owner 为 NULL,则是不使用 Owner 机制,需要自行delete 。 参考: http://blog.163.com/tab_98/blog/static/11924097201510164821412/
coriocarcsdn 2017-05-05
  • 打赏
  • 举报
回复
引用 3 楼 u010165006 的回复:
TForm2 * Point= new TForm2(NULL); //手动delete的窗体或控件,new的时候Owner参数用NULL Point->a(Form2的一个公有变量)= a(Form1的一个公有变量, 两个窗口的公有变量同名); ShowMessage(IntToStr(a)+" , "+IntToStr(Point->a)); // 赋值以后查看两个变量的值是否一样 Point->ShowModal(); delete Point; 也可以在窗口标题栏输出变量的值,例如: this->Caption="i="+IntToStr(i)+", f="+FloatToStr(f);
想问下大神, 这个NULL和this有什么不同吗
ooolinux 2017-04-04
  • 打赏
  • 举报
回复
TForm2 * Point= new TForm2(NULL); //手动delete的窗体或控件,new的时候Owner参数用NULL Point->a(Form2的一个公有变量)= a(Form1的一个公有变量, 两个窗口的公有变量同名); ShowMessage(IntToStr(a)+" , "+IntToStr(Point->a)); // 赋值以后查看两个变量的值是否一样 Point->ShowModal(); delete Point; 也可以在窗口标题栏输出变量的值,例如: this->Caption="i="+IntToStr(i)+", f="+FloatToStr(f);
ooolinux 2017-04-03
  • 打赏
  • 举报
回复
不懂,试试: Point->a=this->a;
coriocarcsdn 2017-04-03
  • 打赏
  • 举报
回复
引用 1 楼 u010165006 的回复:
不懂,试试: Point->a=this->a;
实验了, 一样啊,, 也是有时候能传递,有时候不能传递

604

社区成员

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

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