高人请进来

linweihua77 2013-05-28 08:55:10
本人在调试一个系统时遇到一个奇怪的问题,编译通过,但是在运行时出错,经过断点跟踪,发现Form中的constructor create 和Form本身的Create执行顺序乱了,如下代码段:

constructor TBaseFormDataNavChild.Create(AOwner: TComponent;
AMoudleName: string = '');
begin
1 inherited Create(AOwner, AMoudleName);
2 with lc_SalaryMainForm.dxBarListWindows do
3 begin
4 Items.AddObject(Self.Caption, Self);
5 end;
6 da := TDataAccess.Create(Self);
end;

procedure TBaseFormDataNavChild.FormCreate(Sender: TObject);
begin
7 inherited;
8 CreatePopMenu;
end;

在我本机调试时的执行顺序是:1,7,8,2,3,4,5,6 ,为什么会是这样?请高人指点,不胜感谢!
...全文
165 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
linweihua77 2013-05-28
  • 打赏
  • 举报
回复
引用 8 楼 xhz8000 的回复:
constructor TBaseFormDataNavChild.Create 请楼主你这个构造函数是不是 在你的的窗口定义的, inherited 然后不就是 TBaseFormDataNavChild.FormCreate 不过发现你的代码1 inherited Create(AOwner, AMoudleName); 是这样写的,不知道在你的子类里面的第一个父类是否存在 Create(AOwner, AMoudleName); 这样的构造函数!
对,在父类的FormCreate中,有这样的代码:inherited Create(AOwner, AMoudleName);
xhz8000 2013-05-28
  • 打赏
  • 举报
回复
昏! 终于知道你说啥了! 执行本身的FormCreate, 你还是自己执行看看把! 怎么不是执行本身的FormCreate。
xhz8000 2013-05-28
  • 打赏
  • 举报
回复
constructor TBaseFormDataNavChild.Create 请楼主你这个构造函数是不是 在你的的窗口定义的, inherited 然后不就是 TBaseFormDataNavChild.FormCreate 不过发现你的代码1 inherited Create(AOwner, AMoudleName); 是这样写的,不知道在你的子类里面的第一个父类是否存在 Create(AOwner, AMoudleName); 这样的构造函数!
linweihua77 2013-05-28
  • 打赏
  • 举报
回复
引用 1 楼 xhz8000 的回复:
这个执行顺序是对的! inherited Create(AOwner, AMoudleName); 就是调用父类的 TBaseFormDataNavChild.FormCreate(Sender: TObject); 在这里inherited;执行父类的 Create; 再执行 8 CreatePopMenu; 然后就是你的2,3,4,5,6
你的理解不对,inherited Create(AOwner, AMoudleName)是执行父类的FormCreate,而不是执行本身的FormCreate,执行完父类的FormCreate,应该接着往下执行,然后再执行本身的FormCreate
linweihua77 2013-05-28
  • 打赏
  • 举报
回复
执行顺序肯定是错误的! 这个系统用了好多年了,只是最近要修改,在我本机编译后才出现错误,然后我到同事的电脑去调试,编译后运行正常!
linweihua77 2013-05-28
  • 打赏
  • 举报
回复
这个系统用了好多年了,只是最近要修改,在我本机编译后才出现错误,然后我到同事的电脑去调试,发现执行顺序是:1,2,3,4,5,6,7,8 ,我认为正确的顺序就是:1,2,3,4,5,6,7,8
火龙岛主 2013-05-28
  • 打赏
  • 举报
回复
执行顺序是OK的。 楼主自己有点乱 1.constructor Create一般是写类的时候才需要继承写的,最好不要调用元件,因为有可能元件还没创建。 2. 你可以在FormCreate中调用元件的属性,为其赋值,因为这个时候所有的元件均已创建完成。 楼主自己跟踪一下FormCreate的执行时机就知道了。
bdmh 2013-05-28
  • 打赏
  • 举报
回复
inherited Create(AOwner, AMoudleName);这个会调用父类的create
酣酣 2013-05-28
  • 打赏
  • 举报
回复
楼上正解! 构造函数和OnCreate同时使用有点儿混乱! 其实没那个必要! 代码集中放在其中任何一个都可以实现你想要的功能!
xhz8000 2013-05-28
  • 打赏
  • 举报
回复
这个执行顺序是对的! inherited Create(AOwner, AMoudleName); 就是调用父类的 TBaseFormDataNavChild.FormCreate(Sender: TObject); 在这里inherited;执行父类的 Create; 再执行 8 CreatePopMenu; 然后就是你的2,3,4,5,6
linweihua77 2013-05-28
  • 打赏
  • 举报
回复
引用 11 楼 ysai 的回复:
窗体有个属性:OldCreateOrder,你看是不是和这个有关
兄弟,你真行,你牛!高手就是不同,一言点中要害。果真是这个属性的原因,但是为什么相同的源代码拷贝到我电脑打开就是TRUE,在别人的电脑打开就是FALSE呢?
ysai 2013-05-28
  • 打赏
  • 举报
