#apache-flex #actionscript-3 #textarea
#apache-flex #actionscript-3 #текстовая область
Вопрос:
У меня есть простая текстовая область
<s:TextArea id="taData" keyUp="keyListener(event)" focusEnabled="false" fontFamily="Courier New" fontSize="12" left="10" right="10" top="40" bottom="10"/>
KeyListener позволяет использовать вкладку следующим образом
private function keyListener(event:KeyboardEvent):void
{
if (event.keyCode == Keyboard.TAB)
{
event.currentTarget..insertText("t");
}
}
Все работает, как ожидалось, но буфер отмены сбрасывается / останавливается в тот момент, когда была вставлена вкладка.
Есть ли способ гарантировать, что буфер отмены остается в рабочем состоянии даже при вставленной вкладке
Ответ №1:
Если все, что вы хотите сделать, это вставить табуляцию в свой текст, когда пользователь нажимает клавишу tab, есть лучший способ сделать это (и я надеюсь, что это одновременно решит вашу проблему отмены).
Вам придется получить доступ к модели TextArea — объекту TextFlow — и поработать с его конфигурацией. Класс конфигурации textflow имеет свойство под названием ‘manageTabKey‘, которое по умолчанию равно ‘false’. Если вы установите для него значение ‘true’, он будет делать то, что, я думаю, вы пытаетесь сделать для себя, т. Е. Когда пользователь нажимает клавишу tab, вставляет символ табуляции вместо того, чтобы фокусировать внимание на следующем фокусируемом элементе.
var textFlow:TextFlow = taData.textFlow;
var config:Configuration = Configuration(textFlow.configuration);
config.manageTabKey = true;
Приведение к конфигурации необходимо, поскольку TextFlow.configuration возвращает интерфейс IConfiguration, в котором нет метода настройки для manageTabKey.
Кроме того, вы даже можете установить ширину ваших вкладок, используя свойство ‘tabStops‘.
textFlow.tabStops = "25 50 75 100";
Редактировать:
Я только что заметил, что вы установили для ‘focusEnabled’ значение false. В этом также больше не будет необходимости.