子窗体由主窗体中菜单动态生产,语句如下:
if frmkjlb=nil then
    begin
      frmkjlb:=Tfrmkjlb.Create(Application);
      frmkjlb.show;
    end;在子窗体中有个stringgrid控件,自写个过程控制
procedure csh_sg(); //定义初始化sg网格控件过程
     begin
       with frmkjlb.sg do
         begin
          colwidths[0]:=10;
          colwidths[1]:=30;
          colwidths[2]:=90;
          colwidths[3]:=30; 
         end;
     end;问题是只要在子窗体frmkjlb的formcreate事件中调用csh_sg,则程序挂起在with frmkjlb.sg do处,此时查看frmkjlb对象=nil;
如果不在子窗体frmkjlb的formcreate事件中调用csh_sg,而在其上某个按钮单击事件中调用则一切正常,完全没有问题,
现在我就想在子窗体的formcreate事件中调用csh_sg,如何解决这个问题? 

解决方案 »

  1.   

    你子窗体未创建,就调用子窗体里面的控件,当然会出错了!!
    不知道说的对否!
    你可以把过程procedure csh_sg();放到 frmkjlb.Onshow 中即可!!!
      

  2.   

    sg是在frmkjlb中是吧,with frmkjlb.sg do 改为: with sg do还是我说的那样,frmkjlb未创建完成不能这样写 frmkjlb.控件 会访问地址出错!!!
      

  3.   

    procedure csh_sg();
    放到public 中。
      

  4.   

    放到public 中
    编译通不过with frmkjlb.sg do 改为: with sg do 
    编译通不过,报告sg未定义把这个方法放到子窗体,并公开 然后主窗体调用
    这个方法可以