Delphi中主窗体的formshow事件在程序自动创建窗体对象前就调用的错误。

 

这个,实际我也不知道这个标题该怎么写。因为用一句话描述错误有点困难。

下面用代码来说明吧。

最近做了一个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。因此,没有创建对象就调用的错误就发生了。

转载于:https://www.cnblogs.com/moonwind/p/4468947.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值