
首先要新建一个菜单(例 m_test) file >new >pbobject >menu
然后再你的窗口的 MenuName 属性 选择 m_test 菜单 就可以了
需要注意,child! 和 response! 类型的窗口是没有 MenuName 属性的
目的:在事件中,要求动态创建右键菜单由于菜单是动态创建的,因此也要考虑到菜单的CLICKED事件的动态处理
参考资料:
http://blog.csdn.net/balloonman2002/article/details/28708
问题:
1.如何动态创建菜单? 能不能创建的菜单可被不同的窗口引用? 不用为了某一个窗口事先做一个菜单,那需要菜单的窗口多,而菜单又不一样怎么办?
2.如何执行动态创建的菜单的clicked事件?
过程:
1.创建菜单,打开PB画板,手工创建菜单,不需要创建下级菜单.如图
菜单中的clicked中的gvar.gs_menutag是string型的全局变量,表示菜单被clicked后把该菜单的tag值赋给gvar.gs_menutag
2.在dw_2的rbuttondown事件中生成菜单的过程
gm_popmenu lm_new[]
menu lm_menu
integer li_xh
string ls_text,ls_tag
lm_menu = create menu
do
li_xh ++
choose case li_xh
case 1
ls_text = "插入"
ls_tag = "ue_ins"
case 2
ls_text = "删除"
ls_tag = "ue_del"
case 3
ls_text = "编辑"
ls_tag = "ue_edt"
case 4
ls_text = "刷新"
ls_tag = "ue_cancel"
end choose
lm_menu.item[li_xh] = create gm_popmenu
lm_menu.item[li_xh].text = ls_text
lm_menu.item[li_xh].tag = ls_tag
if li_xh >= 4 then exit
loop until 1 <>1
lm_menu.popmenu( this.x + this.pointerx(), this.y + this.pointery() )
if not isnull(gvar.gs_menutag) or gvar.gs_menutag <>'' then
parent.triggerevent(gvar.gs_menutag)
end if
效果如图:
注:
在窗口中有自定义事件,名称为ue_ins,ue_edt等等
parent.triggerevent(gvar.gs_menutag)一句,其实就是触发对应的事件,达到动态处理菜单的clicked的效果
之前看到的参考资料中是动态创建菜单后,打开不同的窗口,本例中是动态执行某窗口中的不同事件.
如果菜单能像结构或其它对象一样,创建为对象级的,而不是全局级的我想可能要好处理一些吧.
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)