flash.ui
public final class ContextMenu
继承ContextMenu Inheritance NativeMenu Inheritance EventDispatcher Inheritance Object

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

通过 ContextMenu 类,可以控制上下文菜单中显示的项。

在 Flash Player 中,用户可以通过右键单击(Windows 或 Linux)或按住 Ctrl 并单击 (Macintosh) Flash Player 打开上下文菜单。使用 ContextMenu 类的方法和属性可以添加自定义菜单项、控制内置上下文菜单项(如“放大”和“打印”)的显示或者创建菜单的副本。AIR 中没有内置项,也没有标准上下文菜单。

若要向 ContextMenu 对象中添加新项,可以创建一个 ContextMenuItem 对象,然后将该对象添加到 ContextMenu.customItems 数组。 有关创建上下文菜单项的详细信息,请参阅 ContextMenuItem 类条目。

Flash Player 有三种类型的上下文菜单:标准菜单(当您在 Flash Player 中右键单击时出现)、编辑菜单(当您在可选择或可编辑的文本字段中右键单击时出现)和错误菜单(当 SWF 文件未能加载到 Flash Player 中时出现)。只有标准菜单和编辑菜单才能使用 ContextMenu 类进行修改。AIR 中只显示编辑菜单。

自定义菜单项始终显示在 Flash Player 上下文菜单的顶部,并位于所有可见的内置菜单项之上;内置菜单项和自定义菜单项之间由一个分隔条加以分隔。您不能从上下文菜单中删除“设置”菜单项。在 Flash 中,必须有“设置”菜单项,以便用户能够访问影响其计算机上的隐私和存储的设置。您也不能删除“关于”菜单项,必须具有这个菜单项,以便用户能够了解正在使用的 Flash Player 的版本。(AIR 中不使用内置的“设置”和“关于”菜单项。)

最多可以向 Flash Player 中的上下文菜单添加 15 个自定义项。AIR 中对上下文菜单中的项数没有明确限制。

必须在使用 ContextMenu() 构造函数创建 ContextMenu 对象后才能调用其方法。

查看示例

另请参见

ContextMenuItem 类
flash.display.InteractiveObject.contextMenu


公共属性
 属性定义方
  builtInItems : ContextMenuBuiltInItems
ContextMenuBuiltInItems 类具有以下属性的实例:forwardAndBack、loop、play、print、quality、rewind、save 和 zoom。
ContextMenu
  clipboardItems : ContextMenuClipboardItems
ContextMenuClipboardItems 类具有以下属性的实例:cut、copy、paste、delete 和 selectAll。
ContextMenu
  clipboardMenu : Boolean
指定是否应使用剪贴板菜单。
ContextMenu
 Inheritedconstructor : Object
对类对象或给定对象实例的构造函数的引用。
Object
  customItems : Array
ContextMenuItem 对象的数组。
ContextMenu
  AIR-only items : Array
此菜单中自定义项的数组。
ContextMenu
  link : URLRequest
链接的 URLRequest。
ContextMenu
  AIR-only numItems : int
[只读 (read-only)] 此菜单中的项数。
ContextMenu
 InheritedAIR-only parent : NativeMenu
[只读 (read-only)] 父菜单。
NativeMenu
 Inheritedprototype : Object
[静态] 对类或函数对象的原型对象的引用。
Object
公共方法
 方法定义方
  
创建 ContextMenu 对象。
ContextMenu
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。
EventDispatcher
 Inherited
在菜单底部添加一个菜单项。
NativeMenu
  
在菜单底部添加一个菜单项。
ContextMenu
 Inherited
通过插入新菜单项,在菜单中添加子菜单。
NativeMenu
 Inherited
通过在指定位置插入新菜单项,在菜单中添加子菜单。
NativeMenu
  
创建菜单和所有项目的副本。
ContextMenu
  
报告此菜单是否包含指定的菜单项。
ContextMenu
 Inherited
将事件调度到事件流中。
EventDispatcher
  
AIR-only display(stage:Stage, stageX:Number, stageY:Number):void
在指定位置弹出此菜单。
ContextMenu
  
获取指定索引处的菜单项。
ContextMenu
 Inherited
获取具有指定名称的菜单项。
NativeMenu
  
获取指定项目的位置。
ContextMenu
 Inherited
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。
EventDispatcher
 Inherited
指示对象是否已经定义了指定的属性。
Object
  
隐藏指定的 ContextMenu 对象中的所有内置菜单项(“设置”除外)。
ContextMenu
 Inherited
指示 Object 类的实例是否在指定为参数的对象的原型链中。
Object
 Inherited
指示指定的属性是否存在、是否可枚举。
Object
  
