问题描述:
以前我弹出一个窗体是
if not assigned(frm) then
...
frm.Show
这种方式弹出窗体frm,我另一个窗体frmB里面用到了frm中的qyHed:TADOQuery,这时在
frmB里我只需这样写即可:frm.qyHed...
现在我用的是GetClassName的方式弹出的frm窗体,这时frmB中的代码:
frm.qyHed...就会报地址错误了,有无解决方法???
还望高手们指教啊...

解决方案 »

  1.   

    根据ClassName以及窗体标题等获取frm窗体的句柄handle,然后用handle.qyHed来表示
      

  2.   

    不管怎样,都会获得frm的指向,把他转型为TFrm即可
      

  3.   

    干脆在frm创建时把qyHed保存到全局变量里。
      

  4.   

    接上,获取frm的handle后
    TForm(FindControl(handle)),这个就是frm窗体
      

  5.   

    一票否决啦,因为大部分的窗体都有qyHed的,如果同时打开多个窗体不就有问题了?呵呵。
      

  6.   

    如果是这样你就必须findComponent方法,找到qyhed,然后再操作。
    1.首先,GetClassName是rtti的内容,所以你就必须所有的都得使用find的类似方法。
    2.解决方法2:你可以声明一个抽象的qyhd,其他类继承,那么也能达到楼主的要求。
    也不知道说明白没有?
      

  7.   

    转型以后并没有qyHed属性啊,只有窗体类自身的一些属性...
      

  8.   


    GetClassName的方式写出来,估计你的不是API那个函数,写来出先吧
      

  9.   

    var
      ShowFM:TForm;
    begin
      ShowFM:=GetClassName('TTempFM');
      ShowFM.ShowModal;
    end;
    这样弹出的窗体。
      

  10.   

    在frm的Create中加上  frm:=self
      

  11.   

    哦,忘记了GetClassName自己从网上找来的函数,那12楼的能说下你指的API这个函数吗?