MouseEvent.MOUSE_DOWN через mx:TextInput

Я работаю над простым приложением flex/AIR с элементом управления mx.TextInput и некоторой кнопкой. Я не использую системный хром.

меньше или больше mxml это:

    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="495" height="316" creationComplete="init()">
    <mx:TitleWindow width="481" height="84" layout="absolute" horizontalCenter="0" showCloseButton="false" id="win" top="10">
        <mx:Label text="blahhh" id="label1" left="0" top="0"/>
        <mx:TextInput id="textinput1" left="155" top="0" right="5"  editable="true" />
        <mx:Label text="expand" right="36" bottom="0" click="toggleState()"/>
        <mx:Label text="exit" click="stage.nativeWindow.close()" right="0" bottom="0"/>
    </mx:TitleWindow>
</mx:Application>

Чтобы сделать окно перетаскиваемым, я добавил прослушиватель MouseEvent.MOUSE_DOWN в TitleWIndow:

win.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent):void { stage.nativeWindow.startMove();});

Теперь проблема заключается в том, что внутренний элемент управления вводом текста, по-видимому, наследует список событий, поэтому вы можете набирать текст, но не можете его выбрать (поскольку удерживание мыши вызывает функцию NativeWindow.move()).

Я что-то упускаю ? Я хочу, чтобы окно можно было перетаскивать только тогда, когда я нажимаю указатель мыши на TitleWindow, а не на другие элементы управления.


person Carlo    schedule 18.01.2009    source источник


Ответы (1)


Вы должны проверить атрибут target объекта события, например:

win.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent):void {
    if (e.target == win)
        stage.nativeWindow.startMove();
});

В противном случае вы также поймаете события mouseDown, всплывающие из внутренних элементов, таких как TextInput.

person David Hanak    schedule 18.01.2009