在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
这个,实际我也不知道这个标题该怎么写。因为用一句话描述错误有点困难。 下面用代码来说明吧。 最近做了一个delphi的程序,按照我的习惯一般是先创建一个窗体作为主窗体,其他的窗体都在这个基础上显示。另外,由于使用了数据库,所以添加了一个TDataModule控件,便于一些不能防止控件的单元进行数据库操作。把其他所有的窗体都设置为非自动创建。然后通过application.createform方法进行动态创建和调用。 好了,问题出现了。 在工程文件中有如下代码: Application.CreateForm(TfrmMain, frmMain); Application.CreateForm(TDataM, DataM); Application.Run;
在frmMain中有FormShow方法,其中有一些初始化变量的函数和加载皮肤的代码。特别的是在初始化变量的函数中有一个使用 DataM.qry的语句。按理说在frmMain的FormShow方法中调用DataM对象是没有问题的。因为在上面的代码中已经创建了相应的对象。可是我在调试的时候不断的报错,提示就是无法找到DataM对象。真是太蹊跷了。 没办法,我只好把创建DataM的语句提到创建frmMain前面。程序倒是能够运行了,但是这个很不合理啊。
同步不懈的努力,并且和之前备份的程序进行比较终于发现了错误所在。原来,Delphi显示主界面是通过 Application.Run来Show主窗体,而我在调试程序的时候不小心点击鼠标的时候把主窗体的Visible属性由正确的“false”改成了“true”。所以,一点程序执行了Application.CreateForm(TfrmMain, frmMain)的时候就要去Show这个窗口了,因为True么。没有创建DataM就Show,而Show调用DataM。因此,没有创建对象就调用的错误就发生了。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论