【问题标题】:How to disable the default context menu on a text area in Actionscript 3?如何在 Actionscript 3 中禁用文本区域的默认上下文菜单?
【发布时间】:2016-06-07 10:56:33
【问题描述】:

默认情况下,spark TextArea 有一个内置的 ContextMenu,带有“剪切”、“复制”、“粘贴”、“删除”等选项。

我想将此 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 会第一次出现。

所以有人知道为什么会发生这种情况或我做错了什么吗?

【问题讨论】:

    标签: actionscript-3 apache-flex flex4


    【解决方案1】:

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

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

    【讨论】:

    • 嗨@Glitcher,我尝试将我的代码放入类构造函数中,并尝试将代码放入创建完成中,但在这两种情况下,我都会在第一次右键单击时获得默认上下文菜单。跨度>
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我已在整个应用程序中添加

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

      并且 defaultContextMenu 被禁用。

      【讨论】:

        猜你喜欢
        • 2012-11-13
        • 2017-03-31
        • 2017-11-08
        • 2019-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-19
        • 2012-05-06
        相关资源
        最近更新 更多