您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> VFP >> 辅导 >> 正文    
  VFP9.0SP2中的MY组件帮助译文(二) 【注册男护士专用博客】          

VFP9.0SP2中的MY组件帮助译文(二)

www.nanhushi.com     佚名   不详 

  运行时刻类分层 

  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个字符。

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)                            【进男护士社区逛逛】
    姓 名:
    * 游客填写  ·注册用户 ·忘记密码
    主 页:

    评 分:
    1分 2分 3分 4分 5分
    评论内容:
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。