MouseEvent.MOUSE_DOWN over mx:TextInput

时间:2009-01-18 19:44:05

标签: flex3 mxml

我正在使用一个简单的flex / AIR应用程序,只有一个mx.TextInput控件和一些按钮。我没有使用系统chrome。

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>

为了使窗口可拖动,我已经向TitleWIndow添加了一个MouseEvent.MOUSE_DOWN侦听器:

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

现在的问题是内部textinput控件似乎继承了eventlistner,所以你可以输入text,但你不能选择它(因为按住鼠标触发NativeWindow.move()函数)。

我错过了什么吗?我希望窗口只有当我在TitleWindow上出现时才可以拖动,而不是在其他控件上。

1 个答案:

答案 0 :(得分:1)

您应该检查事件对象的target属性,如下所示:

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

否则,您还会捕获从内部元素(如TextInput。)中冒出的mouseDown事件。