Как я могу создать контекстное меню «на лету» в текстовой области в AS3 / AIR?

#apache-flex #air #flex4

#apache-flex #air #flex4

Вопрос:

Я переношу приложение с Flex / Flash на Flex / AIR 32.

Много лет назад я начал использовать модуль проверки орфографии flextenibles. Он создает пользовательский компонент для текстовой области, который подчеркнет слова с ошибками, а затем отобразит слово с ошибками в контекстном меню.

Я успешно перенес его, однако единственный способ вызвать всплывающее пользовательское контекстное меню — это очень осторожно щелкнуть правой кнопкой мыши по волнистой строке под текстом, а не по самому тексту. Когда я щелкаю правой кнопкой мыши по тексту, отображается контекстное меню по умолчанию. На самом деле он никогда не получает доступ к функции для создания пользовательского контекстного меню. Я разместил следующий код в различных местах пользовательского класса, который расширяет 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».

Ответ №1:

Ну, я нашел обходной путь.

Я использовал следующее для создания прослушивателя событий;

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

Затем я изменил обработчик, чтобы использовать данные события из MouseEvent вместо ContextMenuEvent, это, кажется, работает.