PDA

Просмотр полной версии : Вопрос по TextInput


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

P. S. Я создал подобную тему здесь (http://flasher.ru/forum/showthread.php?t=95519) но её сразу закрыли. Документацию по модификации компонент я читал, ответа на мой вопрос там нет. Мне просто нужен совет опытного человека, который переопределял стандартные ивенты компонент.

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.