今天在写程序的时候,发现了自己对组件的名称Name好像不是很理解了疑问:组件必须有自己的名称么?
我写一个最简单的类TMyTest = class
private
  Button1:TButton;
  constructor create(AOwner:TComponent);
end;constructor create(AOwner:TComponent);
begin
 Button1:TButton.create;
 Button1.caption:='test';
end;看到了么?Button1是这个按钮的Name么?如果是的话,我多次创建这个类的
实例,那不是有多个重名的按钮?如果不是这个按钮的名称?我们直接在编辑状态可视化创建按钮button2,则必须在对象
观察器里面输入name属性button2,而且查看窗体的代码,在窗体的描述里面有啊。
button2:TButton;
怎么不是它的Name啊。越来越晕了。于是我用如上代码,动态创建多个按钮,用一个循环查看窗体的所有
组件的name,发现动态创建的按钮name 为空啊。如果可以为空,那DELPHI如何来管理这些组件啊。

解决方案 »

  1.   

    我是这样理解的,
    Button1不是这个按钮的name,你动态创建的按钮的name确实是空的。
    button1只是对应着内存里这个按钮的地址,
    如果这时用button2:=button1;
    那么button2,button1其它对应的是同一个按钮,并不能说明这个按钮的name改成了button2。
    至于直接在form上拖放的button1,
    delphi IDE把它的name也设成button1,并且改了name后,定义也自动变掉。出于什么考虑我也不清楚
    或许是为了更好管理吧,呵呵。一些OO的狂热者还认为delphi的拖放控件应该放在private里定义。ps 个人理解,不一定对
      

  2.   

    个人意见:
    组件名字是为了在delphi IDE里指明该控件的一个指针标识,对于动态创建的控件,因为我们已经为其指定了该实例的地址(Button1:=TButton.create;)中的Button1,所以其Name是什么都不重要,重要的是指针标识。
    所以当你拖动一个name为Button1的控件到FORM上,就不能再定义一个Button1:TButton来动态创建这个按钮。
    总之,个人觉得Name是为了delphi IDE而设计的~