如何在Flex 3中的TextInput上的keyDownHandler上设置text属性

时间:2011-10-11 14:03:09

标签: flex text textinput

简单直接。 我扩展了一个mx.controls.TextInput来创建一个具有不同行为的自定义组件。 我正在尝试在keyDownHandler()上设置 text 属性,并且由于某种原因它无法正常工作。组件上的文字只是忽略了变化。 我正在使用Flex 3.6。 这里是一个简单的示例代码,解释了正在发生的事情:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:customcomponent="com.test.customcomponent.*">
    <customcomponent:TextTest x="20" y="20"/>   
</mx:Application>

在AS级以下:

package com.test.customcomponent
{
    import flash.events.KeyboardEvent;

    import mx.controls.TextInput;

    public class TextTest extends TextInput
    {
        public function TextTest()
        {
            super();
        }

        override protected function keyDownHandler(event:KeyboardEvent):void{
            text = "lol. It doesn't work";
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您需要阻止默认按键事件。

    override protected function keyDownHandler(event:KeyboardEvent):void{
        text = "lol. It doesn't work";
        event.preventDefault();
        event.stopImmediatePropagation();
        event.stopPropagation()
    }

答案 1 :(得分:0)

为了能够阻止默认处理,您必须在处理程序上具有足够高的优先级(keyDownHandler()没有)。这意味着您需要优先注册自己的方法&gt; 0

您可以尝试这样:

public function MyTextInput() {
    addEventListener(KeyboardEvent.KEY_DOWN, yourHandler, 
                     false, EventPriority.BINDING, true);
    ...
}

private function yourHandler(event : KeyboardEvent) : void {
    // stop further handling
    event.preventDefault();
    event.stopImmediatePropagation();
    event.stopPropagation();  

    // do your work here
    text = ...;
}