关于D5的Frame的使用方法一问...(200分)

  • 主题发起人 主题发起人 cAkk
  • 开始时间 开始时间
C

cAkk

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个frame,上面有edit1,edit2,button1,button2,
然后我把这个frame放在我的一个form里面,并且把frame名字
改为fraCode,把2个edit的名字分别改为txtCode,txtName,
我已经明明在Object Inspector里面看到名字的确修改了,
但是当我在代码里面访问edit的时候,却只能用
fracode.edit1, fracode.edit2 这种名字,
而不能用我修改后的
fracode.txtcode, fracode.txtname 的名字,

为什么?????????????
 
我好象记得可以直接访问FRAME里的控件,即可以直接访问TXTCODE或TXTNAME,为什
么要加上前缀,不太明白???????
 
不行的,必须加上frame的前缀
 
可惜D4没有Frame……

cAkk,看看它在代码里的声明是什么名字?
 
form的代码里面只有frame的声明,是fracode,这是对的.
而且用fracode访问也没问题,就是里面的控件没法访问,只能用原始的frame
里面的名字访问.

会不会这就是frame的限制? 没有办法的?
 
我没有D5,不过估计不是这么回事,Borland不会有意搞这个麻烦吧?
 
不清楚,我回去试试。
 
txtname.Text:=txtcode.Text;

通过了
 
右键点激frame
存成模板控件
使用时将其加入到form中,修改name
总之什么都可以做了
可以给分了
 
确实存在cAkk所说的问题;
DelPhi引入Frame的初衷就是完整的封装代码,在
主Form不应再改Name.
 
看看这个:
...At the same time, you are free to modify any embedded frame
without affecting the original frame or other embedded descendants
of it.The only limitation on modifying embedded frames is that
you cannot add components to them.
就是说你可以修改嵌套在Form中的 frame,但是不可以再往里面加新控件。
你对控件的改名也该放到 frame 中去做,不应该在form里面去改吧?
 
我试了一下,在frame中加了一个按钮,放到模板中,名字为TFrame2
然后用到的时候改了个名字,原来为Button1,后来改为cancle,
但是在TForm1的声明中,没发现cancle,
结果发现,在窗体上出现了两个按钮!!!!!一上一下!!!!!
Caption分别为Button1和cancle.
而且设计的时候对按钮加事件处理程序的时候,发现增加的事件处理
过程名为TFrame21cancleClick,然后我在事件处理程序中添加了:
procedure TForm1.TFrame21cancleClick(Sender: TObject);
begin
ShowMessage((Sender as TComponent).Owner.Name);
end;
奇怪的事发生了,当不改名字的时候,只有一个按钮,显示TFrame21,
当改了名字的时候,有两个按钮,显示Form1!!!!!
于是我又改,我在TForm1的OnCreate加入:
procedure TForm1.FormCreate(Sender: TObject);
begin
TFrame21.Button1.Onclick:=TFrame21cancleClick;
end;
这下改了名字,也就是说,出现两个按钮,看看吧,
呵呵,妈的,两个按钮,一个显示Form1,一个显示TFrame21,
这下明白了,改名字就给Form1,不该名字就给TFrame21,这算什么规则?
一句话,这个东西真的没什么大用,没事别用!也不知道这个东西是谁加进来的,
也不知道是怎么想的!
 
FRAME是DELPHI5才有的,它在设计期的控件之间的关联并不好,我们也遇到这样的问
题,建议大家的地方时:
1。不要吧FRAME保存成模板。在继承上DELPHI有问题。
2。改动时不要改动FORM上的控件,先改动FRAME上的控件,这样在FRAME的CHANGE方法中会通知桌面上的所有FORM一起改动,但你反方向做,FORM并没有考虑FRAME。
3。总结:这是DELPHI的继承问题。
 
如果每个具体实例的改动都要改动原始frame才行,那这个破玩艺确实没什么用.

本来我从没用过这个东西,但是最近做的一个程序,里面有大量的录入界面都差不多,
所以我想试一试这个东西,看能不能做一个通用的录入界面,结果没想到现在我只能
用button1,button2....来访问了,真TM别扭!
 
扔掉这破玩艺!
 
frame里能放的控件也有限制,Notebook什么的都不让放,hehe...在不用它了
 
错,错,说frame是破玩艺!绝对是错的。
D5,C5中引入Frame是提高代码的重用效率,使有关联的代码更容易封装。在
主Form不应再改Name。cAkk遇到的情况是FORM并没有考虑FRAME的变化。
当重新打开工程是Form上的控件名字又会变回去。
这种情况是IDE的原因。而不应该说frame是破玩艺。
 
多人接受答案了。
 
后退
顶部