键盘应用程序 - 有多个按钮为textinput添加字母的最佳方法?使用事件处理程序?

时间:2009-08-17 20:40:47

标签: flex actionscript-3 actionscript keyboard

我正在开发一个应用程序,我正在构建一个“键盘”组件。键盘上有30个键,为每个按钮创建一个事件处理程序似乎没有实际意义。单击该按钮时,应将其标签发送到将其添加到textinput字段的函数。

我应该为每个按钮创建一个“click = SomeFunction(Button.label)”,还是有更好/更快/更少处理器密集的方式来做它?

1 个答案:

答案 0 :(得分:3)

有一种更简单的方法。您可以扩展按钮组件并创建默认点击,即使是冒泡。然后,您可以让父组件监听事件。这是一个简单的例子:

myButton.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Button xmlns:mx="http://www.adobe.com/2006/mxml"
    click="clickKeyHandler( event );">

    <mx:Metadata>

        [Event(name="keyboardClickEvent", type="com.KeyboardEvent")]
    </mx:Metadata>

    <mx:Script>
        <![CDATA[

            import com.KeyboardEvent;

            protected function clickKeyHandler( event:MouseEvent ):void{


                dispatchEvent( new KeyboardEvent( this.label ) );
            }
        ]]>
    </mx:Script>
</mx:Button>

com.KeyboardEvent:

package com
{
    import flash.events.Event;

public class KeyboardEvent extends Event
{

    public static const KEYBOARD_CLICK_EVENT:String = "keyboardClickEvent";

    private var _value:String;

    public function get value():String{

        return _value;

    }
    public function KeyboardEvent( value:String = "" )
    {

        super( KEYBOARD_CLICK_EVENT, true );

        _value = value;
    }


    override public function clone() : Event {
        return new KeyboardEvent( _value );
    }

    }

}

在app中使用:

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


    <mx:Script>
        <![CDATA[

            import com.KeyboardEvent;

            private function initApp():void{


                this.addEventListener( KeyboardEvent.KEYBOARD_CLICK_EVENT, keyboardHandler);

            }


            private function keyboardHandler( event:KeyboardEvent ):void{

                trace( event.value );
            }
        ]]>
    </mx:Script>

    <local:myButton label="1" />
    <local:myButton label="2" />
    <local:myButton label="3" />
    <local:myButton label="4" />
</mx:Application>