ehxz 发表于 2010-7-1 00:13:49

PB培训、事件的区别和应用

1、窗口对象
Open与Activate
      它们都可以在窗口打开时发生,窗口打开则必然激活(当前这个窗口起作用),窗口可以打开多个,但是起作用
的只有一个,因此窗口激活时,可能已经处于打开状态了,激活的事件比打开的范围大,并可以重复触发,而打开则
仅触发一次
Close与Deactivate\Closequery
      这三个事件的共同点:窗口关闭都触发;差异是执行closequery的处理程序时pb会检查Message.ReturnValue
的值如果=1则不能关闭窗口,关闭窗口动作失败。Deactivate事件是在关闭窗口和窗口由激活状态变为非激活状态时
触发。因此Deactivate范围比Close和Closequery都宽
Clicked与Mousedown事件的差异
      单击鼠标左键(按下后马上释放)包含按下鼠标的左键(仅按下鼠标左键),所以不管单击鼠标左键还是按下鼠标的
左键都会触发mousedown,但要注意到按下的鼠标左键迟早要放开的,只要一放开,clicked就会触发,那么区别在于
mousedown发生在鼠标按下时,clicked发生在鼠标放开时,仅仅是时间上差异
MouseUp\Clicked\doubleclicked
      MouseUp事件与Clicked类似,他们都是在不包含有效对象的区域当鼠标左键放开时触发,这两个事件要求鼠标
按下时在窗口上不包含有效对象的区域。如果按下在有效对象的区域则这两个事件不会发生。正常发生的顺序按时间:
双击鼠标左键
      单击左键1[左键按下(mousedown事件发生)-左键放开(Clicked发生mouseup发生)]
      单击左键2[左键按下(mousedown事件发生Doubleclicked发生)-左键放开(Clicked发生mouseup发生)]
特别说明:
在windows中,控件被创建时必须指明用来承载控件的窗口对象,所以可以肯定的是窗口的创建过程肯定在所有准备使用它来承载的控件之前完成创建;
细心的话你会注意到控件的Constructor事件会在窗口的Open之前执行,事情就是这样子的,那是因为窗口Open事件并不是窗口的Constructor事件,窗口在完成自己的创建后,再把Control[]中的对象一一创建,在这时控件的Constructor事件会被触发,在所有的控件成功创建完毕后窗口才会触发Open事件。释放过程正好跟创建顺序相反;在窗口收到WM_CLOSE消息前会先收到WM_CLOSEQUERY消息,来给开发人员一个阻止WM_CLOSE发生的时机;在Powerbuilder中WM_CLOSE <=> Event Close() ,WM_CLOSEQUERY <=>Event CloseQuery()。所以在窗口关闭时首先触发自己的CloseQuery事件,在CloseQuery同意后触发Close事件,之后才会把Control[]中的控件一一释放,这时各个控件的destructor事件会被触发。等所有的控件被释放后,再触发窗口的Destructor。完成释放过程。
2、数据窗口对象
Editchanged\itemchanged
      Editchanged:修改数据窗口时,当字段为下拉选择类型并且不可编辑时,不触发该事件,其他可编辑时触发
      Itemchanged:在Editchanged发生后或者修改区域失去焦点回车或者焦点变化时触发,不论Editchanged是否触发。
      也就是说Editchanged在编辑时先触发;Itemchanged是只要有变化就触发。Editchanged可用于对输入值
及时判断;Itemchanged可综合判断并决定是否接受结果。默认0接受数据;1不接受并且焦点不变;2不接受允许焦点改变
3、单行编辑器sle或者其他可编辑控件
Modify、自定义事件
      本来正常情况下修改编辑控件的值按回车会触发modify事件,只要值不变重复按回车是无效的。如果需要支持回车就执行
某段处理而不关心是否modify,需要自定义按键事件ID:pbm_keydown并判断是回车键,可以满足重复动作;但需要增量查询时
需要自定义事件ID:pbm_enchange,不论什么键按下都会触发,这样就补充了modify的不足之处。
4、下拉列表ddlb
Selectionchanged与modified
记住下拉列表尽量不要排序否则会影响到index的值与显示顺序不一致从而获取的text也不对
Selectionchanged触发后会激活modified,modified在Selectionchanged之后发生,但是几乎是同时的。
5、TreeView事件
Itemcollapsed和Itemcollapsing:在TV某一层关闭时Itemcollapsing触发;在关闭后Itemcollapsed触发。
ItemExpanded和ItemExpanding:在TV某一层打开时ItemExpanding触发;在打开后ItemExpanded触发。
6、TAB控件
Selectionchanged:在控件创建后会自动触发该事件!,如果该事件中有代码,注意第一次打开窗口时的处理。
注意判断选中哪页用index 或者判断tab_1.Selectedtab,推荐由后者。
7、菜单事件
Clicked和Selected:Clicked在菜单项单击左键触发(用于执行动作),Selected在光标进入菜单项时触发(用于显示帮助或者其他提示)
8、自定义事件的特殊说明
Event ID 含义 内容浅析
单选或多选按钮消息(前缀:pbm_bm) ;单选或多选按钮通知消息(前缀:pbm_bn)
通用对话框消息(前缀:pbm_cb) ;通用对话框通知消息(前缀:pbm_cbn)
数据窗口消息(前缀:pbm_dw) ;数据窗口通知消息(前缀:pbm_dwn)
pbm_dwnkey 有键被按下。使用KeyDown()处理键盘值。
pbm_dwnprocessenter 回车键被按下。
动态数据交换(DDE)消息(前缀:pbm_dde)
编辑器控件消息(前缀:pbm_em) ;编辑控件通知消息(前缀:pbm_en)
pbm_enchange 编辑器控件中的文本发生改变。
列表框消息(前缀:pbm_lb) ;列表框通知消息(前缀:pbm_en)
窗口消息(前缀:pbm_)
pbm_keydown 键盘上的一个键被按下。
pbm_keyup 键盘上的一个键被释放。
pbm_syskeydown 用户按下某键的同时按下了<ALT>键。
pbm_syskeyup 用户释放了<ALT>组合键。
--------------------------------------------------
下面说明按键事件的区别
      pbm_keydown在窗口上用而pbm_dwnkey在数据窗口上用,用反了则无效。
      DW中pbm_dwnprocessenter回车触发;pbm_dwnkey按键触发,需要判断Keydown()。

w421947545 发表于 2010-7-2 11:34:46

谢谢版主,以后可以多发一些。谢谢。
页: [1]
查看完整版本: PB培训、事件的区别和应用

免责声明:
本站所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Admin@SybaseBbs.com