怎样控制DATAWINDOWvs中的控件内部控件

双人贪吃蛇别踩白方块,玫瑰婲矿井逃生等多种C语言游戏代码等你来实践!


· 超过20用户采纳过TA的回答
是否可視的呢
老兄我们在考试 求你了阿 一定要正确啊 我没分,有分全给你!!

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

PB9.0提供了28个属性、35个默认事件、162个函数注意与数据窗口对象的区分。
*尽量不要在RetrieveRow事件下编写脚本(包括注释)
*如果数据窗口的DoubleClicked事件中编写了脚本,那么在数据窗口的C1icked事件vs中的控件脚本应该尽量短否则双击事件vs中的控件脚本永远不可能得到执行。一般来说Cliked中脚本的执行时间和两次击鼠标之间的间隔时間之和,不应该大于操作系统中所设定的鼠标双击时间间隔否则双击事件永远不可能触发,双击时仅仅是接连两次触发c1icked事件
*在数据窗ロ中录入数据时,事件EditChanged是触发频率最高的每一个按钮都触发该事件;触发频率仅次于该事件的是ItemChanged事件和ItemFocusChanged,只要修改了单元vs中的控件内容每次触发ItemFocusChanged事件都会触发ItemChanged事件。在这些事件下编写过长的脚本会非常影响录入工作的效率同样,事件RowFocusChanged的触发频率也是相当高的一般来說是可以避免在这四个事件中编写脚本的。
数据窗口在运行时要创建四个缓冲区分别是主缓冲区、删除缓冲区、过滤缓冲区和原始缓冲區,这四个缓冲区各司其职、共同配合来保证数据窗口对数据的正确处理。下面分别加以介绍
这是最重要的一个缓冲区,保存的是当湔显示在数据窗口vs中的控件所有数据以及它们的修改状态在保存数据时使用这些状态生成SQL语句。平常的大多数操作都是针对该缓冲区函数vs中的控件缓冲区参数缺省也是该缓冲区。
该缓冲区保存所有删除了的数据保存数据时,该缓冲区vs中的控件数据用来产生delete语句在数據没有提交到数据库之前,可以从该缓冲区中将数据恢复出来数据提交后,该缓冲区vs中的控件数据清空
该缓冲区中保存的是没有通过過滤规则的所有数据,这些数据在存储时同主缓存区的数据一起生成相应的insert或update语句
用来保存从数据库中检索到的初始值,在保存数据时鼡来生成where语句
上面这四个缓冲区中,original缓冲区在脚本中很少使用其他三个经常涉及到,很多数据窗口函数都需要指定对这三个缓冲区vs中嘚控件哪个进行操作大多数情况下都使用缺省的缓冲区Primary!。这三个缓冲区除了保存相应的数据外,都自动维护这些数据的修改标志它們之间的协作也是自动维护的。例如当使用过滤函数时,没有通过过滤规则的数据自动从Primary缓存区移送到Filter缓存区;执行删除操作时数据洎动从Primary缓存区移送到Delete缓存区。所有这些数据的移送无需脚本的干预只管使用相应的函数即可。
和数据窗口控件打交道都是通过编辑控件進行的在数据窗口中录入数据、修改数据,实际上是在修改单元上的编辑控件vs中的控件内容当编辑控件移动到另外单元上之前,要对編辑控件vs中的控件数据进行校验如果能通过字段的校验规则,就保存到字段中编辑控件是可以移动的,需要编辑哪个单元编辑控件僦移动到哪个单元上,接受输入或者修改
编辑控件在没有离开当前字段时,用户录入或者修改的数据就不会被保存到字段中如何确保茬数据窗口失去焦点时,最后位置上编辑框vs中的控件内容不被遗漏呢前面介绍了在数据窗口的LoseFocus事件中编写如下脚本:
这个方法在很多情況下能解决该问题。美中不足的是如果编辑框vs中的控件内容不能通过字段的校验规则,有时会显示两次错误信息窗口造成两个错误信息窗口,往往是在选择其他单元时发生在数据窗口失去焦点之前(如单击“保存”按钮等)只会显示一个错误信息窗口。用户选择其他單元时编辑框vs中的控件数据开始进行校验,不能通过校验规则显示校验错误信息,在显示校验错误信息时数据窗口失去焦点触发数據窗口的LoseFocus事件执行AcceptText函数,又一次显示校验错误窗口
所以,显示两次校验错误窗口的原因是LoseFocus事件vs中的控件AcceptText函数造成的可以想法让该函数茬这种情况下不执行。为此定义一个实例变量:
该变量用来表示是否正确通过了校验然后将LoseFocusvs中的控件脚本改成下面的脚本:
在数据窗口的ItemError倳件中编写脚本:
这样就可以解决显示两个校验错误信息窗口了,并且不会遗漏最后一个编辑框vs中的控件内容
*当在某个单元中修改或者錄入数据后,编辑框要离开时要进行4个校验步骤,前面两个步骤由PowerBuilder完成后面两个由开发者编写。
(1)看数据和编辑前相比是否发生了改变没有改变则不做任何处理。
(2)检查测试此值是否违反了任何一个在字段上定义的有效性校验规则违反则拒绝接受此值,并触发ItemError事件
(3)检查此值是否与编辑前真的不同,没有改变则终止有效性校验
(4)检查开发人员在ItemChanged事件中编写的脚本。具体的发生情况取决于分配给被称为动莋代码的值
2、直接使用数据窗口对象属性来读取数据
dwcontrol是数据窗口控件名称。
whichvalue既可以是current(缺省值)也可以是original。这样就允许用户访问一个列的初始值或当前值
row和column是要访问的单元所在的行号及列号。
这种引用方法速度比较快尤其读取大量数据时。


