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。

时间: 2024-12-03 02:36:25

PB中dynamic调用类型的用法的相关文章

详解Swift中enum枚举类型的用法_Swift

一.引言 在Objective-C语言中,没有实际上是整型数据,Swift中的枚举则更加灵活,开发者可以不为其分配值类型把枚举作为独立的类型来使用,也可以为其分配值,可以是字符,字符串,整型或者浮点型数据. 二.枚举语法 Swift中enum关键字来进行枚举的创建,使用case来创建每一个枚举值,示例如下: //创建姓氏枚举,和Objective-C不同,Swift枚举不会默认分配值 enum Surname { case 张 case 王 case 李 case 赵 } //创建一个枚举类型的

改善C#程序的建议2:C#中dynamic的正确用法

原文:改善C#程序的建议2:C#中dynamic的正确用法 dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你对GetDynamicObject方法返回的对象一无所知,你也可以像如下那样进行代码的调用,编译器不会报错:   dynamic dynamicObject = GetDynamicObject(); Console.WriteLine(d

时间类型的转换,SQL中CONVERT转化函数的用法

函数|转换 SQL中CONVERT转化函数的用法 格式:CONVERT(data_type,expression[,style]) 说明:此样式一般在时间类型(datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)相互转换的时候才用到. 例子:SELECT CONVERT(varchar(30),getdate(),101) now结果为:now---------------------------------------|09/15

c#调用c++写的dll中函数,类型对应的问题

问题描述 函数原型DWORDGETXXSTATUS(DWORD*mstatus)参数mstatus:[in/out]*mstatus表示状态值这里的DWORD*与C#中的什么类型对应呢? 解决方案 解决方案二:uintGetXXSTATUS([In,Out]refuintmstatus)解决方案三:dword实质上就是unsignedlong相当于C#的 uint解决方案四:引用1楼shingoscar的回复: uintGetXXSTATUS([In,Out]refuintmstatus) DW

语言设计中的鸭子类型风格

      在动态语言的世界里一直流传着一种叫做鸭子类型的风格,其来自谚语:"如果行鸭子一样走路,像鸭子一样呱呱叫,那它就是一只鸭子".      从鸭子类型,我们可以联想到它的推导,并不在乎类型的真正实体,只要他的行为有鸭子的特性,那么我们就可以把它当做一只鸭子来看到.在动态语言设计中,可以解释为无论一个对象是什么类型的,只要它具有某类型的行为(方法),则它就是这一类型的实例,而不在于它是否显示的实现或者继承.      鸭子类型在动态语言中被广为奉行.某类接口需要一个log接口,换

初探.NET中的delegate类型与.NET事件

  1.了解delegatedelegate可以认为是一种函数的指针,一个delegate类型的实例代表可以代表一个方法,在实际使用中我们可以在不知道方法名称的情况下调用到这个方法.前面说太多可能会使大家变得糊涂,或者摸不着头脑,我举个例子,来详细说明此种类型的用法: 整个例程的代码,是控制台项目. //代码开始using System; namespace ConsoleApp1{  public delegate string FunctionPointer(string strName);

PB中使用VC++编制的DLL

一.DLL概述: 动态链接库(Dynamic-Link Library),简称DLL,是基于Windows程序设计的一个非常重要的组成部分.使用DLL有许多优点: (1)使用DLL的动态连接不是将库代码拷贝,只在程序中记录函数的入口点和接口,在程序执行时才将库代码装入内存,如果有多个程序使用相同的DLL,也只需将DLL在内存中装载一次,节省了内存开销. (2)DLL是基于Windows的程序模块,它不仅包含可执行代码,还可以包含数据,各种资源,扩大了库文件的使用范围. (3)对于一个大型的.不断

Swift中使用可选类型完美解决占位问题

  这篇文章主要介绍了Swift中使用可选类型完美解决占位问题,本文讲解了为Dictionary增加objectsForKeys函数.Swift中更简便的方法.内嵌可选类型等内容,需要的朋友可以参考下 可选类型是Swift中新引入的,功能很强大.在这篇博文里讨论的,是在Swift里,如何通过可选类型来保证强类型的安全性.作为例子,我们来创建一个Objective-C API的Swift版本,但实际上Swift本身并不需要这样的API. 为Dictionary增加objectsForKeys函数

全面解读Java中的枚举类型enum的使用_java

关于枚举大多数地方写的枚举都是给一个枚举然后例子就开始switch,可是我想说,我代码里头来源的数据不太可能就是枚举,通常是字符串或数字,比如一个SQL我解析后首先判定SQL类型,通过截取SQL的token,截取出来可能是SELECT.DELETE.UPDATE.INSERT.ALTER等等,但是都是字符串,此时我想用枚举就不行了,我要将字符串转换成枚举怎么转呢,类似的情况还有从数据库取出数据根据一些类型做判定,从页面传入数据,根据不同的类型做不同的操作,但是都是字符串,不是枚举,悲剧的是我很少