Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Вопрос по TextInput (http://www.flasher.ru/forum/showthread.php?t=95554)

Powerhead 08.05.2007 14:03

Вопрос по TextInput
 
Подскажите, какой метод мне нужно переопределить для того, чтобы изменить поведение курсора в компоненте TextInput? Мне нужно, чтобы нажатие стрелочки вверх не переводило курсор в начало текстового поля.
Я пробовал override protected function keyDownHandler, но, оказалось, что этот метод только добавляет ивент ENTER и все.

P. S. Я создал подобную тему здесь но её сразу закрыли. Документацию по модификации компонент я читал, ответа на мой вопрос там нет. Мне просто нужен совет опытного человека, который переопределял стандартные ивенты компонент.

vooparker 08.05.2007 14:46

Либо я не понял вопроса, но зачем переопределять метод?
Код:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[               
        private var prevValue : String = 'prev console message';
                       
        public function upKeyHandler ( e:KeyboardEvent ) : void
        {
                if( e.keyCode == Keyboard.UP )
                {
                        con.text = prevValue;
                        con.setSelection( con.text.length, con.text.length);
                }
        }
]]>
</mx:Script>
<mx:TextInput id="con" x="10" y="50" width="200" keyDown="upKeyHandler(event)" />       
</mx:Application>


Powerhead 08.05.2007 14:57

Ура. Как все просто. Спасибо =)

Powerhead 08.05.2007 15:13

vooparker, твой способ отлично работает, спасибо.
Но ты не мог бы объяснить, почему, если я создаю TextInput программно, то этот способ не работает?
Вот код.

Код:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="createTextField()">

<mx:Script>
        <![CDATA[
               
        import mx.controls.TextInput;
       
        private var prevValue : String = 'prev console message';
                       
        public function upKeyHandler ( e:KeyboardEvent ) : void
        {
                if( e.keyCode == Keyboard.UP )
                {
                        e.target.text = prevValue;
                        e.target.setSelection(e.target.text.length, e.target.text.length);
                }
        }
       
        public function createTextField():void
        {
                var myTxt:TextInput = new TextInput;

                myTxt.addEventListener(KeyboardEvent.KEY_DOWN, upKeyHandler);
               
                application.addChild(myTxt);
        }
               
        ]]>
</mx:Script>

       
</mx:Application>

В этом случае курсор сместится только если слушать не KEY_DOWN, а KEY_UP, то есть, если заменить ивент на myTxt.addEventListener(KeyboardEvent.KEY_UP, upKeyHandler); Но, в этом случае, курсор прыгает в начало, пока клавиша нажата.

Powerhead 08.05.2007 15:25

В этом случае, почему-то не срабатывает e.target.setSelection, а сработает только id.setSelection (а если событие KEY_UP, то e.target.setSelection работает)



ЗЫ. все, разобрался. Работает, если вместо target юзать свойство currentTarget.
Разницу между ними пока не совсем понимаю

etc 08.05.2007 15:30

Используй currentTarget.


Часовой пояс GMT +4, время: 20:29.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.