2013-05-20 2 views
-1

Я пытаюсь добавить функциональные возможности вкладки в текстовый редактор с использованием события keyDown. Чтобы быть ясным, в ключе табуляции мне нужен элемент управления, чтобы он оставался в том же текстовом поле с пробелами «\ t» и не переходил к следующему объекту. Следующий код, который я пробовал, отлично работает с textArea, но не с RichTextEditor. Я что-то упускаю?Добавление функции вкладки в текстовом редакторе (Flex 3)

<mx:RichTextEditor width="90%" 
        height="274" 
        id="richTextArea" 
        htmlText="{chapterContent}" keyDown="onTabPress(event);"/> 

Ключ клавиатуры клавиатуры обрабатывается на уровне скрипта, как показано на рисунке.

private function onTabPress(eventkey:KeyboardEvent):void 
{ 
    switch(eventkey.keyCode) 
    { 
     case Keyboard.TAB: 
      var indexBegin:int = eventkey.currentTarget.selectionBeginIndex; 
      var range:TextRange = new TextRange(eventkey.currentTarget as UIComponent,false,indexBegin,indexBegin); 
      range.text = "\t"; 
      var indexNext:int = eventkey.currentTarget.selectionBeginIndex+range.text.length; 
      eventkey.currentTarget.setSelection(indexNext, indexNext); 
      focusManager.moveFocus(FocusRequestDirection.BACKWARD); 
      break; 
    } 
} 

Спасибо за помощь.

+0

Я знаю, что RTE состоит из управления и текстовой области. Как я могу убедиться, что слушатель keyDown присоединяется к textArea. Извиняюсь, если я считаю себя дилетантским. – shark1608

+0

Пробовал ли вы 'eventKey.stopImmediatePropagation()'? – duTr

ответ

0

Имел ту же проблему. Это сработало для меня, поскольку используется событие KEY_UP вместо события KEY_DOWN.

Вместо перемещения фокуса назад, я установил фокус непосредственно к TEXTAREA в RichTextEditor:

<mx:RichTextEditor id="rte_txt" /> 
rte_txt.textArea.setFocus(); 

Но с помощью фокус-менеджер должен работать также.

0

Возможно, возникла проблема с попыткой вставить символы '\ t' в RichTextEditor ... Однако RichTextEditor целевых объектов имеет открытый компонент textArea. Ваш код отлично работает в textArea, поэтому вы можете слегка изменить цель.

Это небольшое изменение, но следующий код работает для меня:

private function onTabPressed(event:KeyboardEvent):void { 
     switch(event.keyCode) { 
      case Keyboard.TAB : 
       var indexBegin:int = event.currentTarget.textArea.selectionBeginIndex; 

       var range:TextRange = new TextRange(event.currentTarget.textArea as UIComponent, false, indexBegin, indexBegin); 
       range.text = "\t"; 

       var indexNext:int = event.currentTarget.textArea.selectionBeginIndex + range.text.length; 
       event.currentTarget.textArea.setSelection(indexNext, indexNext); 
       focusManager.moveFocus(FocusRequestDirection.BACKWARD); 
       break; 
     } 
    } 

С:

<mx:RichTextEditor width="90%" 
        height="274" 
        id="richTextArea" 
        htmlText="{chapterContent}" 
        keyDown="onTabPress(event);"/> 

 Смежные вопросы

  • Нет связанных вопросов^_^