【问题标题】:Flex - Button to simulate key pressFlex - 模拟按键的按钮
【发布时间】:2012-03-02 00:53:41
【问题描述】:

我有一个通过 ctrl+z、ctrl+y 执行的带有撤消/重做的 TextArea。我的应用程序是一个移动应用程序,软键盘上没有 cntrl,所以我想做一个模拟按键的撤消和重做按钮。如何在 Flex 中模拟按键?

【问题讨论】:

    标签: apache-flex events simulate


    【解决方案1】:

    您可以调度任何您喜欢的事件,包括 KeyboardEvents,以便调度模拟 ctrl-z(键码 26)和 ctrl-y(键码 25)的 KeyboardEvent,您可以执行以下操作:

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600" creationComplete="creationCompleteHandler(event)">
        <mx:Script>
            <![CDATA[
                import mx.events.FlexEvent;
    
                protected function creationCompleteHandler(event:FlexEvent):void
                {
                    this.addEventListener( KeyboardEvent.KEY_UP, keyHandler );
                }
    
                protected function clickHandler(event:MouseEvent):void
                {
                    this.dispatchEvent( new KeyboardEvent( KeyboardEvent.KEY_UP, true, false, 26, 26, 0, true ) );
                }
    
                protected function keyHandler( e:KeyboardEvent ):void
                {
                    trace(e.charCode, e.keyCode, e.ctrlKey);
                }
    
            ]]>
        </mx:Script>
        <mx:Button id="undoButton" label="undo" click="clickHandler(event)" />
    </mx:Application>
    

    this.dispatchEvent( new KeyboardEvent( KeyboardEvent.KEY_UP, true, false, 26, 26, 0, true ) ); 行是键(不是双关语),它说调度一个 KEY_UP 事件,接下来的两个参数是气泡并且可以取消,然后 charCode 和 keyCode 都是 26,keyLocation 是 0,最后是 ctrlKey (模拟它被关闭)。

    【讨论】:

    • 我已经尝试过了,当我单击按钮时,我得到了 26 26 true 跟踪,但文本没有撤消。我敢肯定我错过了一些简单的东西,因为你的例子很清楚而且很有意义。知道它可能是什么吗?
    • 可能是监听KeyBoardEvents的组件低于发出事件的按钮。在 Flash 和 Flex 中,事件可以在 DisplayList 中冒泡,以便链上的任何组件都可以听到它们,或者您可以显式地侦听来自组件的事件。 textarea 撤消/重做您构建的东西还是第三方的东西?
    • 其实只是火花TextArea
    • 好吧,仔细观察后,textarea 只能在你点击它的焦点时撤消/重做,一旦你点击它撤消,重做历史就会丢失。由于单击按钮会更改焦点,因此您将无法使用内置撤消的撤消按钮。您可以构建自己的撤消/重做管理,这对于一个文本区域来说有点痛苦,但如果您有兴趣查看 Momento 模式 lucamezzalira.com/2010/01/12/…
    猜你喜欢
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多