PB 09第9章 用户自定义事件
更新时间:2023-06-01 16:53:01 阅读量: 实用文档 文档下载
- pb是什么意思推荐度:
- 相关推荐
郑阿奇课件,详细讲解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="" connect; if sqlca.sqlcode<>0 then messagebox(“”,“不能连结数据库! ~r~n~r~n请询问系统管理员",stopsign!) return end if open(w_uevent)
郑阿奇课件,详细讲解PB
l 给窗口w_1的open事件编写代码: dw_1.SetTransObject(SQLCA) long row row=dw_1.insertrow(0) dw_1.setrow(row) dw_1.scrolltorow(row) dw_1.setfocus()
9.5用户事件编程实例
l 给增加记录的命令按钮cb_append的clicked事件编写代码:
l
给cb_append定义一个用户事件u_keydown,事件号为pbm_keydown,当焦 点落在该控件上时,按任意键都将
触发u_keydown。给u_keydown编写代码:if keydown(keyenter!) then this.triggerevent(clicked!) end if //如果按了回车键,则触发clicked事件
l 给插入记录的命令按钮cb_insert的clicked事件编写代码:long row row=dw_1.insertrow(dw_1.getrow()) dw_1.setrow(row) dw_1.scrolltorow(row) dw_1.setfocus()
郑阿奇课件,详细讲解PB
9.5用户事件编程实例l 给cb_insert定义一个用户事件u_keydown,事件号为pbm_keydown,当 焦点落在该控件上时,按任意键都将触发u_keydown。给u_keydown编 写代码: if keydown(keyenter!) then //如果按了回车键,则触发clicked事件 cb_insert.event clicked() end if l 给删除记录的命令按钮cb_delete的clicked事件编写代码: dw_1.deleterow(dw_1.getrow()) l 给cb_delete定义一个用户事件u_keydown,事件号为pbm_keydown,当 焦点落在该控件上时,按任意键都将触发u_keydown。给u_keydown编 写代码: if keydown(keyenter!) then //如果按了回车键,则触发clicked事件 this.Event clicked() end if
郑阿奇课件,详细讲解PB
9.5用户事件编程实例l 给显示记录的命令按钮cb_retrieve的clicked事件编写代码: dw_1.retrieve() l 给cb_retrieve定义一个用户事件u_keydown,事件号为pbm_keydown,当焦点落 在该控件上时,按任意键都将触发u_keydown。给u_keydown编写代码:if keydown(keyenter!) then //如果按了回车键,则触发clicked事件 this.triggerevent(clicked!) end if
l 给存盘的命令按钮cb_update的clicked事件编写代码: dw_1.update () l 给cb_update定义一个用户事件u_keydown,事件号为pbm_keydown,当焦点落 在该控件上时,按任意键都将触发u_keydown。给u_keydown编写代码:if keydown(keyenter!) then //如果按了回车键,则触发clicked事件 this.triggerevent(clicked!) end if l 给返回的命令按钮cb_return的clicked事件编写代码: close(parent)
郑阿奇课件,详细讲解PB
9.5用户事件编程实例l 给 cb_return 定 义 一 个 用 户 事 件 u_keydown , 事 件 号 为 pbm_keydown,当焦点落在该控件上时,按任意键都将触发 u_keydown。给u_keydown编写代码: if keydown(keyenter!) then //如果按了回车键,则触发clicked事件 this.triggerevent(clicked!) end if l 给数据窗口dw_1再定义一个用户事件u_keyarrow,事件号为 pbm_dwntabdownout,当焦点落在该控件上时,按向下的箭头 键↓将触发u_keyarrow。给u_keyarrow编写代码: long row row=insertrow(0) //增加一行 setrow(row) //将新行变为当前行 scrolltorow(row)
郑阿奇课件,详细讲解PB
9.5用户事件编程实例l 给数据窗口 dw_1 定义 一个用户事件 u_keyenter , 事 件 号 为 pbm_dwnprocessenter,当焦点落在 该控件上时,按回车键将触发 u_keyenter。给u_keyenter编写代码:int col long row col=getcolumn() row=getrow() if col<4 then//当前列不是最后一列 setcolumn(col+1) //将下一列变为 当前列 else if row<rowcount() then //当前列 是最后一列但当前行不是最后一行 setrow(row+1) //将下一行的第
一列变为当前列 scrolltorow(row+1) setcolumn(1) else //当前列是最后一列且当前行 是最后一行 row=insertrow(0) // 增 加 一 行 setrow(row) //将新行的第一 列变为当前列 scrolltorow(row) setcolumn(1) end if end if return 1
//放弃系统原来的操作
正在阅读:
PB 09第9章 用户自定义事件06-01
浙江省诸暨中学2018-2019学年高一上学期10月阶段性考试 语文试题05-20
财务管理课程设计-参考模板05-18
竞争法学复习答案06-02
2015书法鉴赏尔雅答案04-06
浅析新课标下如何提高高中生的英语写作12-04
2015-2022学年度新人教版六年级数学第二学期期末模拟考试卷04-21
大林煤矿单项工程论证 - 图文12-17
种花记作文300字06-28
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 定义
- 事件
- 用户
- PB
- 小议许渊冲翻译理论
- 综合管理类,行政执法类,专业技术类的区别
- 高中英语写作教学的优化思想构建及实践
- 家校互动平台“微课掌上通”培训
- 库存路径优化的固定分区策略效率分析
- 福州世茂外滩花园第一期会所室内精装修工程
- 任意波形发生器和USB任意波信号发生器价格
- XX乡2012年依法行政工作计划
- 2011年湖南省农村信用社招聘笔试真题
- 台前县污水处理厂工厂计算书
- 基于FPGA和DSP音频接口模块的设计与实现
- 2010年普通高等学校招生全国统一考试(山东语文模拟卷一...
- 智能化施工组织设计
- 中国移动通信集团公司营销战略分析
- 基因诊断和治疗的医学应用
- 高考社科类阅读解题技巧
- (语文A版)二年级语文下册教案 和狼做朋友1
- 油井下的声波无线通信技术的模拟研究
- 高职院校研究型教师培养研究
- 2014-2015年公共基础知识真题及C类真题