回复
窗体有个属性:OldCreateOrder,你看是不是和这个有关
Spring3: org.springframework.aop-3.1.0.RELEASE.jar org.springframework.asm-3.1.0.RELEASE.jar org.springframework.aspects-3.1.0.RELEASE.jar org.springframework.beans-3.1.0.RELEASE.jar org.springframework.context-3.1.0.RELEASE.jar org.springframework.context.support-3.1.0.RELEASE.jar org.springframework.core-3.1.0.RELEASE.jar org.springframework.expression-3.1.0.RELEASE.jar org.springframework.instrument-3.1.0.RELEASE.jar org.springframework.instrument.tomcat-3.1.0.RELEASE.jar org.springframework.jdbc-3.1.0.RELEASE.jar org.springframework.jms-3.1.0.RELEASE.jar org.springframework.orm-3.1.0.RELEASE.jar org.springframework.oxm-3.1.0.RELEASE.jar org.springframework.spring-library-3.1.0.RELEASE.libd org.springframework.test-3.1.0.RELEASE.jar org.springframework.transaction-3.1.0.RELEASE.jar org.springframework.web-3.1.0.RELEASE.jar org.springframework.web.portlet-3.1.0.RELEASE.jar org.springframework.web.servlet-3.1.0.RELEASE.jar org.springframework.web.struts-3.1.0.RELEASE.jar 由于我也不搞不清楚,Spring这么多jar包每个的作用,有些有相互依赖,没办法,只能全部一起导进来。如果有高人指点一下他们的作用,不胜感激! Spring3.0.1 jar下载地址:http://www.springsource.org/download Mybatis: mybatis-3.0.6.jar--mybatis核心包(http://code.google.com/p/mybatis/downloads/list) mybatis-spring-1.0.2.jar--同Spring整合所需jar(http://code.google.com/p/mybatis/downloads/list) Spring AOP 依赖jar: aopalliance-1.0.jar asm-3.3.1.jar aspectj-1.6.10.jar aspectjweaver-1.6.9.jar cglib-2.2.2.jar Jstl标签依赖jar: jstl-1.2.jar MySql数据库驱动jar: mysql-connector-java-5.0.4-bin.jar 其他jar: commons-logging-1.0.4.jar log4j-1.2.9.jar portlet-api-2.0.jar
更新历史3.0: 环境:jdk1.5 tomcat5.5.数据库用oracle.如果不用oracle的话.可能菜单表的查询出不来.我的菜单表的查询允许选择上级菜单查询该菜单所对应的所有下级菜单.所以用了递归查询. criteria.add(Restrictions.sqlRestriction("MENUITEM_ID in(select a.MENUITEM_ID from Wuxin_MENUITEM a connect by prior a.MENUITEM_ID = a.PARENT_ID"+ " start with a.MENUITEM_ID = '"+parentId+"')" )); mysql和sqlserver不知道有没有start with这个sql. jar包:项目中除了使用了struts2,hibernate3.0和spring1.8以外(用spring2.0的包也可以.不能低于1.8的包.)还是用了junit,ajax,第三方的table组件.等等.所以需要下载相对应的包. 为了上传jar.我专门申请了一个网盘.所有下载地址在下载下来的这个rar包里面都有详细的介绍和说明. 说一下这个rar里面带的东西.除了源码外带了几篇文档.分别是关于项目中所使用的dwr的配置.table组件的配置说明文档.junit单元测试说明文档.还有我写这个例子时应该注意的一些东西.外加一些关于struts2和hibernate的技巧心得整理. 说一下这次3.0更新的内容.可能大家在我的博客里面已经看到了相关的日志.我懒.下面就把那个日志抽出来当说明了啊.有兴趣的就下载下来瞅瞅.偶也是菜鸟的.写的不好不要骂街啊..在此感谢各位网友的期待和支持. 这几天我终于闲下来了.也有时间开始写struts2的第三个框架版本了.主要是针对写了第二个版本之后的一些问题做一些回答才做得第三个版本.中间加一些小技巧之类的.不过我觉得还是值得一些关注的朋友期待的. 如果没有意外.这个版本应该是一个定型的版本了.在这段期间.有很多朋友问的问题大部分其实都已经不是struts2的范围了.有些都是hibernate和spring的.介于前两个版本都是单表.对hibernate的引用还是比较少的.这次索性写个多对多关系好了.打算写个权限系统好了.我就使用权限5张表.用户表,权限表.角色表.用户角色表和角色菜单表.(麻雀虽小...五脏俱全了啊...)当然这个写起来就费劲一些了.... 为了能够更好的使用各方面的技术.所以这次打算弄个大锅(弄个大锅也很累的.不过大家可能到时候配这个框架也就比较麻烦点了...不过我觉得还是能多学一下总是好的.) 说一下大锅的内容吧.自己写了个分页组件.(不是太好看...).现在ajax都已经不是什么新鲜东东了..我在里面配的是dwr..(这个简单些..其他的我看着晕...).没有自己写页面输出.我使用的table组件是:eXtremeComponents.自我感觉这个组件比较好.所以把这个组件配入进来了.随着这篇文章的发布.我会陆续在博客中更新相关针对与当前项目模块的关于struts2的一些知识点.当作大家一起进步了... 也希望各位高人多多指点啊... 这个版本起名为Struts2Test3.0.以后的日志相关内容就为关于Struts2Test3.0例子的相关内容.

5,928

社区成员

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

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