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

3qpi33ja  于 2022-11-01  发布在  Apache
关注(0)|答案(3)|浏览(116)

默认情况下,spark TextArea有一个内置的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是在第一次来。
所以有人知道为什么会发生这种事吗?或者我哪里做错了?

huwehgph

huwehgph1#

你第一次得到原始的上下文菜单的原因是因为你在第一次右键点击发生之前没有关闭它。你也不必要在每次右键点击时重建上下文菜单。
要解决这个问题,你需要把你的onRightMouseDown函数中的代码放到你的类构造函数中,或者,如果你没有类构造函数,可以放到swf运行时它会运行的任何地方。

cetgtptt

cetgtptt2#

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

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,那么就可以解决这个问题。

ttcibm8c

ttcibm8c3#

我已经添加了整个应用程序

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

并且已禁用默认上下文菜单。

相关问题