首页 > 开发 > 综合 > 正文

PB中dynamic调用类型的用法

2024-07-21 02:09:57
字体:
来源:转载
供稿:网友
pb中dynamic调用类型的用法


说到dynamic调用类型,我们先看看对象、属性、函数和事件的引用方法:

powerbuilder 6.0应用程序的开发过程实际上就是各种对象的定义和使用过程。所有对象都有名称,并通过名称相互区分。在powerscript中,访问对象的属性、函数、事件的方法很简单,就是使用圆点作为标记符,具体来说,访问对象属性的格式为:

对象名.对象属性

例如,把单行编辑框sle_name的用户输入内容送到字符串变量userenter的语句可以写成:

userenter=sle_name.text

其中,sle_name是一个单行编辑框对象的名称,text是单行编辑框的text属性。

程序中访问对象的函数与事件的格式为:

{ objectname.} { type } { calltype } { when } functionname ( { argumentlist } )

其中,大括号所括成分根据情况可以省略,各成分的意义为:

objectname是对象名;

type取值为function或event,用于指明访问函数还是事件,缺省值为function;

calltype用于指明powerbuilder 查找函数的时机,有效取值为:

static(缺省值):编译时查找函数,若不存在,产生编译错误 
dynamic:程序运行时查找函数,若不存在,产生运行错误

when用于指明函数或事件是立即执行呢还是当前程序段执行完毕后执行,取值为:

trigger(缺省值):立即执行 
post:当前程序段执行完毕后执行

functionname指明调用的函数或事件名称

argumentlist给出函数或事件的参数

例如,想把输入焦点移动到单行编辑框sle_name上,程序中写上语句:sle_name.setfocus()即可。想立即执行按钮cb_name的单击事件处理程序,那么写上语句:cb_name .event trigger clicked()即可。

从以上看出,dynamic是指定函数或事件的一个动态调用,即当你指定一个动态调用时,函数和事件在编译时不一定要存在。你告诉编译器:相信我,此处在运行时一定会有一个合适的函数或事件。对于动态调用,powerbuilder等到执行时才寻找函数或事件。这就给了你更大的编程灵活性。

请比较以下的示例(摘录):

目前流行的大部分应用程序中都提供了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("出错","不能撤消!")

end choose

其实我们可以用动态调用函数的方法简单地解决这一问题,即对graphicobject对象调用undo()函数,然后在函数名前加上关键字dynamic

国内最大的酷站演示中心!
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表