首页 > 解决方案 > 如何在 AS3/AIR 的 textArea 中动态创建上下文菜单?

问题描述

我正在将应用程序从 Flex/Flash 迁移到 Flex/AIR 32。

许多年前,我开始使用 flextenibles SpellCheck 模块。它为 textArea 创建了一个自定义组件,该组件将在拼写错误的单词下划线,然后在上下文菜单中显示拼写错误的单词。

我已成功迁移它,但是让自定义上下文菜单弹出的唯一方法是非常小心地用鼠标右键单击文本下方的波浪线,而不是文本本身。当我右键单击文本时,它会显示一个默认的上下文菜单。它实际上从来没有使用过构建自定义上下文菜单的功能。我已将以下代码放置在扩展 mx.controls.textArea 的自定义类中的多个位置;

private function creationCompleteHandler(event:Event):void
{
    this.contextMenu = new ContextMenu;
    this.contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT,showMenu);
}

包括在构造函数中与其原始位置的 createChildren 具有相同的行为。

在 Flex/flash 版本中,右键单击文本会弹出自定义上下文菜单。

编辑:

随着我进行更多调试,我发现组件内的“this.textField”正在触发 MouseEvent.CONTEXT_MENU,并且它永远不会到达“this.contextMenu”事件。

标签: apache-flexairflex4

解决方案


好吧,我找到了解决方法。

我使用以下内容创建事件侦听器;

    this.textField.addEventListener(MouseEvent.CONTEXT_MENU,showMenu);

然后我更改了处理程序以使用来自 mouseEvent 而不是 contextMenuEvent 的事件数据,这似乎有效。


推荐阅读