| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3409 人关注过本帖
标题:如何获取表单的内存变量名(表单对象变量的名称)?
只看楼主 加入收藏
xvfp
Rank: 2
等 级:论坛游民
帖 子:34
专家分:24
注 册:2011-4-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:22 
如何获取表单的内存变量名(表单对象变量的名称)?
例如:
一个表单的文件名为abc.scx;
do form abc后,就自动产生了该表单的内存变量名abc;
该表单上有一个按钮,按下后,需要获取这个内存变量名,我找不到该用哪条指令或函数。
注:不是取表单的name属性。
搜索更多相关主题的帖子: 内存 如何 
2011-08-06 09:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
每个控件都有name属性,表单是控件,控件也是控件,name就是控件的变量名。

授人以渔,不授人以鱼。
2011-08-06 09:41
xvfp
Rank: 2
等 级:论坛游民
帖 子:34
专家分:24
注 册:2011-4-13
收藏
得分:0 
回应Tony:
对于表单中的控件,完全可以用这些控件的name属性去调用它们。但是,表单则不同:
1.表单的name可以在运行时、用程序去任意修改。如果用这个name去调用表单中的其他控件会报错,因为屏幕上可以同时存在多个表单、且它们的name属性可以相同。
2.表单在运行时,会产生这个表单唯一的内存变量名,且运行后不可更改。用这个变量名可以调用表单上的控件。屏幕上可以同时存在多个表单、且它们的变量名都不相同。

我问的是:
表单运行后,此表单上的一个控件需要取得此表单【唯一的内存变量名】。(尽管在编程时,我知道它的名字,就像1楼的abc,可是如何用程序去取这个变量,得到其内容为abc?)
2011-08-06 12:33
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
控件的name也是可以改的,在运行时一样可以改。Control.Name是一个可读可写的属性。

[ 本帖最后由 TonyDeng 于 2011-8-6 12:53 编辑 ]

授人以渔,不授人以鱼。
2011-08-06 12:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你平时用 = .F.的时候,用的Command1就是这个按钮的Name,不信你MESSAGEBOX()看看,然后写 = "Command2",看看Command1还在不在。

授人以渔,不授人以鱼。
2011-08-06 12:53
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:0 
do form abc ,这个表单在程序中调用时,它的内存变量就是 abc 。要用它,必须在主程序进入时首先将 abc 设置为公共变量,否则不能使用这个内存变量名。
2011-08-06 12:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
跟楼主详细解释一下:无论窗体(表单),还是窗体中的控件(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 编辑 ]

授人以渔,不授人以鱼。
2011-08-06 13:13
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你用MESSAGEBOX(ThisForm.Name)看看是不是"abc"?

授人以渔,不授人以鱼。
2011-08-06 13:21
xvfp
Rank: 2
等 级:论坛游民
帖 子:34
专家分:24
注 册:2011-4-13
收藏
得分:0 
以下是引用TonyDeng在2011-8-6 13:21:24的发言:

你用MESSAGEBOX(ThisForm.Name)看看是不是"abc"?
不是的。
用vfp的表单设计器设计一个表单,默认name属性为form1,但在设计时,可以改成xyz;退出设计器时,会要求存盘,且可以取个名字叫abc;此时可以在硬盘上看到两个文件:abc.scx和abc.sct
do form abc后,MESSAGEBOX(ThisForm.Name),显示xyz,而内存中有一个O型变量abc。此时在命令窗口:
?可以执行(command1为这个表单上的一个按钮)
?不可以执行,报错。

我问的是:在命令窗口用什么指令或函数,找出屏幕上这个正在运行的表单的O型变量?这个指令或函数能告诉我,这个O型变量叫abc,我就可以用类似的指令去调用表单中的控件。
2011-08-06 13:53
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
在程序内存中,VFP以xyz为对象依据,abc是没用的,它只是从磁盘中提取表单文件时使用的,映射回xyz。怎么做到你最后那句话想要的东西,7楼倒数第2段告诉你了。

授人以渔,不授人以鱼。
2011-08-06 14:01
快速回复:如何获取表单的内存变量名(表单对象变量的名称)?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026589 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved