frame调用form报错,求解

glad369 2011-06-17 05:52:38
主程序中有一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;
//编译通过,但运行中报错
...全文
110 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
glad369 2011-06-19
  • 打赏
  • 举报
回复
尝试着按照下面写法也通过了,但偶尔有报错.至少已经找到方向了,谢谢tgbd,谢谢各位关注,马上结贴
form1.page1.ActivePage.Controls[0].FindComponent('ADOQUERY') AS TADOQUERY
tgbd 2011-06-19
  • 打赏
  • 举报
回复
假设那个框架类名: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).属性、方法都可以被访问了.
tcds31 2011-06-18
  • 打赏
  • 举报
回复
在form1的声明部分的USES 引用 fram1,在 fram1的实现部分的USES 引用 form1
xinghun61 2011-06-18
  • 打赏
  • 举报
回复
估计是form1的单元中没有引用frame1的单元造成,在uses中加上即可。
glad369 2011-06-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tgbd 的回复:]
假设主窗体form1,unit1 ;弹出窗体form2,unit2 ;frame1 是动态融合在主窗体page1上,且在当前激活的TabSheet上。

那么在form2上访问form1上的page1.activepage,
如果当前TabSheet只有一个控件,则TFrame(form1.page1.ActivePage.Controls[0])就是要找的那个框架;
如果当前TabShe……
[/Quote]

按照上述代码可以找到框架,可是仍不能访问指定的控件属性,再麻烦你一下,代码再详细些好吗
tgbd 2011-06-18
  • 打赏
  • 举报
回复
假设主窗体form1,unit1 ;弹出窗体form2,unit2 ;frame1 是动态融合在主窗体page1上,且在当前激活的TabSheet上。

那么在form2上访问form1上的page1.activepage,
如果当前TabSheet只有一个控件,则TFrame(form1.page1.ActivePage.Controls[0])就是要找的那个框架;
如果当前TabSheet上有一个以上,则用遍历一下,form1.page1.activepage.controlCount-1就要以定位找到。

基本就是这个思路,代码也给得差不多了。试一下
glad369 2011-06-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tgbd 的回复:]
楼主的Tframe是融合的pagecontrol上的么?

融合一般有两种,一种是调用普通的Tframe; 另一种是调用bpl 或Dll中的Tframe;

对于这两种融合,能够被弹出的窗体所“认识”,其识别的方式是不一样的。
[/Quote]

1 是的
2 第一种
3 请举例说明具体的识别方式

分不够可以加,前提是告诉我怎么加.总看别人这么写,还没有实战过
tgbd 2011-06-18
  • 打赏
  • 举报
回复
楼主的Tframe是融合的pagecontrol上的么?

融合一般有两种,一种是调用普通的Tframe; 另一种是调用bpl 或Dll中的Tframe;

对于这两种融合,能够被弹出的窗体所“认识”,其识别的方式是不一样的。
glad369 2011-06-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 oraclers 的回复:]
你這個ADOQuery1應是在那個窗口才對。TFrame也是需放到窗口的。
所以:
edit1.text:=Fromxxx.AdoQuery1.Fields[0].Asstring;
[/Quote]

谢谢,编译时报错,与我写得第一种错误相同
Oraclers 2011-06-17
  • 打赏
  • 举报
回复
你這個ADOQuery1應是在那個窗口才對。TFrame也是需放到窗口的。
所以:
edit1.text:=Fromxxx.AdoQuery1.Fields[0].Asstring;

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