主程序中有一pagecontrol,不同功能动态创建相关frame.
某frame需要调用另一窗口form1,form1需读取frame中的信息,并在关闭前将结果返回frame.form1中书写如下语句时报错
 1  edit1.text:=frame1.adoquery1.fields[0].asstring;
    //编译时报错,找不到frame1 2  edit1.text:=(FindComponent('frame1') as tframe1).adoquery1.fields[0].asstring;
    //编译通过,但运行中报错

解决方案 »

  1.   

    你這個ADOQuery1應是在那個窗口才對。TFrame也是需放到窗口的。
    所以:
    edit1.text:=Fromxxx.AdoQuery1.Fields[0].Asstring;
      

  2.   

    估计是form1的单元中没有引用frame1的单元造成,在uses中加上即可。
      

  3.   

    在form1的声明部分的USES 引用 fram1,在 fram1的实现部分的USES 引用 form1
      

  4.   

    楼主的Tframe是融合的pagecontrol上的么?融合一般有两种,一种是调用普通的Tframe; 另一种是调用bpl 或Dll中的Tframe;对于这两种融合,能够被弹出的窗体所“认识”,其识别的方式是不一样的。
      

  5.   

    假设主窗体form1,unit1   ;弹出窗体form2,unit2  ;frame1 是动态融合在主窗体page1上,且在当前激活的TabSheet上。那么在form2上访问form1上的page1.activepage,
    如果当前TabSheet只有一个控件,则TFrame(form1.page1.ActivePage.Controls[0])就是要找的那个框架;
    如果当前TabSheet上有一个以上,则用遍历一下,form1.page1.activepage.controlCount-1就要以定位找到。基本就是这个思路,代码也给得差不多了。试一下
      

  6.   

    假设那个框架类名:TFrame_unit(单元文件名:Frame_unit.pas);//记得要 uses Frame_unit;变量         aFrame:TFrame;  aFrame:=TFrame_unit.create(self);  aFrame:=TFrame(form1.page1.ActivePage.Controls[0]);则:TFrame_unit(aFrame).属性、方法都可以被访问了.
      

  7.   

    尝试着按照下面写法也通过了,但偶尔有报错.至少已经找到方向了,谢谢tgbd,谢谢各位关注,马上结贴
    form1.page1.ActivePage.Controls[0].FindComponent('ADOQUERY') AS TADOQUERY