![]() ![]() |
|
VFP9.0SP2中的MY组件帮助译文(二) | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/5/9 19:02:53 文章录入:杜斌 责任编辑:杜斌 | |
|
|
运行时刻类分层 IntelliSense 是一件事情;它的另外一件任务是,当你运行代码时,真的要有 My 命名空间在工作。儘管把一个类叫做My,把它的成员叫做App、 Computer、 Data等等,看上去轻而易举, 可My 实在做得比那多得多。就像IntelliSense,它是数据驱动的(实际上,用的是相同的 My 表格)。 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 默认的声音 -------------------------------------------------------------------------------- 脚本(Script)文本框用来定义执行脚本,当你输入等于号(指示恰当的任务)、括号(方法的开始)、或是逗号(在方法调用中分割参数)。它让你为属性指定可用的值、为不同的参数显示不同的工具提示、或者你想做的任何任务。例如,如果某个属性只允许包含 .T. 或是 .F.,下面的脚本代码将显示这些值的列表: lparameters toFoxCode, toData 注意:脚本传递两个参数:一个指向 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个字符。 |
|
![]() ![]() |