从菜单中删除所有项目。
ContextMenu
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
从 EventDispatcher 对象中删除侦听器。
EventDispatcher
 Inherited
删除指定的菜单项。
NativeMenu
  
删除并返回指定索引处的菜单项。
ContextMenu
 Inherited
将菜单项移到指定位置。
NativeMenu
 Inherited
设置循环操作动态属性的可用性。
Object
 Inherited
返回指定对象的字符串表示形式。
Object
 Inherited
返回指定对象的原始值。
Object
 Inherited
检查是否用此 EventDispatcher 对象或其任何始祖为指定事件类型注册了事件侦听器。
EventDispatcher
事件
 事件 摘要 定义方
 Inherited[广播事件] Flash Player 或 AIR 应用程序获得操作系统焦点并变为活动状态时将调度此事件。EventDispatcher
 Inherited[广播事件] Flash Player 或 AIR 应用程序失去操作系统焦点并变为非活动状态时将调度此事件。EventDispatcher
 Inherited在显示菜单的前一刻由此 NativeMenu 对象调度。NativeMenu
  在用户首次生成上下文菜单但尚未显示上下文菜单内容时调度。ContextMenu
 Inherited在选择其菜单项之一或其后代子菜单之一中的项目时由此 NativeMenu 对象调度。NativeMenu
属性详细信息
builtInItems属性
builtInItems:ContextMenuBuiltInItems  [读写]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

ContextMenuBuiltInItems 类具有以下属性的实例:forwardAndBackloopplayprintqualityrewindsavezoom。将这些属性设置为 false 将删除指定的 ContextMenu 对象中的对应菜单项。这些属性是可枚举的属性,默认情况下设置为 true

注意:在 AIR 中,上下文菜单没有内置项。



实现
    public function get builtInItems():ContextMenuBuiltInItems
    public function set builtInItems(value:ContextMenuBuiltInItems):void

另请参见

clipboardItems属性 
clipboardItems:ContextMenuClipboardItems  [读写]

语言版本: ActionScript 3.0
运行时版本: Flash Player 10, AIR 1.5

ContextMenuClipboardItems 类具有以下属性的实例:cutcopypastedeleteselectAll。若将其中一个属性设置为 false,则禁用剪贴板菜单中的相应项。



实现
    public function get clipboardItems():ContextMenuClipboardItems
    public function set clipboardItems(value:ContextMenuClipboardItems):void

另请参见


示例
下面的示例演示 ContextMenu 对象的 clipboardItems 属性的用法。创建一个 ContextMenu 并将其 clipboardMenu 属性设置为 true。添加 MENU_SELECT 事件的事件处理程序(通常是右键单击),并将菜单分配给一个显示对象。在这种情况下,将启用 copypaste 菜单。
package {
    import flash.ui.ContextMenu;
    import flash.events.ContextMenuEvent;
    import flash.display.Sprite;

    public class ContextMenuClipboardItemsExample extends Sprite {
        public function ContextMenuClipboardItemsExample() {
            var myContextMenu:ContextMenu = new ContextMenu();
            myContextMenu.clipboardMenu = true;
            myContextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, menuSelectHandler);
            var rc:Sprite = new Sprite();
            rc.graphics.beginFill(0xDDDDDD);
            rc.graphics.drawRect(0,0,100,30);
            addChild(rc);
            rc.contextMenu = myContextMenu;
        }
        function menuSelectHandler(event:ContextMenuEvent):void {
            event.contextMenuOwner.contextMenu.clipboardItems.copy = true;
            event.contextMenuOwner.contextMenu.clipboardItems.paste = true;
        }
    }
}
clipboardMenu属性 
clipboardMenu:Boolean  [读写]

语言版本: ActionScript 3.0
运行时版本: Flash Player 10, AIR 1.5

指定是否应使用剪贴板菜单。如果此值为 true,则 clipboardItems 属性将确定在剪贴板菜单上启用或禁用哪些项。

如果 link 属性不为 null,将忽略此 clipBoardMenu 属性。



实现
    public function get clipboardMenu():Boolean
    public function set clipboardMenu(value:Boolean):void
customItems属性 
customItems:Array  [读写]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

ContextMenuItem 对象的数组。数组中的每个对象表示您已经定义的上下文菜单项。使用此属性可添加、删除或修改这些自定义菜单项。

若要添加新的菜单项,请创建一个 ContextMenuItem 对象,然后将其添加到 customItems 数组(例如使用 Array.push())。有关创建菜单项的详细信息,请参阅 ContextMenuItem 类条目。



实现
    public function get customItems():Array
    public function set customItems(value:Array):void

另请参见

AIR-only items属性 
items:Array  [读写]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0

