Обработка ширины и стилей TextInput в Flex

Я создал контейнер формы с несколькими полями TextInput в Flex, и я хотел бы изменить стиль щелчка элемента TextInput. Мне удалось сделать это с помощью прослушивателя событий MouseEvent.CLICK, но это не то, что я ожидал.
Я хотел бы изменить стиль TextInput, когда пользователь пытается отредактировать это поле. Однако я хочу вернуться к стилю «по умолчанию», когда пользователь щелкает другое поле TextInput или за пределами любого поля. Есть ли какой-нибудь прослушиватель событий, специально предназначенный для таких взаимодействий?

У меня также вопрос, можно ли сделать ширину TextInput в зависимости от количества текста? Я хочу изменить его размер до ширины текста внутри него? Текст поступает из какой-то базы данных и всегда имеет разную ширину ...

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


person errata    schedule 10.11.2009    source источник


Ответы (2)


Вместо использования событий щелчка используйте события «фокус» и «размытие». Таким образом, вы уловите событие, когда пользователь щелкает (или делает вкладки) в поле, и вы также уловите событие, когда он покинет поле.

person JasonWyatt    schedule 10.11.2009
comment
Спасибо! Решил проблему со слушателями FocusEvent.FOCUS_IN и FocusEvent.FOCUS_OUT ... - person errata; 10.11.2009

Что касается вашего второго вопроса. Если вы не установите явную ширину для ввода текста, я бы подумал, что он будет использовать flash.text.TextLineMetrics для автоматического расчета своей оптимальной ширины. Проверьте метод measure в коде для проверки TextInput.

person Ryan Lynch    schedule 10.11.2009
comment
Спасибо за помощь ... Я попробовал некоторые методы измерения и свойства, но ни один из них не работает = (Когда я пытаюсь использовать measureText () в моем поле TextInput, я получаю эту ошибку: TypeError: Error # 2007: Parameter antiAliasType должен быть ненулевым.Кроме того, я вижу в отладчике, что measureWidth возвращает 0 ... Хммм, почему это происходит? - person errata; 10.11.2009
comment
Я не имею в виду вызов метода measure(), я имел в виду посмотреть на код, чтобы увидеть, что делает элемент управления, если вы не установите explicitWidth. - person Ryan Lynch; 10.11.2009
comment
хмм, я не уверен, правильно ли я вас понял, но я проверил также explicitWidth, и его значение равно NaN, как и все остальные explicitMin / explicitMax Width / Heights ... - person errata; 10.11.2009
comment
Позже я рассмотрю функцию TextInput measure и посмотрю, нужно ли вам расширить класс и переопределить метод, чтобы сделать его автоматическим размером текста. Я бы подумал, что есть общедоступный флаг, который вы можете установить на TextInput, который приведет к автоматическому изменению размера элемента управления до текста, или что это будет поведение по умолчанию, если вы не установите width на элементе управления. - person Ryan Lynch; 10.11.2009
comment
Все еще не повезло с этим ... Я видел во внутреннем классе TextInput.as, что я должен вызвать validateNow (), прежде чем я смогу получить значение textWidth, но я всегда получаю NaN для textWidth и 0 для всех других свойств (width, measureWidth и т. Д. .) ... - person errata; 12.11.2009
comment
Уф, хорошо, мне удалось решить мою проблему, создав прослушиватель creationComplete для компонентов TextInput и изменив их размер там ... Спасибо за советы =) - person errata; 12.11.2009