B作为windows下的一个非常便捷的DB开发工具,有着和windows一样的消息触发机制
PB提供了相应event/function触发机制和触发方式,用户可以根据自己的实际需要选用不同方法。
1. 触发机制 trigger/post
使用trigger会即时触发event/function;
使用post的时候则有所不同,系统会将event/function放在消息队列中,等待排在前面的event/function完成后才会执行,因为这个消息队列实现先进先出。
默认情况下系统以trigger方式触发event/function
什么情况下该用trigger,什么情况下该用post?这里举个例子简单说说。
举例:
当实现某一功能a的时候会触发某个事件/函数(A), 在这个A事件要去触发某个功能b的事件/函数(B)以及功能c的事件/函数C。
当B无需在A之后就能拿到满足的条件,这个时候采用trigger;
但C必须在A完成后才拿到足够的条件,这个时候采用post.
-- 假设
当某sle在获得焦点的时候,如果有权限修改的话就高亮显示,如果没有权的修改的时候就返回。
getFocus事件是获得焦点功能触发的,uf_check()函数能够检查权限,selectText函数能将text高亮显示
-- 分析
uf_check()函数已经获得足够的条件,selectText必须在A完成后才能触发或者不触发。
所以在这里uf_check()可以直接trigger(默认触发方式);selectText()就需要使用post,让其排在getFocus()之后执行
-- 结果
if uf_check() = true then
post selectText(1, len(this.text))
end if
-- 总结
采用哪一种触发机制可以充两方面考虑:
a) 从触发对象考虑。
触发对象需要马上执行的应当采用trigger;
触发对象必须在某个事件/函数之后才能触发的,但必须在这个时候去完成触发动作的,采用post.
b) 从触发源考虑。
充当触发源的事件/函数在某特定功能中属于是功能完成前事件/函数的时候,应当采用post;
如果属于功能完成后的事件/函数,采用trigger.
2. 触发方式
PB也为event/function提供了几种触发的方式
a) obj.triggerEvent(event_id) / obj.postEvent(event_id) -- 只用于事件
这一类触发方式多用于PB提供的系统event, 也可以用于触发不带参数的用户事件(user event). 或许会有疑问,为什么会常用于触发系统事件?
个人理解是这样的,系统事件多为带参数的事件,用obj.triggerEvent(event_id) / obj.postEvent(event_id)可以省去为这些事件准备参数的工作。如果用户事件没有带参数的,也可以使用这类方式去触发。
b) obj.[trigger/post] [event/function] event_id/function_id(args) -- 用于事件/函数
这一类触发方式多用于触发带参数的用户事件/所有函数, 也可以用于不带参数的用户事件/系统事件。
其实这类触发方式还可以这样写
obj.[event/function] [trigger/post] event_id/function_id(args)
我们可以用说明方式来描述这种触发方式:obj.[触发机制] [触发机制] [触发对象](参数). [触发机制]默认的是trigger, [触发机制]默认的是函数, [参数]可选。
也就是说,我们如果不写trigger/post,就会默认采用trigger机制。我们如果没有声明[触发机制],系统会理解[触发对象]为某一实体函数。如果[触发对象]是事件,那么就必须声明[触发机制]为event.
举例说明:现有函数 uf_test(args) 和事件 ue_test(args)。我们可以采用以下方式来触发它们:
obj.trigger event ue_test(args) / obj.post event ue_test(args)
obj.event trigger ue_test(args) / obj.event post ue_test(args)
obj.event ue_test(args) / 没有对应的post方式
obj.trigger function uf_test(args) / obj.post function uf_test(args)
obj.function trigger uf_test(args) / obj.function post uf_test(args)
obj.uf_test(args / obj.post uf_test(args)
c) 动态事件和函数
为什么将动态事件/函数纳入某一种触发方式?其实所谓的动态触发的事件/函数也是某一object的实体事件和函数,但在触发的时候是未知的。
第一种触发方式其实也可以触发未知的事件,但仅限于事件,而且是不带参数的事件。在这个时候就需要有一种更加灵活的触发方式来达到触发未知事件或者函数的目的。
这类的触发方式可以混合第二中使用,但在这里就不详细解析了。以下是动态事件/函数触发方式的举例写法。
obj.dynamic event event_id(args)
obj.dynamic function_id(args)
动态触发的事件/函数可以是实体事件/函数,也可以没有这个事件/函数。如果找不到这个事件/函数,系统会默认跳过,不会报错。这类方式适当运用可以起到很好的效果
Ben
2008/03/14
分享到:
相关推荐
在PowerBuilder(PB)开发环境中,函数和事件是两种重要的编程元素,它们在构建应用程序时起着关键作用。理解它们的区别对于高效编程至关重要。 首先,我们来看**函数**。函数是一段可重用的代码块,它执行特定任务...
根据标题和描述,我们了解到有一个代码实现能够解决这个问题,分别新增了ue_up和ue_down两个事件,这两个事件会在用户按下上箭头或下箭头键时被触发。 在PowerBuilder中,事件处理是通过编写事件处理函数来实现的。...
常见的事件有:`Open`(打开对象时触发)、`Close`(关闭对象时触发)、`Paint`(对象需要重绘时触发)、`Click`(鼠标点击事件)和`KeyPress`(按键事件)。理解并熟练运用这些事件可以实现用户交互和逻辑控制。 3...
描述中的内容简洁,没有提供更具体的信息,但我们可以基于Pb函数这一主题进行深入的探讨。 PowerBuilder是一种流行的、基于事件驱动的可视化应用程序开发工具,主要用于构建企业级的数据库应用。其强大的数据窗口...
6. **事件处理函数**:PB的事件驱动特性使得事件处理函数至关重要,如Click、Change等,它们在用户与界面交互时触发。 7. **文件I/O函数**:如FileOpen、FileWrite、FileClose等,用于读写文件,实现数据的持久化...
4. **事件处理**:PB中的API函数常与事件结合使用,通过`Application.OnError()`来处理错误,`Application.MessageBox()`显示消息框,`Object.TriggerEvent()`触发对象的特定事件。 5. **文件操作API**:PB提供了...
它提供了丰富的函数、事件和方法,使得开发人员可以构建出功能强大的用户界面和数据访问层。下面将详细介绍PB中的关键概念及其相关知识点。 1. **PB函数**: PB提供了大量的内置函数,用于执行各种计算和操作。...
4. **同步与异步操作**:理解何时使用同步(WaitWindow)和异步(PostMessage)的方式来处理Timer事件,以避免阻塞用户界面。 5. **事件触发的顺序与并发**:如果多个Timer同时触发,需要考虑事件处理的顺序和并发...
TriggerEvent 函数的使用场景包括触发缺省事件、触发用户自定义事件、传递信息和接收信息等。 四、关闭窗口函数 关闭窗口函数用于关闭当前窗口。基本语法为: `Close()` 或: `Clos()` 这些函数可以帮助开发者...
在PowerBuilder开发过程中,合理利用各种事件和数据窗口缓冲区对于提高应用程序的性能至关重要。通过遵循上述原则,开发者可以有效地优化应用程序的性能,提升用户的使用体验。同时,对于数据窗口中不同事件的脚本...
PB函数大全中可能还包括了数据类型转换函数,如`ToString`、`ToInteger`、`ToDate`等,这些函数在处理不同类型的数据时非常实用。 除此之外,PB的网络和数据库访问功能也是其强大之处。例如,`HTTPPost`函数用于...
通过SetActionCode函数,开发者能够精确地控制DataWindow的交互逻辑,根据业务需求定制数据处理的方式,提高了应用程序的灵活性和健壮性。在编写PowerBuilder应用时,熟练掌握SetActionCode函数的使用至关重要,因为...
PB事件代码主要涉及控件的状态变更和事件触发机制。在PB中,控件的状态可以通过特定的函数进行读取或修改,而事件则是在特定条件下触发的动作。例如,`pbm_bmgetcheck`用于获取按钮的选中状态,而`pbm_bmsetcheck`则...
在PB中,TIMER对象是一个非常关键的组件,用于在指定的时间间隔触发特定的事件,从而实现定时执行某些任务的功能。"pb多timer事件实例.zip"这个压缩包文件提供了一个示例,展示了如何在PowerBuilder中实现同一个窗口...
### PB8 参考手册:控件的属性、事件和函数 #### 一、概述 在PB8(PowerBuilder 8)开发环境中,控件是构建应用程序用户界面的基础元素。这些控件不仅能够帮助实现数据的输入与输出,还能提供装饰效果及执行其他...
通过上述分析可以看出,“PB日记”文档主要介绍了PB中一个非常实用的用户对象——`uo_splitbar`及其相关的方法和事件处理机制。这个用户对象可以有效地帮助开发者实现窗体的动态分割功能,提高界面的灵活性和用户...
本文将详细介绍PB中的事件ID,帮助初学者更好地理解并利用这些事件来增强应用程序的功能性和用户体验。 #### 二、事件ID分类及详解 ##### 2.1 单选或多选按钮消息 (前缀: pbm_bm) **1.1 pbm_bmgetcheck**: 获取...
Key事件通常发生在用户按下或释放键盘上的键时,PowerBuilder提供了KeyDown事件和KeyUp事件分别对应按键按下和松开。 KeyDown事件是当用户按下键盘上的键时触发的,开发者在该事件处理程序中编写代码来识别用户按下...