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();});

Проблемът сега е, че вътрешната контрола за въвеждане на текст изглежда наследява eventlistner, така че можете да въвеждате текст, но не можете да го изберете (Защото задържането на мишката задейства функцията 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