1.简述
flash允许用户通过ContextMenu 类的方法和属性,通过鼠标右键添加自定义菜单项(如“放大”和“打印”)的显示。
Flash Player 有三种类型的上下文菜单:标准菜单(当您在 Flash Player
中右键单击时出现)、编辑菜单(当您在可选择或可编辑的文本字段中右键单击时出现)和错误菜单(当 SWF 文件未能加载到 Flash Player
中时出现)。只有标准菜单和编辑菜单才能使用 ContextMenu 类进行修改。AIR 中只显示编辑菜单。
Flash Player 中的上下文菜单添加 15 个自定义项。AIR 中对上下文菜单中的项数没有明确限制。
2.简单例子
/** 控件dg_Users初始化,创建右键菜单
*
*/
private function createMenu_dg_Users():void{
var dg_Users_contextMenu1:ContextMenu=new ContextMenu();//创建右键菜单
dg_Users_contextMenu1.hideBuiltInItems();//隐藏内置菜单
var renameMenuItem:ContextMenuItem=new ContextMenuItem("删除");
dg_Users_contextMenu1.customItems.push(renameMenuItem);
renameMenuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT ,menu_delUserHandler);
dg_Users.contextMenu=dg_Users_contextMenu1;
}
//模块加载完成后初始化控件右键菜单
public function init():void
{
createMenu_dg_Users();
}
/** 销毁控件dg_Users的右键菜单
*
*/
private function destroyMenu_dg_Users():void{
var dg_Users_contextMenu1:ContextMenu=dg_Users.contextMenu;
dg_Users_contextMenu1.removeEventListener(ContextMenuEvent.MENU_SELECT,menu_delUserHandler);
}
/** 控件dg_Users,删除用户事件
*
*/
private function menu_delUserHandler(evt:ContextMenuEvent):void {
var s:StuffModel = dg_Users.selectedItem as StuffModel;
Alert.show(s.zgh);
}
width="100%" height="100%"
fontWeight="normal"
horizontalCenter="0" verticalCenter="0"
>
说明:
1.右键菜单的原理为:新建一个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
阅读(8268) | 评论(0) | 转发(0) |