此菜单中自定义项的数组。

使用此属性等同于使用 customItems 属性。数组按显示顺序排序。



实现
    public function get items():Array
    public function set items(value:Array):void
link属性 
link:URLRequest  [读写]

语言版本: ActionScript 3.0
运行时版本: Flash Player 10, AIR 1.5

链接的 URLRequest。如果此属性为 null,则显示标准上下文菜单。如果此属性不为 null,则显示链接上下文菜单,并对指定的 URL 执行操作。

如果指定了 link,则将忽略 clipboardMenu 属性。

默认值为 null



实现
    public function get link():URLRequest
    public function set link(value:URLRequest):void
AIR-only numItems属性 
numItems:int  [只读 (read-only)]

语言版本: ActionScript 3.0
运行时版本: AIR 1.0

此菜单中的项数。



实现
    public function get numItems():int
构造函数详细信息
ContextMenu()构造函数
public function ContextMenu()

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

创建 ContextMenu 对象。

另请参见

方法详细信息
AIR-only addItemAt()方法
override public function addItemAt(item:NativeMenuItem, index:int):NativeMenuItem

语言版本: ActionScript 3.0
运行时版本: AIR 1.0

在菜单底部添加一个菜单项。

创建上下文菜单时,可以添加 NativeMenuItem 或 ContextMenuItem 对象。但建议在上下文菜单中仅使用一种对象,这样菜单中的所有项目都具有相同的属性。

参数

item:NativeMenuItem — 要在菜单底部添加的项。
 
index:int

返回
NativeMenuItem

引发
ArgumentError — 如果 itemnull
 
ArgumentError — 如果 item 为其它菜单的成员。
clone()方法 
override public function clone():NativeMenu

创建菜单和所有项目的副本。

返回
NativeMenu
AIR-only containsItem()方法 
override public function containsItem(item:NativeMenuItem):Boolean

语言版本: ActionScript 3.0
运行时版本: AIR 1.0

报告此菜单是否包含指定的菜单项。

参数

item:NativeMenuItem — 要查找的项目。

返回
Boolean — 如果 item 位于此菜单中,则为 true.
AIR-only display()方法 
override public function display(stage:Stage, stageX:Number, stageY:Number):void

运行时版本: AIR 1.0

在指定位置弹出此菜单。

注意:Flash Player 中不支持使用此方法。

参数

stage:Stage — 要在其上显示此菜单的 Stage 对象。
 
stageX:Number — 相对于要显示此菜单的舞台原点的水平像素数。
 
stageY:Number — 相对于要显示此菜单的舞台原点的垂直像素数。

AIR-only getItemAt()方法 
override public function getItemAt(index:int):NativeMenuItem

语言版本: ActionScript 3.0
运行时版本: AIR 1.0

获取指定索引处的菜单项。

参数

index:int — 要返回的项目的位置(从 0 开始)。

返回
NativeMenuItem — 菜单中指定位置处的项目。

引发
RangeError — 如果 index 位于此菜单的 items 数组的范围以外。
AIR-only getItemIndex()方法 
override public function getItemIndex(item:NativeMenuItem):int

语言版本: ActionScript 3.0
运行时版本: AIR 1.0

获取指定项目的位置。

参数

item:NativeMenuItem — 要查找的 NativeMenuItem 对象.

返回
int — 所指定项目在此菜单中的位置(从 0 开始),如果项目不在此菜单中,则为 null
hideBuiltInItems()方法 
public function hideBuiltInItems():void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

隐藏指定的 ContextMenu 对象中的所有内置菜单项(“设置”除外)。如果 Flash Player 的调试器版本正在运行,则会显示“调试”菜单项,尽管对于未启用远程调试功能的 SWF 文件该菜单项会变暗。

此方法仅隐藏标准上下文菜单中显示的菜单项;它不影响编辑菜单和错误菜单中显示的菜单项。

此方法的工作方式是将 my_cm.builtInItems 的所有布尔成员设置为 false。可以有选择地使内置菜单项可见,方法是将其在 my_cm.builtInItems 中的对应成员设置为 true

注意:在 AIR 中,上下文菜单没有内置项。调用此方法将无效。

另请参见

removeAllItems()方法 
override public function removeAllItems():void

从菜单中删除所有项目。

removeItemAt()方法 
override public function removeItemAt(index:int):NativeMenuItem

删除并返回指定索引处的菜单项。

参数

index:int — 要删除的项目的位置(从 0 开始)。

返回
NativeMenuItem — 已删除的 NativeMenuItem 对象。
事件详细信息
menuSelect 事件
事件对象类型: flash.events.ContextMenuEvent
属性 ContextMenuEvent.type = flash.events.ContextMenuEvent.MENU_SELECT

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

