包 | flash.ui |
类 | public final class ContextMenu |
继承 | ContextMenu NativeMenu EventDispatcher Object |
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
在 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 对象后才能调用其方法。
另请参见
属性 | 定义方 | ||
---|---|---|---|
builtInItems : ContextMenuBuiltInItems ContextMenuBuiltInItems 类具有以下属性的实例:forwardAndBack、loop、play、print、quality、rewind、save 和 zoom。 | ContextMenu | ||
clipboardItems : ContextMenuClipboardItems ContextMenuClipboardItems 类具有以下属性的实例:cut、copy、paste、delete 和 selectAll。 | ContextMenu | ||
clipboardMenu : Boolean 指定是否应使用剪贴板菜单。 | ContextMenu | ||
constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | ||
customItems : Array ContextMenuItem 对象的数组。 | ContextMenu | ||
items : Array 此菜单中自定义项的数组。 | ContextMenu | ||
link : URLRequest 链接的 URLRequest。 | ContextMenu | ||
numItems : int [只读 (read-only)] 此菜单中的项数。 | ContextMenu | ||
parent : NativeMenu [只读 (read-only)] 父菜单。 | NativeMenu | ||
prototype : Object [静态]
对类或函数对象的原型对象的引用。 | Object |
方法 | 定义方 | ||
---|---|---|---|
创建 ContextMenu 对象。 | ContextMenu | ||
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void 使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。 | EventDispatcher | ||
在菜单底部添加一个菜单项。 | NativeMenu | ||
在菜单底部添加一个菜单项。 | ContextMenu | ||
通过插入新菜单项,在菜单中添加子菜单。 | NativeMenu | ||
通过在指定位置插入新菜单项,在菜单中添加子菜单。 | NativeMenu | ||
创建菜单和所有项目的副本。 | ContextMenu | ||
报告此菜单是否包含指定的菜单项。 | ContextMenu | ||
将事件调度到事件流中。 | EventDispatcher | ||
在指定位置弹出此菜单。 | ContextMenu | ||
获取指定索引处的菜单项。 | ContextMenu | ||
获取具有指定名称的菜单项。 | NativeMenu | ||
获取指定项目的位置。 | ContextMenu | ||
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。 | EventDispatcher | ||
指示对象是否已经定义了指定的属性。 | Object | ||
隐藏指定的 ContextMenu 对象中的所有内置菜单项(“设置”除外)。 | ContextMenu | ||
指示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
指示指定的属性是否存在、是否可枚举。 | Object | ||
从菜单中删除所有项目。 | ContextMenu | ||
从 EventDispatcher 对象中删除侦听器。 | EventDispatcher | ||
删除指定的菜单项。 | NativeMenu | ||
删除并返回指定索引处的菜单项。 | ContextMenu | ||
将菜单项移到指定位置。 | NativeMenu | ||
设置循环操作动态属性的可用性。 | Object | ||
返回指定对象的字符串表示形式。 | Object | ||
返回指定对象的原始值。 | Object | ||
检查是否用此 EventDispatcher 对象或其任何始祖为指定事件类型注册了事件侦听器。 | EventDispatcher |
事件 | 摘要 | 定义方 | ||
---|---|---|---|---|
[广播事件] Flash Player 或 AIR 应用程序获得操作系统焦点并变为活动状态时将调度此事件。 | EventDispatcher | |||
[广播事件] Flash Player 或 AIR 应用程序失去操作系统焦点并变为非活动状态时将调度此事件。 | EventDispatcher | |||
在显示菜单的前一刻由此 NativeMenu 对象调度。 | NativeMenu | |||
在用户首次生成上下文菜单但尚未显示上下文菜单内容时调度。 | ContextMenu | |||
在选择其菜单项之一或其后代子菜单之一中的项目时由此 NativeMenu 对象调度。 | NativeMenu |
builtInItems | 属性 |
builtInItems:ContextMenuBuiltInItems
[读写] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
ContextMenuBuiltInItems 类具有以下属性的实例:forwardAndBack
、loop
、play
、print
、quality
、rewind
、save
和 zoom
。将这些属性设置为 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 类具有以下属性的实例:cut
、copy
、paste
、delete
和 selectAll
。若将其中一个属性设置为 false
,则禁用剪贴板菜单中的相应项。
public function get clipboardItems():ContextMenuClipboardItems
public function set clipboardItems(value:ContextMenuClipboardItems):void
另请参见
ContextMenu
对象的 clipboardItems
属性的用法。创建一个 ContextMenu
并将其 clipboardMenu
属性设置为 true
。添加 MENU_SELECT
事件的事件处理程序(通常是右键单击),并将菜单分配给一个显示对象。在这种情况下,将启用 copy
和 paste
菜单。
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
另请参见
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
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 对象。
另请参见
addItemAt | () | 方法 |
override public function addItemAt(item:NativeMenuItem, index:int):NativeMenuItem
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 |
在菜单底部添加一个菜单项。
创建上下文菜单时,可以添加 NativeMenuItem 或 ContextMenuItem 对象。但建议在上下文菜单中仅使用一种对象,这样菜单中的所有项目都具有相同的属性。
参数
item:NativeMenuItem — 要在菜单底部添加的项。 | |
index:int |
NativeMenuItem |
ArgumentError —
如果 item 为 null 。
| |
ArgumentError —
如果 item 为其它菜单的成员。
|
clone | () | 方法 |
containsItem | () | 方法 |
override public function containsItem(item:NativeMenuItem):Boolean
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 |
报告此菜单是否包含指定的菜单项。
参数
item:NativeMenuItem — 要查找的项目。 |
Boolean —
如果 item 位于此菜单中,则为 true .
|
display | () | 方法 |
override public function display(stage:Stage, stageX:Number, stageY:Number):void
运行时版本: | AIR 1.0 |
在指定位置弹出此菜单。
注意:Flash Player 中不支持使用此方法。
参数
stage:Stage — 要在其上显示此菜单的 Stage 对象。 | |
stageX:Number — 相对于要显示此菜单的舞台原点的水平像素数。 | |
stageY:Number — 相对于要显示此菜单的舞台原点的垂直像素数。 |
getItemAt | () | 方法 |
override public function getItemAt(index:int):NativeMenuItem
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 |
获取指定索引处的菜单项。
参数
index:int — 要返回的项目的位置(从 0 开始)。 |
NativeMenuItem — 菜单中指定位置处的项目。 |
RangeError —
如果 index 位于此菜单的 items 数组的范围以外。
|
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
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
类从舞台中删除默认上下文菜单项,并添加一个新的菜单项,如果单击该菜单项,将可更改舞台上正方形的颜色。这是由以下步骤完成的:
myContextMenu
属性,然后将其赋给新的 ContextMenu 对象,并声明 Sprite 类型的 redRectangle
属性。
removeDefaultItems()
方法,该方法将删除所有内置的上下文菜单项(“打印”除外)。
addCustomMenuItems()
方法,该方法使用数组的 push()
方法将称为 Red to Black
菜单选择的菜单项放入 defaultItems
数组。将 menuItemSelect
事件侦听器添加到 ContextMenuItem 对象中,关联的方法名为 menuItemSelectHandler()
。当访问上下文菜单并选择 Red to Black
时,此方法使用 trace()
输出一些语句。同时,红色正方形被删除并替换为一个黑色正方形。
menuSelect
的事件侦听器以及关联的方法 menuSelectHandler
。每次打开上下文菜单中的项时,此方法只使用 trace()
输出三个语句。
addChildren()
将绘制一个红色正方形并将其添加到显示列表,该红色正方形将立即显示在列表中。
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; } } }