Flex下的右键菜单问题汇总

显示对象的右键菜单

flash.display.InteractiveObject是可以和用户交互显示对象的基类,它的contextMenu属性定义了这个显示对象的菜单。这属性只控制菜单的内容。

MouseEvent.CONTEXT_MENU事件

这个事件在InteractiveObject 类上定义,鼠标右键后,就会被调用,开发者能够做的就重写调用的处理方法。
这是事件和相关鼠标时间的调用次序是:
1. rightMouseDown 右键按下
2. contextMenu

禁用右键菜单

有以下思路:
1. 修改contextMenu中的内容。
2. 阻止CONTEXT_MENU事件流的默认处理流程。
3. 设置该显示对象不可交互。例如设置RichEditableText的enabled属性为false。

剪切板菜单

操作剪切板的菜单,具体来说是一组进行剪切板操作的菜单。开发者只能选择是否显示它,控制它的那些菜单项可用。菜单的名字和顺序的控制权不在开发者手中。通常,剪切板菜单会附在右键菜单的下部,和用户自定义的菜单有明显的区分。

自带剪切板菜单的显示对象

已经知道的有:RichEditableText,TextField。

所以,可以在右键按下事件的处理方法中修改菜单内容。

修改菜单

编辑剪切板菜单

自带剪切板菜单的显示对象,它的右键菜单可以进行编辑。
以下是示例代码。可以控制剪切板菜单整体是否显示,也可以控制剪切板菜单项是否可用。

var myTFContextMenu:ContextMenu=myTextField.contextMenu as ContextMenu;
//myTFContextMenu.clipboardMenu=false;// 关闭myTextField的剪切板菜单显示
myTFContextMenu.clipboardItems.clear=false;// 禁用但仍显示 myTextField剪切板菜单中的“删除”或“清除”(具体的菜单文字取决于操作系统)菜单。
myTFContextMenu.clipboardItems.copy=false;// “复制”菜单。
myTFContextMenu.clipboardItems.cut=false;// “剪切”菜单。
myTFContextMenu.clipboardItems.paste=false;// “粘贴”菜单。
myTFContextMenu.clipboardItems.selectAll=false;// “全选”菜单

添加自定义菜单

示例代码如下:

var cm:ContextMenu=myRichText.contextMenu as ContextMenu;
if(cm==null)
{
    cm=new ContextMenu();
    myRichText.contextMenu=cm;
}
cm.customItems.splice(0,cm.customItems.length);
cm.customItems.push(new ContextMenuItem("这是一个定制菜单"));//给myRichText添加自定义的右键菜单

自带剪切板菜单的显示对象的菜单如何编辑

基本方法参见前两个方法,需要注意的是这类显示对象的contextMenu属性,很晚才被赋值。所以待它刚刚构造完成时,这个属性是null,而在监听到它的rightMouseDown事件时,这个属性已经有值了,里面是默认的剪切板菜单。如果你是在默认赋值之前做了修改这个属性的操作,默认复制不会覆盖你的操作,但你需要恰当的设置菜单中的剪切板菜单。修改菜单恰当的时机最重要。

你可能感兴趣的:(Flex)