用来显示在数据窗口的标題条(TitleBar)上的一个字符串建议该字符串要有一定的含义,能够标明数据窗口的用途或者其vs中的控件数据的类别该属性的缺省值none。当属性TitleBar为True时该属性起作用。
是否显示数据窗口控件缺省为True。有时为了向其他数据窗口提供数据除了使用datastore控件外,还可以使用Visible属性为False的数據窗口如果仅仅是为了处理数据,不赞成使用Visible属性为False的数据窗口而应该使用Datastore对象,这样可以节省计算机资源提高处理效率。
数据窗ロ控件是否可以获得焦点缺省为True。可以在脚本中修改该属性以限制用户执行了某些特定操作后再允许操作数据窗口
是否显示标题条,缺省为False使用该属性可以在数据窗口上部显示标题条,类似于窗口的标题条设置属性为True后,用户就能够拖动数据窗口
是否显示控制菜單,缺省为False该属性当TitleBar属性为True时才有效。
是否显示最大和最小控制按钮缺省为False。当属性TitleBar为True时该属性有效。属性TitleBar和ControlMenu、MinBox、MaxBox共同控制数据窗ロ的外观是否像窗口的外观
这两个属性用来控制数据窗口控件的横向和纵向滚动条是否显示。设置为True时滚动条可以根据需要自动显示,数据够显示时则不出现滚动条
该属性是一个比较重要的属性,缺省为True表示当拖动垂直滚动滑块时,数据窗口vs中的控件行也跟随滚动;属性为False时表示拖动垂直滚动滑块时数据窗口vs中的控件行不跟随滚动,放开垂直滚动滑块后数据窗口vs中的控件数据才滚动到适当数据荇上。建议选中该属性这样当数据很多时,用户就可以拖动垂直滚动小滑块来快速浏览数据了
该属性是一个非常有实际用途的属性。該属性决定是否显示分割滚动条缺省为False。当数据窗口比较宽要显示水平滚动条时,建议将该属性设置为True
该属性为True时表示数据窗口vs中嘚控件所有字符都从右向左显示。缺省为False当设置该属性为True时,还必须要操作系统的支持该属性才能起作用。
用户是否可以调整数据窗ロ的大小缺省为False。
是否显示边框默认为True,只有在True的情况下BorderStyle才起作用
用来给数据窗口指定标题条左上角的图形缺省为Windows标志图。
鼠标左鍵在数据窗口控件上任意位置单击时触发该事件该事件中有4个参数,可以在脚本中直接使用
xpos:表示和数据窗口最左侧的距离的整数。
ypos:表示和数据窗口最上部的距离的整数不包括标题条。
row:表示用户所单击的行号的long型数
dwo:用户单击对象,是DWObject类型
在该事件的脚本中使用这些参数,可以给用户一些提示信息或者获取用户单击内容的信息
返回值:0表示继续处理,这是缺省值1表示停止处理。
在数据窗ロ控件中发生数据库错误时触发该事件该事件有以下参数。
SQLdbcode:long类型的错误代码具体含义由DBMS指定。当DBMS没有指定错误代码时SQLdbcode提供4个错误玳码,-1表示事务对象参数错误而不能联结到数据库-2表示不能联结到数据库,-3表示因为其他用户的修改导致用来进行检索或修改的键值在數据库中已经不存在而产生错误-4表示向数据库中写blob对象时失败。
SQLsyntax:string类型当错误发生时,发送到数据库的SQL语句
buffer:DWBuffer枚举型,表示导致错誤的数据所在的缓冲区
row:long类型,导致错误的数据的行号
返回值:可以用return语句任意指定返回什么数据。有特定含义的返回值是0和10表示顯示错误信息,1表示不显示错误信息
鼠标左键在数据窗口控件中双击时触发该事件。该事件vs中的控件4个参数和Clicked事件vs中的控件名称及含义唍全相同也可以直接在该事件的脚本中直接使用。
该事件的返回值可以用return指定有特殊函数的返回值是0,表示继续处理
在数据窗口控件的编辑框中每次按钮都触发该事件。一般很少在该事件下编写脚本该事件提供三个参数。
row:long类型当前编辑的行号。
dwo:DWObject类型正在编輯的对象。
data:String类型当前编辑框vs中的控件内容。
返回值:可以用return指定任意返回值0表示继续处理。
当数据窗口对象vs中的控件数据或者表达式错误时触发该事件在分布式系统中联结发生错误时也会触发该事件。和DBError事件不同的是该事件在没有和数据库交互时就有可能触发,洏DBError事件触发时肯定和数据库发生了交互通常在该事件中编写脚本,提供对错误的处理该事件提供了很多参数。
errorwindowmenu:string类型造成错误的脚夲所在对象的父对象的名称。
errorobject:string类型造成错误的脚本所在的对象的名称。
errorscript:string类型造成错误的语句所在的脚本的全部内容。
action:在Error事件下嘚代码执行完后该参数取值由脚本设定。可以指定的值有:ExceptionFail!表示错误处理失败(执行该值有可能触发应用的SystemError事件);ExceptionIgnore!表示忽略错误继续執行(要谨慎使用该取值因为忽略错误有可能将再次导致其他错误);ExceptionRetry值只能用于OLE,对于数据窗口控件没有该取值,该取值表示再次執行刚才造成错误的功能;ExceptionSubstituteReturnValue!表示使用参数returnvalue的返回值而不是返回OLE服务器或数据窗口控件的错误代码,并且取消错误状态
*对于数据窗口控件来说,如果在运算数据或属性表达式时发生了错误将进行如下的错误处理过程:
c.如果SystemError事件下也没有脚本,便会发生应用程序错误然後终止应用程序。
所以在该事件或者应用的SystemError事件下应该编写脚本。这样才不至于退出应用程序使用户没有处理的机会,甚至录入了半忝的数据连个保存的机会也没有了
返回值:该事件没有返回值,也不在该事件中使用return语句
当某单元(行和列的交叉点叫做单元)编辑後(内容改变),光标要离开时触发该事件如使用了Enter按钮、单击了Tab按钮、使用了光标键、在其他字段上单击了鼠标左键等。当编辑完一个单え的内容而没有离开该单元这时数据窗口失去焦点,这种情况不会触发该事件(所以在LoseFocus事件中要使用函数AcceptText)三个参数row、dwo和data的含义和EditChanged事件的三个参数完全相同。
返回值:可以使用return语句返回任意值0表示接受刚刚修改的数据,该值是缺省值;1表示放弃刚才的修改不允许焦點离开;2表示放弃刚才的修改,允许焦点离开
*编辑框内容有变化并离开此编辑框时触发;注意:当editchanged事件下有代码,编辑框内容有变化且離开此编辑框时不会触发此事件
当某单元被编辑后光标要离开时,如果单元vs中的控件新数据不能通过有效性校验则触发该事件。(同ItemChanged:當编辑完一个单元的内容而没有离开该单元这时数据窗口失去焦点,这种情况不会触发该事件)该事件在ItemChanged事件之前触发该事件触发就不能再触发ItemChanged事件了。该事件vs中的控件三个参数和ItemChanged事件vs中的控件三个参数完全相同
返回值:可以使用return语句返回任意数值, 0表示放弃修改的数據并显示错误信息,焦点不离开该单元该取值是缺省值;1表示放弃修改的数据但不显示错误信息提示,焦点不离开该单元;2表示接受剛刚修改的错误数据;3表示放弃刚刚修改的数据并且焦点不离开该单元。
当焦点离开某单元时触发该事件(不管内容有没有改变)该事件提供了row和dwo两个参数,含义和前面介绍的完全相同可以使用return语句返回任意数值,0表示继续处理
*不管编辑框vs中的控件内容有没有改变,离開编辑框时触发该事件注意:当离开数据窗口时不触发
当打印工作完成时触发该事件。参数PagesPrinted可以在脚本中直接使用是一个long类型的变量,表示已经被打印的页数
在数据窗口每页进行打印格式处理之前触发该事件。参数Copy和PageNumber在脚本中可以直接使用表示该页要打印的份数和當前页的页号。返回值0表示不要跳过当前页1表示跳过当前页。一般在该事件下编写脚本显示打印进度信息例如:
也可以在该事件中决萣是否真正要打印该页。例如下面的脚本只打印偶数页码的页面:
数据窗口打印开始时触发该事件。该事件vs中的控件参数PagesMax是一个long型变量表示将要被打印的总页数(不包括跳过的页)。返回0表示继续处理
当数据窗口检索完毕时触发该事件。参数rowcount是一个long型变量表示检索唍后检索到的记录数。
每检索到一条记录时都触发该事件参数row是long类型变量,记录当前检索到的数据的序号返回值0表示继续检索,1表示停止检索检索大量数据之前可以设置中断标志,让用户在检索过程中可以停止检索
当数据窗口的检索操作将要开始时触发该事件,该倳件中没有参数返回值0表示继续执行,该值是缺省值1表示不执行检索,2表示在检索之前不清除数据行和缓存区通常不在该事件下编寫脚本,即使编写脚本一般也是利用返回值2的特性来控制检索操作不清除缓存区,这样可以将检索到的数据添加到数据窗口中并且在數据窗口中保留检索之前的数据。
当前行改变时触发该事件CurrentRow参数是一个long类型变量,保存当前记录号该事件下的典型编程是修改当前行標识,将当前行明显地标识出来可以让用户清楚地知道要对哪行进行操作,在该事件和其他事件的配合下共同修改当前行标识
*不管内嫆有没有改变,当前行改变时触发;在离开数据窗口时不触发
当使用光标键、Tab按钮、滚动条等等在数据窗口中进行水平滚动时触发该事件很少在该事件上编写脚本。
当在数据窗口中使用光标键、滚动条、Tab键等进行上下滚动时触发该事件通常在该事件中编写脚本来改变当湔行。因为当上下滚动数据窗口时如果当前行不在当前显示的区域内,则容易给用户造成错觉可以在该事件中编写脚本将当前页面的苐一行数据设置为当前行。使用Describe和Evaluate函数可以实现该功能
当执行函数Retrieve、ReselectRow和Update时SQL语句要提交到DBMS,这时触发该事件该事件的参数比较复杂。
buffer:當前SQL语句所涉及到的数据所在的缓存区取值为枚举型,Delete!、Filter!、Primary!分别表示删除缓存区、过滤缓存区和主缓存区
row:long类型变量,表示该事件中涉及到的记录数
返回值0表示继续处理,1表示停止处理2表示处理下一个SQL请求。
当从数据窗口控件发送来的对数据库的修改都完成后触发該事件该事件的三个参数RowsInserted、RowsUpdated、RowsDeleted都是long类型的变量,分别表示插入、修改和删除的记录数
在调用了update函数之后、开始修改之前触发该事件,該事件没有参数返回值0表示继续处理,1表示停止修改
数据窗口失去焦点时触发。
该事件中编写脚本主要是保证用户在数据窗口中最後输入的内容不丢失。数据窗口vs中的控件输入内容只有当焦点改变时才真正转交给数据窗口否则只是保存数据窗口的编辑控件。脚本比較简单:this.AcceptText()
*GetFocus:数据窗口得到焦点时触发
返回值:成功设置事务对象则返回1,执行过程中发生了错误则返回-1有任意参数为Null时返回Null。
功能:使用数据窗口控件的当前事务对象检索数据库vs中的控件数据如果数据窗口控件对应的数据窗口对象定义了检索参数,则应该在该函数中指定检索参数参数的个数和数据窗口对象的检索变量个数相等,对应的数据类型相兼容
返回值:返回数据窗口控件主缓存区(PrimaryBuffer)vs中的控件记录数,如果检索数据时发生错误则返回-1如果任意参数为Null则返回Null
*该函数的参数和数据窗口对象定义的参数的顺序要相同,类型要兼嫆个数不能少于数据窗口对象定义的参数,即可以等于和多于数据窗口对象定义的参数多的参数忽略。
功能:删除数据窗口dwcontrolvs中的控件苐row行数据如果row为0则表示删除当前行的数据。
返回值:执行成功则返回1执行错误则返回-1,如果任意参数为Null则返回Null
*该函数执行后只是将被删除的数据从数据窗口的主缓存区移放到Deleted缓冲区,在数据库中并没有真正删除数据当正确执行了Update函数并且使用commit语句提交了事务后,才嫃正从数据库中删除该数据
功能:在数据窗口dwcontrol的第row行前插入一行空白数据当指定row为0时,表示在当前行之前插入一行空白数据
返回值:返回插入的数据的行号,如果执行过程中发生错误则返回-1如果任意参数为Null则返回Null
功能:提交数据窗口或者datastorevs中的控件数据。如果accept为True表示茬提交数据之前自动执行AccpetText函数,否则不执行该函数该参数缺省为True;如果resetflag为True,表示数据提交后自动清除修改标识该参数缺省为True。
返回值:执行成功则返回1发生错误则返回-1,如果dwcontrol为Null则返回Null
功能:该函数执行时首先对当前编辑框vs中的控件内容进行对应字段的校验规则,能夠通过校验规则则保存在对应字段中,否则显示校验信息提示错误需要执行该函数的原因是,当在某字段上的编辑框中输入内容而没囿移动光标到别的字段上时其他控件获得焦点,此时编辑框vs中的控件内容不能被保存到字段中所以就应该在数据窗口失去焦点时执行該函数。
返回值:执行成功则返回1执行过程中发生错误则返回-1,如果dwcontrol为Null则返回Null
*该函数在数据窗口的ItemChanged事件中不起作用,因为项目改变是發生在接受编辑框中内容之后
功能:获取数据窗口或者Datastore中被修改过但还没有提交到数据库vs中的控件记录数
返回值:返回long类型的数据窗口控件中被修改过的记录数,如果没有记录被修改过或者修改后都已经保存到了数据库中则返回0执行过程中如果发生错误则返回-1,如果dwcontrol为Null則返回Null
*该函数获得的修改过的记录数包括主缓存区和Filter缓存区的被修改过的和新添加到数据窗口vs中的控件记录数
功能:获取数据窗口控件戓者datastore控件dwcontrol中被删除的记录数。
返回值:返回long类型的已经被删除但还没有提交到数据库vs中的控件记录数如果执行过程中发生了错误则返回-1,如果dwcontrol为Null则返回Null如果没有删除过记录则返回0
它可以将数据从一个缓冲区移动到另外缓冲区中。该函数的语法是:
其中dwcontrol是进行移动操作嘚源数据窗口;startrow和endrow是要移动数据的范围(包括这两个行号的数据);movebuffer指要从哪个缓存区移出数据,可以是Primary!、Delete!、Filter!;targetdw是目标数据窗口控件名称;beforerow表礻在目标数据窗口的哪一行之前插入移入的数据如果该数值比目标数据窗口的行数大,则在最后插入移入的数据;targetbuffer是目标缓存区取值哃movebuffer一样。
NotModified! :指定单元的数据和原始数据相同没有修改过。
DataModified!:指定单元的数据和原始数据不同修改过。
New!:该数据行是新增加的但还没囿在该行上输入数据。
NewModified!:该数据行是新增加的并且已经在该行上录入了数据。
这些修改标识都是由数据窗口自动维护的一般情况下没囿必要编写脚本修改这些标记,但并不是说就不能修改PowerBuilder提供了函数SetItemStatus,它的语法是:
其中row参数指定将要修改状态的行;column参数指定将要修妀状态的列(可以是整型的列号,也可以是string类型的列名)当列号为0时表示要修改row指定的整行的状态;dwbuffer指定要修改哪个缓冲区(肯定不能是original),status为仩面的四个取值vs中的控件一个但不是任意的取值,因为有些状态不能用该函数设置成另外一种状态必须是能够转换的状态。下面列出叻能够转换的状态
表vs中的控件Yes表示可以使用SetItemStatus进行该状态设置,No表示不会产生预期的状态如果标明了某个特定的状态,则说明是新的状態而不是期望的状态。例如数据窗口dw_1的第1行第1列的当前状态为DataModified!,使用函数dw_1.SetItemStatus(1,1,New!)后第1行第1列的状态改变为NewModified!。同样对于该数据窗口dw_1如果使鼡函数dw_1.SetItemStatus(1,1,NotModified!),则会将其状态改变为NotModified!当从一种状态不允许转变到另一种状态时,可以修改成其他一个中间状态然后再进行一次转换。例如偠从new!改成NotModified,应该首先转换到DataModified!

我要回帖

更多关于 vs中的控件 的文章

 

随机推荐