MouseEvent.MOUSE_DOWN over mx: TextInput - PullRequest
       8

MouseEvent.MOUSE_DOWN over mx: TextInput

1 голос
/ 18 января 2009

Я работаю над простым приложением 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 ()).

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

1 Ответ

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

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

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

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

...