计算机二级vf9.0版,VFP9.0SP2中的MY组件帮助译文(二)

运行时刻类分层

IntelliSense 是一件事情;它的另外一件任务是,当你运行代码时,真的要有 My 命名空间在工作。儘管把一个类叫做My,把它的成员叫做App、 Computer、 Data等等,看上去轻而易举, 可My 实在做得比那多得多。就像IntelliSense,它是数据驱动的(实际上,用的是相同的 My 表格)。

My 类其实是 MyBase的一个子类,就像 Computer、 User和其他类那样。MyBase,乃Custom类的一个子类,基于在 My 表格中所发现的,动态地把成员加到它自己身上。 这份工作要在 AddMembers 中完成,要从 Init 调用。此方法从 My 表格中选择记录,看是否与自定义的cNameSpace属性中所指定的命名空间相匹配,这个属性所包含的其实就是该物件的命名空间(例如,对于MY类来説,就是"MY";对于"Computer"类来説,就是"My.Computer")。然后它实例化在那些记录中所指定的类,再加它们为成员。例如,对于 My 命名空间, My 表格有成员的记录,分别叫做 My.App、 My.Computer、 My.Data、My.User。那样,基于 MyBase,实例化 My 类,引发已在 My 表格中注册的所有成员动态的创建。 My 实际上没有代码,它只不过简单的把 cNameSpace 属性设置为"My."

Computer, 该类再次描述 My.Computer 成员,也是 MyBase的一个子类。这样,当它从 被MY的AddMembers 方法而实例化时,它自己的 AddMembers 方法就是 My 表格里,找找 My.Computer 命名空间内的乘员,比如 My.Computer.Audio、 My.Computer.FileSystem,诸如此些。那些类基于 MyBase而返回,如此一来,层次有深度,也有必要通过简单地实例化一个类(My),来到到自动化建造。 例如,My.Computer.FileSystem.SpecialFolders命名空间,这个类的四层都是自动安装的。

My 生成器

MyBase ( My 命名空间中,类的基类),有一个自定义的 Builder 属性包含了"My.vcx,MyBuilderForm"。它告诉 VFP , 在 MY.VCX 中的MyBuilderForm,是一个生成器,既是它的,又是所有基于其上的类的。在建立了 My 的一个子类后,它和它的成员都能够注册进入 My 表格,办法是在类上右击,然后选择"Builder"。下面的图片展示了生成器表单看起来的样子。

My 注册生成器让你为类指定命名空间的名称。默认是 "My." 加上类名,不过你可以指定别的你所希望的(参见 Adding Your Own Classes to My 一文,以得到用你自己的类来扩展 My 的信息)。例如,FileSystem 类是 My.Computer 的一个成员,所以它的命名空间就叫做"My.Computer.FileSystem. "。在IntelliSense列表中,类的工具提示使用了描述字段。它默认类的描述,是在类菜单的类信息(Class Info)中指定,或者在项目管理器的项目菜单下,选择类是,在编辑描述功能中指定。

树(TreeView)显示类的公用自定义属性和方法; 如果你想把本地成员全部显示出来,那么就在MY.VCX的、MyBuilderForm类的、 LoadTree 方法中更改 AMEMBERS() 语句。

名称前的核查框指示该成员是否包括在 IntelliSense 内;默认情况下,所有的自定义成员都是包括的。

描述 (Description)是用来给 IntelliSense 列表中的成员作工具提示的;它的缺省值是当你创建它时,你为这个成员所输入的文字。

方法签名(Method signature)在你为方法的参数列表而敲入括号、或逗号的时候,它就作爲方法的工具提示而出现了。提示信息告诉你,什么参数可以传递给该方法。签名默认是方法的名称,以及方法中任何 LPARAMETERS 语句的内容,但是你把它编辑成泥所想显示的,包含返回值的数据类型(例如,"DeleteKey(Key as String) as Logical")。

枚举参数( Enumerated Parameters)文本框让你指定方法参数的枚举值的列表。例如,当你敲入"My.Computer.Audio.PlaySystemSound(", IntelliSense 显示你为这个方法的参数,能够使用的可用值的列表。要制定该值,逗号前输入值(若是字符串类型的值,要包括引号),逗号后输入工具提示。每一个值应该各佔一行。以下是 My.Computer.Audio.PlaySystemSound 的列表:

'Default',播放 Windows 默认的声音

'Exclamation',播放 Windows 惊叹的声音

'Information',播放 Windows 消息的声音

'Question',播放 Windows 提问题的声音

'Stop',播放 Windows 停止的声音

--------------------------------------------------------------------------------

脚本(Script)文本框用来定义执行脚本,当你输入等于号(指示恰当的任务)、括号(方法的开始)、或是逗号(在方法调用中分割参数)。它让你为属性指定可用的值、为不同的参数显示不同的工具提示、或者你想做的任何任务。例如,如果某个属性只允许包含 .T. 或是 .F.,下面的脚本代码将显示这些值的列表:

lparameters toFoxCode, toData

dimension toFoxCode.Items[2, 2]

toFoxCode.Items[1, 1] = ' .T.'

toFoxCode.Items[1, 2] = ''

toFoxCode.Items[2, 1] = ' .F.'

toFoxCode.Items[2, 2] = ''

toFoxCode.ValueType = 'L'

return ''

注意:脚本传递两个参数:一个指向 FoxCode 对象,这个对象包含了关于当前IntelliSense语句的属性信息,还有一个是 SCATTER NAME 对象,来自 My表格中合适的纪录,合乎你需要的关于此物件的信息。

范例中的代码,搞定 FoxCode 对象的Items数组。该书组包含列表,显示在IntelliSense列表中,前提是如果 ValueType 属性被设置成了"L"的话。数组的第一列包含的是要显示的值,(如果用户选了一个,那么就插入);第二列包含了该值得工具提示(本例中,代码让第二列留空,是因爲这个值的意思太明白了)。

所以,这段代码如果作爲脚本,被赋予给一个叫做"SomeProperty"的属性,在My.SomeNameSpace命名空间内使用的话,那么敲入"My.SomeNameSpace.SomeProperty ="将显示".T."和".F."的列表,作爲能够候选的可能值。

加入你自己的类到 My

想没想过把你自己的命名空间加到 My ? 你能做的,乃是子类化 MyBase ,创建新类,再研发所渴望的功能。但是问题来了:假使你有了一个类,你想使用它,而它却并非基于 MyBase,那该怎么办?

在那种情况下,打开这个类,敲入"DO My.APP WITH 'Builder'"(实际上,你可以传送任意类型的任意参数;代码简单地检查 PCOUNT() ,如果有任意参数传递了过来,那就保佑生産器表单吧)。 它显示 MyBuilderForm 类的一个实例(在 My 表格 一文中已讨论),能够在 My 表格中注册任何类。当然,既然类不基于 MyBase,也就不会动态地加入成员于自身中,这些类不会有一个低于它们的动态的层次,也不会让你在包含于类对象成员上得到智能感应。

甚至,你可以使用不同的命名空间,只要你想这么做。例如,假若你有一个ConnectionManager 对象,你想在 Framework 命名空间注册它,你可以把它指定成Framework.ConnectionMgr。然后你就可以使用 LOCAL loConn AS Framework.ConnectionMgr, 仅对ConnectionManager类的注册成员得到智能感应。此类和它的成员仍然在 MY.DBF 中注册,但是使用了与MY所不同的命名空间。在这种情况下,附加的记录被加到你的 IntelliSense 表格,每个命名空间各一行(本例子中是"Framework.ConnectionMgr")。注意命名空间的长度限制是别超过24个字符。来源:-计算机二级考试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值