每一种语言都有一组基本的语法约定,POWERBUILDER也不例外。
(1)断行、续行与多条语句
通常情况下,powerbuilder的一条语句是写到一行上的,该条语句在书写完毕之后,按<Enter>键转到下一行,开始写下一句的内容。也就是说,在PowerBuilder中,使用<Enter>键作为一行的结束。在PowerBuilder语句比较长的情况下,为了方便阅读,可以使用续行符号把一条语句写到几行上。PowerBuilder的续行符号为‘&’,它放在一句的末尾,表示下一行是前一行的继续。例如下面的一个语句:
Net=MessageBox("提示","真的想退出么?",&
Exclamaton!,OKCancel!,2)
注意,不能在标示符或者保留字的中间加入续行符。
在嵌入式SQL语言中不需要使用续行符,因为这类语句都是以分号(;)作为语句的结束,尽可以把一条SQL语句写成多行。
如果想在一行中写上多条语句,那么在多条语句之间应该以分号进行分隔,例如:
a=b+c;g=h+j;cnt=a+g+cnt
但是为了使程序写出来之后清晰直观,建议不要在一行中写入多条语句。
(2)PowerBuilder的PowerScript语言的标识符
标识符用来命名程序中的变量,符号,函数,窗口,控件,对象等的名称。在PowerBuilder中,标识符的命名应当遵守下面的几个规则,这个规则与Java语言的命名规则有少许区别:
1)必须以字母或者下划线(_)开头。
2)其余的字符可以是字母、数字、以及下列特殊的符号:短横线(-)、美元符号($)、号码符号(#)、百分号(%)。
3)标识符的中间不能添加空格。
4)通常,PowerBuilder中的标识符是不区分大小写的。
5)标识符不能使用保留字。
6)PowerBuilder的标识符的最长为40个字符。
短横线与减号是同一个字符,因此在表达式中使用减法运算符的时候,必须在减号的两边加上两个空格,否则会有可能产生运算错误。通常情况下,尽量不要在标识符当中使用短横线,以免与减法运算符混淆,可以用下划线来代替短横线来分隔单词。如果想禁止在标识符中使用短横线,可以使用文本编辑器打开PB.ini文件,然后在[pb]节点中将DashesInIdentifiers=1修改为:DashesInIdentifiers=0。但是这样会带来一个问题,就是在禁止在标识符中使用短横线之后,建立菜单之后分隔条的名称也就不能使用短横线了。因此还是建议不要对其进行修改。
(3)PowerBuilder中的空值
空值(NULL)是PowerBuilder与数据库交换数据时使用的一种特殊值,代表数据未定义、不明确,它与字符串数值零以及日期00-00-00的意义是完全不相同的。PowerBuilder的所有数值类型都支持空值,但是与Java等语言不相同,PowerBuilder并不把空值作为默认值。例如,说明变量的时候,PowerBuilder把0赋值给数值型数据,把False赋值给布尔型变量,把“”赋值给字符串变量,这个和Java有很大区别。变量被赋值空值的途径有两条:
1)从数据库中读到空值。
2)使用SetNull()函数赋值,例如:
String person
SetNull(person)
在测试一个变量或者是一个表达式是否是控制的时候,要使用函数IsNull(),而不是直接使用关系表达式。例如a是一个变量,要测试a的值是不是为空值,我们可以这样写:
IF IsNull(a) THEN......
写成 IF a=NULL THEN.....是错误的。原因是:空值不等于任何另外一个值,也不等于另外一个空值。
(4)PowerBuilder中对象属性、函数和事件的应用方法
PowerBuilder应用程序的开发过程实际上就是各种对象定义和使用的过程。所有的对象都有自己的名称,并且通过彼此的名称进行相互区分。在PowerBuilder中,如果想访问对象的属性,函数,事件的方法是非常简单的,同Java一样,都是使用.作为标示符。具体来说,访问对象的格式是:
对象名.对象的属性
例如,把单行标记狂sle_name中用户输入的内容送到字符串变量ls_name的语句可以写成:
ls_name=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()
(5)PowerBuilder中的代词
PowerBuilder提供了四个代词指定特定的对象.程序中使用代词的好处是避免硬代码,做到代码的通用化,这四个代词分别为This、parent、ParentWindow和Supper,四个代词的意义分别列举如下:
This:代表窗口、用户对象、菜单、应用对象或者控件本身,也就是代表正在为止编写事件处理程序的对象。
Parent:指当前控件所在的窗口,例如我们可以关闭按钮的父对象,就可以使用parent代词。
ParentWindow代表运行时菜单所在的窗口,该代词只能在菜单的事件处理程序中使用,如果在“退出”菜单项的“Clicked”事件处理程序中写上代码:Close(ParentWindow)则单击该菜单项的时候就会关闭与之关联的窗口,而不管窗口的具体名称叫什么。
Super:在编写控件与对象的子对象的时间处理程序的时候,子对象可以调用父对象的事件处理程序,程序中既可以直接利用父对象的名称调用它们,也可以使用Super代词来引用。