本文和大家重点讨论一下Flex右键菜单的用法,FlashPlayer有三种类型的上下文菜单:标准菜单、编辑菜单和错误菜单,只有标准菜单和编辑菜单才能使用ContextMenu类进行修改。AIR中只显示编辑菜单。
Flex右键菜单
1.简述
flash允许用户通过ContextMenu类的方法和属性,通过鼠标右键添加自定义菜单项(如“放大”和“打印”)的显示。
FlashPlayer有三种类型的上下文菜单:标准菜单(当您在FlashPlayer中右键单击时出现)、编辑菜单(当您在可选择或可编辑的文本字段中右键单击时出现)和错误菜单(当SWF文件未能加载到FlashPlayer中时出现)。只有标准菜单和编辑菜单才能使用ContextMenu类进行修改。AIR中只显示编辑菜单。
FlashPlayer中的上下文菜单添加15个自定义项。AIR中对上下文菜单中的项数没有明确限制。
2.简单例子
/**控件dg_Users初始化,创建Flex右键菜单
*
*/
- privatefunctioncreateMenu_dg_Users():void{
- vardg_Users_contextMenu1:ContextMenu=newContextMenu();//创建右键菜单
- dg_Users_contextMenu1.hideBuiltInItems();//隐藏内置菜单
- varrenameMenuItem:ContextMenuItem=newContextMenuItem("删除");
- dg_Users_contextMenu1.customItems.push(renameMenuItem);
- renameMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,menu_delUserHandler);
- dg_Users.contextMenu=dg_Users_contextMenu1;
- }
//模块加载完成后初始化控件Flex右键菜单
- publicfunctioninit():void
- {
- createMenu_dg_Users();
- }
/**销毁控件dg_Users的Flex右键菜单
*
*/
- privatefunctiondestroyMenu_dg_Users():void{
- vardg_Users_contextMenu1:ContextMenu=dg_Users.contextMenu;
- dg_Users_contextMenu1.removeEventListener(ContextMenuEvent.MENU_SELECT,menu_delUserHandler);
- }
/**控件dg_Users,删除用户事件
*
*/
- privatefunctionmenu_delUserHandler(evt:ContextMenuEvent):void{
- vars:StuffModel=dg_Users.selectedItemasStuffModel;
- Alert.show(s.zgh);
- }
<!--显示部门和用户信息-->
- <mx:Paneltitlemx:Paneltitle="用户列表"width="80%"height="100%">
- <mx:DataGrididmx:DataGridid="dg_Users"dataProvider="{usersList}"
- width="100%"height="100%"
- fontWeight="normal"
- horizontalCenter="0"verticalCenter="0"
- >
- <mx:columns>
- <mx:DataGridColumnheaderTextmx:DataGridColumnheaderText="部门名称"dataField="yxsmc"/>
- <mx:DataGridColumnheaderTextmx:DataGridColumnheaderText="姓名"dataField="xm"/>
- </mx:columns>
- </mx:DataGrid>
- </mx:Panel>
说明:
1.Flex右键菜单的原理为:新建一个ContextMenu类;修改ContextMenu对象的item属性;将这个对象赋给一个控件。dg_Users.contextMenu=dg_Users_contextMenu1;这句话可以保证新建立的菜单只应用于dg_Users这个控件。所以尽管你创建了多个右键菜单,也不用担心菜单会混乱。
2.待解决的问题
由于我们用到了事件监听renameMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,menu_delUserHandler);所以最好在这个模块不用时,将这个监听给去掉,即调用方法destroyMenu_dg_Users(),但是这个方法何时调用,我查了一些资料,没有发现相关说明和资料。
如果不去掉这个监听,如果系统产生了过多的监听,不知道是否会引发什么问题?
参考文献:
1.Flex右键重命名的例子.http://blog.csdn.net/newskl/archive/2009/09/11/4538798.aspx
2.FLEX在某控件上创建右键实例学习.http://www.cnblogs.com/xxcainiao/archive/2008/08/05/1261246.html
【编辑推荐】