各位,我设计了3个单元文件,分别是FrmMain(主窗口)、FrmOpeInf和DataModule。
Form1上放置了一个菜单,点击菜单,弹出Form2(用来显示操作员列表以及增删操作员)。DataModule与Form2有联系。
此时dpr文件里包含三行以下所示代码:
   .........
  Application.CreateForm(TFrmMain, FrmMain);
  Application.CreateForm(TDataModule1, DataModule1);
  Application.CreateForm(TFrmOpeInf, FrmOpeInf);
   .........
通过project->option->forms,我将FrmOpeInf窗口放到Available Forms框中,将FrmMain和DataModule窗口放到Auto-create Forms框中(dpr文件中三行上述代码就只有前两行了)。按F9运行程序,正常显示FrmMain窗口。但是点击菜单(准备弹出FrmOpenInf窗口),系统就出现警告:
“...Access violation at address 0048EE0F in module'USRNET.exe', read of address 00000000...”把FrmOpeInf重新放到Auto-create Forms框中,则可以正常弹出FrmOpeInf窗口。为什么会这样?请指教。谢谢!

解决方案 »

  1.   

    既然不自动创建了,就需要你来创建啊;把
     Application.CreateForm(TFrmOpeInf, FrmOpeInf);
    加到你的彩旦事件里,就可以了;
      

  2.   

    如果你在dpr中删掉了某个form的create,那么你就应该在使用这个form之前,自己手工create这个form。
      

  3.   

    但是点击菜单(准备弹出FrmOpenInf窗口),系统就出现警告:
    “...Access violation at address 0048EE0F in module'USRNET.exe', read of address 00000000...”
    ////因为窗体没有创建,当然不能访问啊,还没分配内存呢;
      

  4.   

    如果你不想使用Application.CreateForm(TFrmOpeInf, FrmOpeInf);那么在点击菜单(准备弹出FrmOpenInf窗口)时应该自己创建该对象并实例化
      

  5.   

    我K,这么多高手,谢谢。我将Application.CreateForm()放到菜单的click过程中就搞定了。不过,木鱼大侠所说的实例化,是什么意思,请指教。谢谢。
      

  6.   

    很简单:
      
      Project->Options->Forms页面
      把Auto-create Forms里表里的FORM拉到右边 DPR里就自动减少了自动创建的代码CreateForm不过当你使用这些FORM时候需要自己动态创建