TextField () Предотвращение Ctrl + A (выбрать все) - PullRequest
0 голосов
/ 18 февраля 2009

Как я могу запретить CTRL + A работать с редактируемым TextField ()

Ответы [ 3 ]

1 голос
/ 19 февраля 2009

Предыдущий пример работает только с объектами Flex Text и TextArea, это работает со всеми объектами flash.text. *.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
    <mx:Script>
        <![CDATA[
            import mx.core.UIComponent;

            private var t:TextField;
            private function init():void
            {
                t = new TextField();
                t.height = 80;
                t.width  = 100;
                t.type   = TextFieldType.INPUT;
                t.multiline = true;
                var c:UIComponent = new UIComponent();
                c.addChild( t );
                foo.addChild( c );
                addEventListener( KeyboardEvent.KEY_UP,         edit );
                addEventListener( KeyboardEvent.KEY_DOWN,       edit );
            } 

            private function edit( event:KeyboardEvent ):void
            {
                if( event.type == KeyboardEvent.KEY_DOWN && event.ctrlKey )
                {
                    t.type = TextFieldType.DYNAMIC; // Dynamic texts cannot be edited.  You might be able to remove this line.
                    t.selectable = false; // If selectable is false, then Ctrl-a won't do anything.
                }
                else
                {
                    t.type = TextFieldType.INPUT;
                    t.selectable = true;
                }
            }
        ]]>
    </mx:Script>
    <mx:Canvas id="foo" height="90" width="110" backgroundColor="#FFFFFF" />
</mx:Application>
0 голосов
/ 19 февраля 2009

Используйте функцию setFocus в паре со слушателем KeyboardEvent:

<xml version="1.0"?>
<!-- menus/SimpleMenuControl.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="800" initialize="init()" >
    <mx:TextInput id="nom"/>
    <mx:Script>
        <![CDATA[
            private function init():void
            {
                addEventListener( KeyboardEvent.KEY_UP,     edit );
                addEventListener( KeyboardEvent.KEY_DOWN,   edit );
            } 

            private function edit( event:KeyboardEvent ):void
            {
                if( event.type == KeyboardEvent.KEY_DOWN && event.ctrlKey ) setFocus();
                else nom.setFocus();
                nom.selectionEndIndex = nom.selectionBeginIndex = nom.text.length;
            }
        ]]>
    </mx:Script>

</mx:Application>

setFocus означает, что объект Text больше не будет прослушивать какие-либо события клавиатуры.

Я бы не рекомендовал использовать свойство enabled, поскольку оно будет затенять текстовую область.

0 голосов
/ 18 февраля 2009

Не тестировалось, но, возможно, вы могли бы перехватить событие selectAll на TextField и предотвратить его всплытие, или очистить выбор (не уверен, когда событие сработало).

...