郑阿奇课件,详细讲解PB
第9章 用户自定义事件应用程序需要某种特殊控制、需要在特定情况下执行某段代码、 对象间需要灵活的通讯,可以根据需要定义自己的事件来完成这 些特殊需求,这类事件就称用户事件。 在下列情况下经常使用用户事件: (1) 解决对象与窗口之间的通讯问题。用户事件可以通过参数进行 信息传递。 (2) 响应特殊操作,这些操作没有相应的PowerBuilder预定义事件。 (3) 支持用户通过多种方式完成同一个功能。
郑阿奇课件,详细讲解PB
第9章 用户自定义事件9.1 定义用户事件 9.2 用户事件号 9.3 删除用户事件 9.4 触发用户事件 9.5 用户事件编程实例
郑阿奇课件,详细讲解PB
9.1定义用户事件定义用户事件, 首先要选定好所 在的对象,然后 打开Script窗口, 再选择New Event, 如图9.1,将出现 事件定义窗口, 如图9.2。1.选择对象 2.选择New Event
图9.1定义用户事件1.输入用户事件 名
2.选择用户事件 号
图9.2定义用户事件属性
郑阿奇课件,详细讲解PB
9.1定义用户事件可以为用户事件定义参数及返回值。在Return Type中选择返回值类型, 在Argument Type中选择参数类型,在Argment Name中输入参数名。在 图9.2中,右击,弹出一个菜单:
定义带参数的用户事件,其事件 号必须选None,若选择其它的 事件号,则定义的参数无效。 定义用户事件时,选择的事件标 识应与所在的对象吻合,否则用 户事件不起作用。用户事件定义 好后,可以象对象的其它标准事 件一样编程和使用。图9.3 增加、插入、删除参数
郑阿奇课件,详细讲解PB
9.2用户事件号表9.1列出了部分常用事件标识的前缀及其含义
郑阿奇课件,详细讲解PB
9.3删除用户事件定义的用户事件号及名称不能 更改,只能删除。在该事件的 代码编辑窗口,点击鼠标右键, 将 弹出一 个菜 单 ,选 择Delete Event,将删除该事件。 注意: 对该删除操作不作提醒,一 经选择Delete Event,就立刻删 除,因此若事件已有代码,则 应小心。只有用户事件才能删 除。
图9.4删除用户事件
郑阿奇课件,详细讲解PB
9.4触发用户事件定义了用户事件后,就需设计事件处理程序,没有事件处理程序, 即使发生了该事件,应用程序也不做任何处理。如果选用的事件号 对应于某个Window消息,则事件何时发生,将由系统决定。但若 选用的事件号为pbm_custom01到pbm_custom75,即不对应于任 何Windows消息,则必须编程时使用代码触发该事件。 触发用户事件有三种格式,前两种是: object_name.TriggerEvent(event_name) object_name.PostEvent(event_name) 其中:object_name为对象名;event_name为事件名,对系统事件而 言,是枚举类型,对用户自定义事件而言,是一个字符串。 例如: w_1.TriggerEvent(Clicked!) //触发窗口w_1的鼠标单击事件 w_1.TriggerEvent(“u_key”) // 触 发 窗 口 w_1 的 用 户 自 定 义 事 件 u_key TriggerE
vent和PostEvent的区别在于:TriggerEvent立即触发该事 件,而PostEvent则把事件排在事件队列的末尾。
郑阿奇课件,详细讲解PB
9.4触发用户事件在定义用户事件时,可以定义事件参数。但TriggerEvent和PostEvent不能带事件 参数(但可以给Message传送用户消息),因此需用下面的格式触发:object_name. [Trigger | Post] [Static | Dynamic] EVENT event_name( [para_list] )
其中: l object_name是事件所属对象的对象名 l Trigger和Post选项只能选择一个,缺省时为Trigger。Trigger表示立即执行指定事 件的事件处理程序,然后再执行该语句后面的代码;Post表示将该事件放置到对 象的事件队列中,然后继续执行该语句后面的代码。 l Static和Dynamic选项只能选择一个,缺省时为Static。Static表示编译时指定事件 必须存在,系统要进行返回值类型检查;Dynamic表示编译时指定事件可以不存 在,系统把返回值类型检查推迟到应用程序运行时进行。 l EVENT是关键字,表示后面的event_name是个事件名而不是函数。 l para_tlist是事件参数列表,多个参数时参数之间用逗号分隔。 如果用户事件定义了参数,只能使用上述格式触发事件,而不能使用函数 TriggerEvent()或PostEvent ()。 例如: cb_1.EVENT Clicked() //触发控件cb_1的鼠标单击事件 w_1.Event u_display(4,“math”) //触发窗口w_1的用户自定义事件u_dispaly, 它带两个参数。只能用这种方法触发
郑阿奇课件,详细讲解PB
9.5用户事件编程实例希望当焦点落在命令按钮上时,按回车键能代替鼠标。在数据窗口 中,按回车键可以跳到下一个输入项,而不是下一行。当在最后一行 的最后一列按回车键时,将增加一个空行。在最后一行按向下的箭头 键↓时,也增加一个空行。
图9.5用户事件编程实例
郑阿奇课件,详细讲解PB
9.5用户事件编程实例为实现图9.5的功能,可用自定义事件。 (1)创建一个student.pbl,其中ApplicationObject为stu,再建一个窗口w_uevent, 窗口上的控件分别为dw_1、cb_append、cb_insert、cb_delete、cb_retrieve、 cb_update、cb_return。 (2) 给应用对象stu的open事件编写代码:SQLCA.AutoCommit =True sqlca.DBMS= "odbc" sqlca.database= "student " sqlca.dbpass="dba" erid="sql " sqlca.servername = "" sqlca.dbparm = "Connectstring='DSN=student;UID=dba;PWD=sql;'" sqlca.logid=" " sqlca.logpass="" co …… 此处隐藏:3182字,全部文档内容请下载后查看。喜欢就下载吧 ……