VCL组件之Name属性

Name属性

Name属性在组件中占重要地位。在前面已经讨论了,在窗体上安放组件时会发生什么。当组件被安放在窗体上,同时考虑下一步动作的同时,Delphi就已经在幕后工作了。Delphi做的一件事是建立指向组件的指针,指定Name属性为变量名。例如把Edit组件安放到窗体上,改变Name属性为MyEdit。此时Delphi把下面的句子安放在窗体的类说明中(public),如下图:

0174

当应用程序运行时,Delphi建立TEdit类的实例,并指定为MyEdit。可用此指针在运行时存取组件。要设置编辑控件的文本,用

  MyEdit.Text := 'Hello, World';

Delphi在建立事件处理程序名称时也要用到Name属性。假设要响应Edit组件的OnChange事件。通常情况,在Object Inspector中双击Value栏目,使Delphi紧接着OnChange事件,产生事件处理程序。Delphi基于组件的Name属性,建立缺省函数,事件被处理了。此时Delphi生成了叫做MyEditChange的函数,如下:

0175

如果通过Object Inspector改变Name属性,可随时改变它。当在设计阶段改变组件的Name属性时,Delphi遍历它以前生成的代码,并改变指针及所有事件处理函数的名称。

Note

Delphi会改变它生成的代码来反映组件的Name属性的新值,但它不会改变用户写的代码。换句话说,Delphi负责改变它写的代码,要由用户自己负责更新并维持自己写的代码。一般来说,在最初安放组件于窗体上时要设置Name属性并保留在那里。后来再改变名称没有问题,只是会增加工作量。

继续上面的例子,如果将编辑控件的Name属性由MyEdit更改为FirstName后,Delphi会改变指针名为FirstName,OnChange事件会自动改变为FirstNameChange。这都自动完成,不需要做什么。只要改变了Name属性,相信Delphi会做其余的工作。

Caution

不要再运行阶段改变Name属性。不要手工改变组件名称(Delphi指定给组件指针的名称)或Code Editor中的事件处理程序的名称。如果执行这些动作之一,Delphi会失去组件的跟踪,至少结果是不好的。甚至会失去装入窗体的能力。改变Name属性的唯一安全方式是通过Object Inspector。

Delphi对安放在窗体上所有组件赋给Name属性的缺省值。例如安放Edit组件,Delphi会自动把Edit1赋给Name属性。放第二个Edit组件,Delphi把Edit2赋给Name属性等。为了避免混乱和以后额外的工作,应尽可能给组件有意义的名称。

Note

如果组件在代码中不会用到,那么就可以用Delphi的缺省名称。例如,有几个标号组件(Label)包含静态文本,可保留其缺省名称,因为在运行阶段不会存取这些组件。

posted on 2012-01-18 21:35  pchmonster  阅读(1579)  评论(2编辑  收藏  举报

导航