在用户首次生成上下文菜单但尚未显示上下文菜单内容时调度。这将允许您的程序在显示菜单之前修改上下文菜单项集。用户通过右键单击指针设备来生成上下文菜单。

定义 menuSelect 事件对象的 type 属性值。

此事件具有以下属性:

属性
bubbles false
cancelable false;没有要取消的默认行为。
contextMenuOwner 菜单附加到的显示列表对象。
currentTarget 当前正在使用某个事件侦听器处理 Event 对象的对象。
mouseTarget 用户右键单击以显示上下文菜单的显示列表对象。
target 将要显示的 ContextMenu 对象。target 不一定是显示列表中注册此事件侦听器的对象。请使用 currentTarget 属性来访问显示列表中当前正在处理此事件的对象。
示例 如何使用示例
ContextMenuExample.as

下例使用 ContextMenuExample 类从舞台中删除默认上下文菜单项,并添加一个新的菜单项,如果单击该菜单项,将可更改舞台上正方形的颜色。这是由以下步骤完成的:
  1. 声明 myContextMenu 属性,然后将其赋给新的 ContextMenu 对象,并声明 Sprite 类型的 redRectangle 属性。
  2. 调用 removeDefaultItems() 方法,该方法将删除所有内置的上下文菜单项(“打印”除外)。
  3. 调用 addCustomMenuItems() 方法,该方法使用数组的 push() 方法将称为 Red to Black 菜单选择的菜单项放入 defaultItems 数组。将 menuItemSelect 事件侦听器添加到 ContextMenuItem 对象中,关联的方法名为 menuItemSelectHandler()。当访问上下文菜单并选择 Red to Black 时,此方法使用 trace() 输出一些语句。同时,红色正方形被删除并替换为一个黑色正方形。
  4. 添加类型 menuSelect 的事件侦听器以及关联的方法 menuSelectHandler。每次打开上下文菜单中的项时,此方法只使用 trace() 输出三个语句。
  5. 然后,addChildren() 将绘制一个红色正方形并将其添加到显示列表,该红色正方形将立即显示在列表中。
  6. 最后,myContextMenu 赋给 redRectangle sprite 的上下文菜单,以便仅当鼠标移动到该正方形上方时才显示自定义上下文菜单。
package {
    import flash.ui.ContextMenu;
    import flash.ui.ContextMenuItem;
    import flash.ui.ContextMenuBuiltInItems;
    import flash.events.ContextMenuEvent;
    import flash.display.Sprite;
    import flash.display.Shape;
    import flash.text.TextField;

    public class ContextMenuExample extends Sprite {
        private var myContextMenu:ContextMenu;
        private var menuLabel:String = "Reverse Colors";
        private var textLabel:String = "Right Click";
        private var redRectangle:Sprite;
        private var label:TextField;
        private var size:uint = 100;
        private var black:uint = 0x000000;
        private var red:uint = 0xFF0000;

        public function ContextMenuExample() {
            myContextMenu = new ContextMenu();
            removeDefaultItems();
            addCustomMenuItems();
            myContextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, menuSelectHandler);

            addChildren();
            redRectangle.contextMenu = myContextMenu;
        }

        private function addChildren():void {
            redRectangle = new Sprite();
            redRectangle.graphics.beginFill(red);
            redRectangle.graphics.drawRect(0, 0, size, size);
            addChild(redRectangle);
            redRectangle.x = size;
            redRectangle.y = size;
            label = createLabel();
            redRectangle.addChild(label);
        }

        private function removeDefaultItems():void {
            myContextMenu.hideBuiltInItems();
            var defaultItems:ContextMenuBuiltInItems = myContextMenu.builtInItems;
            defaultItems.print = true;
        }

        private function addCustomMenuItems():void {
            var item:ContextMenuItem = new ContextMenuItem(menuLabel);
            myContextMenu.customItems.push(item);
            item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemSelectHandler);
        }

        private function menuSelectHandler(event:ContextMenuEvent):void {
            trace("menuSelectHandler: " + event);
        }

        private function menuItemSelectHandler(event:ContextMenuEvent):void {
            trace("menuItemSelectHandler: " + event);
            var textColor:uint = (label.textColor == black) ? red : black;
            var bgColor:uint = (label.textColor == black) ? black : red;
            redRectangle.graphics.clear();
            redRectangle.graphics.beginFill(bgColor);
            redRectangle.graphics.drawRect(0, 0, size, size);
            label.textColor = textColor;
        }

        private function createLabel():TextField {
            var txtField:TextField = new TextField();
            txtField.text = textLabel;
            return txtField;
        }
    }
}