教程中国
PHOTOSHOP CS9.0中文版 MAYA 8.5 FOR WINDOWS Corel Painter v9.0 Flash MX2004 中文版 Illustrator cs2 中文版
VC++6.0含sp6 中英文版 VB6.0 +sp6 简体中文版 Borland Delphi 7汉化版 MSDN for vb6.0中文版 Visual Studio 2005简体
教程中国下属 文件存储共享专家BIBIDU.COM 提供大型软件,教材,源码,电影,音乐,图书等下载 更多精品请点此进入
  您目前所在位置: 教程中国 >> 编程基地 >> PB >> 在PowerBuilder中动态调用函数 RSS订阅
在PowerBuilder中动态调用函数
教程(视频,书籍)下载:  ASP.NET AutoCAD 数据库 C# ASP java photoshop 网页设计 delphi 3dmax Flash C++ VB 张孝祥 实例   更多请进入BIBIDU搜索
IT搜索引擎   
目前流行的大部分应用程序中都提供了Undo功能,在PowerBuilder中也可以利用Undo()&&函数实现该功能。Undo()&&函数可用于DataWindow, EditMask, MultiLineEdit, RichTextEdit和SingleLineEdit 对象,如果只对某一个对象进行Undo操作,只需在Undo菜单项的单击&&事件中键入如下脚本:Objectname.undo(),但是当窗口中有多个对象,我们在编写脚本时并不知道要对哪个对象执行undo()操作,如何解决这一问题呢?在PowerBuilder中,undo()等&&函数只能用于可视对象,而所有可视对象均继承自系统对象类GraphicObject。因此我们可以定义一个GraphicObject对象的实例变量go_object,等到运行时再用getfocus()&&函数确定具体操作对象。然后用Typeof()&&函数确定当前对象的类型,再用Choose case语句根据不同的类型引用不同的实例变量,代码如下:

graphicobject go_object
DataWindow dw_object
EditMask em_object
MultiLineEdit mle_object
RichTextEdit rte_object
SingleLineEdit sle_object

go_object=getfocus()
choose case TypeOf(go_object)
case DataWindow!
dw_object=go_object
dw_object.undo()
case EditMask!
em_object=go_object
em_object.undo()
case MultiLineEdit!
mle_object=go_object
mle_object.undo()
case RichTextEdit!
rte_object=go_object
rte_object.undo()
case SingleLineEdit!
sle_object=go_object
sle_object.undo()
case else
messagebox("Error","Can not undo")
end choose

  其实我们可以用动态调用&&函数的方法简单地解决这一问题(只需三行代码),即对GraphicObject对象调用undo()&&函数,然后在&&函数名前加上关键字Dynamic。因为对象类GraphicObject并没有undo()这个对象&&函数,如果不加关键字Dynamic,编译时就会出现错误。使用了Dynamic关键字,PowerBuilder在编译时不检查该&&函数和所用参数的有效性,而到脚本运行时才去检查该&&函数。代码如下:

GraphicObject go_object
go_object=getfocus()
go_object.dynamic undo()

  允许动态调用&&函数是的PowerBuilder5.0的特性之一。在程序设计中灵活运用动态&&函数调用的方法有助于提高所设计程序的可维护性、可重用性。

  以上程序在PowerBuileer 5.0,Window95环境下运行通过。

来源:十度教育
作者:
关键字:
发表日期:2006-5-13 13:56:46

网页显示有限 阅读全文请下载本文完整版WORD文档

上一篇:使用PB 7.0 开发Web应用   下一篇:PB/Sybase系统开发中的数据库转移


2008-10-8 7:16:56
本文的相类似文章
在学习中进步 在进步中成长 教程中国相随您的成长之路
华腾联合科技股份有限公司版权所有
广告联系:Rosibo@163.com