跟楼主详细解释一下:无论窗体(表单),还是窗体中的控件(Control),都是对象(Object),凡是对象,都有一个标识自己的名字属性Name,那是一个字符串,这是程序检索对象时的依据(在C中是“引用”的性质,实际上是这个对象在内存中的地址名称)。
我们平时建立窗体,是这样做的:
Form1 = CreateObject("Form")
&& 从标准Form类中创建一个实例,其名字叫Form1
VFP在执行CreateObject()函数的时候,就默认令Name = "Form1"(这是你可以从属性对话框中看到的),因为你上面的命令就是这样写,希望让Name = "Form1"。所谓DO Form abc,其实就是上面那条命令的翻版。这就是这个对象实例的引用名,亦即内存变量名。任何时候,只要在作用域内,你都可以修改这个引用名称,随时设Form1.Name = "my_Form",这个对象的引用名就改变了,在这个语句起作用之后,这个窗体的内存变量名就成了my_Form,Form1不复存在(给改名字了而已,没有改变对象实体,所以这种操作是非常快的)。这种改变动作虽然不提倡,但允许,所以一般人设定引用名之后都不随便改变它。
VFP的机制,属性是可以动态设置的,不必非得在创建时设定,这是为了让我们方便临时改变属性,而不用先废除实例再创建。上面CreateObject()的执行,内部就调用了对象的Init事件代码,给Name赋值的动作,其实在Init事件中。让我们知道某个对象的引用名,就是Object.Name值,它以字符串形式返回,你要使用它作变量名,用宏。
任何对象都是这种机制,不独窗体如是。除了极少数几个属性是只读的,绝大多数属性都是运行期可读可写的(帮助信息上有明确指出是设计时可用抑或运行时可读、可写)。很多属性,要改变它或许有困难,但要读出来,基本上没问题(可以在类定义中明确声明某个自定义属性或过程不允许外部访问,此时就读不到了)。
[
本帖最后由 TonyDeng 于 2011-8-6 13:31 编辑 ]