Database 版 (精华区)

发信人: starstar (我删我删,整理版务中), 信区: Database
标  题: 在PowerBuilder中动态调用函数 
发信站: 哈工大紫丁香 (2001年04月09日20:31:41 星期一), 站内信件

目前流行的大部分应用程序中都提供了Undo功能,在PowerBuilder中也可以利用Undo()
函数实现该功能。Undo()函数可用于DataWindow, EditMask, MultiLineEdit, RichTex
tEdit和SingleLineEdit 对象,如果只对某一个对象进行Undo操作,只需在Undo菜单项
的单击事件中键入如下脚本:Objectname.undo(),但是当窗口中有多个对象,我们在编
写脚本时并不知道要对哪个对象执行undo()操作,如何解决这一问题呢?在PowerBuild
er中,undo()等函数只能用于可视对象,而所有可视对象均继承自系统对象类GraphicO
bject。因此我们可以定义一个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
    其实我们可以用动态调用函数的方法简单地解决这一问题(只需三行代码),即对Gr
aphicObject对象调用undo()函数,然后在函数名前加上关键字Dynamic。因为对象类Gr
aphicObject并没有undo()这个对象函数,如果不加关键字Dynamic,编译时就会出现错
误。使用了Dynamic关键字,PowerBuilder在编译时不检查该函数和所用参数的有效性,
而到脚本运行时才去检查该函数。代码如下:
GraphicObject go_object
go_object=getfocus()
go_object.dynamic undo()
    允许动态调用函数是的PowerBuilder5.0的特性之一。在程序设计中灵活运用动态函
数调用的方法有助于提高所设计程序的可维护性、可重用性。
    以上程序在PowerBuileer 5.0,Window95环境下运行通过。

--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: ir.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.357毫秒