如何禁用Actionscript 3中文本区域的默认上下文菜单?

时间:2016-06-07 10:56:33

标签: actionscript-3 flex flex4

默认情况下,spark TextArea有一个内置的ContextMenu,带有'Cut','Copy','Paste','Delete'等选项。

我想用自定义的ContextMenu替换它,但是我在禁用默认设置时遇到了问题。

在第一次添加自定义后,我将获得默认的ContextMenu,然后从第二次获取自定义ContextMenu。

我在textarea中使用以下代码:

<s:TextArea id="txtArea" width="100%" height="100%" borderVisible="false" focusAlpha="0.01" 
            verticalScrollPolicy="off" selectionHighlighting="always" styleName="TextBox"
            needsSoftKeyboard="true" focusRect="false" buttonMode="true" useHandCursor="true" mouseChildren="true"/>

使用以下代码将鼠标右键自定义ContextMenu添加到文本区域:

eventMap.mapListener( view.txtArea , MouseEvent.RIGHT_MOUSE_DOWN ,onRightMouseDown);

private function onRightMouseDown(e:MouseEvent):void
    {
        var item1:ContextMenuItem = new ContextMenuItem("Cancel", true);
        var item2:ContextMenuItem = new ContextMenuItem("Select", true);

        var contextMenu:ContextMenu = new ContextMenu();
        contextMenu.hideBuiltInItems();
        contextMenu.customItems.push(item1);
        contextMenu.customItems.push(item2);

        view.txtArea.contextMenu = contextMenu;
    }

但我不知道为什么默认的ContextMenu会在第一时间到来。

所以任何人都知道为什么会这样或我做错了什么?

3 个答案:

答案 0 :(得分:1)

您第一次获得原始上下文菜单的原因是因为您没有在第一次右键单击发生之前将其关闭。每次右键单击时,您也会不必要地重建上下文菜单。

要解决此问题,您需要获取onRightMouseDown函数中的代码,并将其放入类构造函数中,如果没有,则在运行swf后立即运行。这只需要发生一次。

答案 1 :(得分:1)

以下代码解决了我的问题:

var contextMenu = new ContextMenu();
contextMenu.hideBuiltInItems();
contextMenu.clipboardMenu = false;
contextMenu.addItem(new ContextMenuItem("Start Select"));
contextMenu.addItem(new ContextMenuItem("Start Copy"));

(txtArea.textDisplay as RichEditableText).contextMenu = contextMenu;

不是将自定义上下文菜单直接放入textArea控件,如果我们将如上所述放置richEditableText,那么这将解决这个问题。

答案 2 :(得分:0)

我已在整个申请中添加了

addEventListener(MouseEvent.RIGHT_CLICK, function (... rest):void
{
})

和defaultContextMenu已被禁用。