在PowerBuilder中动态调用函数

时间:2007-06-15 来源: 作者: 【字体: 减小 增大收藏 | 投稿
  
目前流行的大部分应用程序中都提供了Undo功能,在PowerBuilder中也可以利用Undo()函数实现该功能。Undo()函数可用于DataWindow,EditMask,MultiLineEdit,RichTextEdit和SingleLineEdit对象,如果只对某一个对象进行Undo操作,只需在Undo菜单项的单击事件中键入如下脚本:Objectname.undo(),但是当窗口中有多个对象,我们在编写脚本时并不知道要对哪个对象执行undo()操作,如何解决这一问题呢?在PowerBuilder中,undo()等函数只能用于可视对象,而所有可视对象均继承自系统对象类GraphicObject。因此我们可以定义一个GraphicObject对象的实例变量go_object,等到运行时再用getfocus()函数确定具体操作对象。然后用Typeof()函数确定当前对象的类型,再用Choosecase语句根据不同的类型引用不同的实例变量,代码如下:

graphicobjectgo_object
DataWindowdw_object 财,软联盟,fs119.net
EditMaskem_object
MultiLineEditmle_object
RichTextEditrte_object
SingleLineEditsle_object

go_object=getfocus()
choosecaseTypeOf(go_object)
caseDataWindow!
dw_object=go_object
dw_object.undo()
caseEditMask!
em_object=go_object
em_object.undo()
caseMultiLineEdit!
mle_object=go_object
mle_object.undo()
caseRichTextEdit!
rte_object=go_object
rte_object.undo()
caseSingleLineEdit!
sle_object=go_object
sle_object.undo()
caseelse
messagebox("Error","Cannotundo")
endchoose 财管,家园,fs119.net

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

财,管家园,fs119.net

GraphicObjectgo_object
go_object=getfocus()
go_object.dynamicundo()

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

  以上程序在PowerBuileer5.0,Window95环境下运行通过。

财软联 盟 fs119.net

财软.联盟.fs119.net


上一篇:PB中关于动态工资项目问题的解决办法
下一篇:在PB中使用VC编制的DLL

精品课程推荐