数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
PB中dynamic调用类型的用法

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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




相关文章

相关软件