2008.03.17 17:08

Flex 에서 MXML로 정의한 버튼이 다음과 같이 있다고 가정합니다.

 <mx:Button id="btnAlert"  label="Alert!" />


이 버튼을 클릭할 때 어떠한 동작을 하고자 하면 해당 버튼에 다음과 같이 클릭 이벤트 핸들러를 등록시켜주면 됩니다.

Script ---

public function alert(evt:MouseEvent):void
{
  Alert.show("Hello, Flex!", "Alert");
}

MXML ---

 <mx:Button id="btnAlert" label="Alert!" click="alert(event)" />


만약, 실제 버튼을 클릭하지 않고서 버튼을 클릭한 것과 같은 이벤트를 수동으로 발생시키려면 어떻게 해야할까요?
이럴때 필요한 것이 dispatchEvent 입니다.

dispatchEvent 의 구조는 다음과 같습니다.
objectInstance. dispatchEvent(event:Event)

자세한 설명은 수동에 의한 이벤트의 송출(Dispatch)  에서 참고하도록 하고 본 포스트에서는 생략하겠습니다.


아래에 보여드릴 소스는 캔버스를 MXML로 정의하여 이 캔버스를 클릭하였을때 버튼을 클릭한 것 과 같이 수동으로 이벤트를 발생시킴으로써 버튼을 클릭하였을 때와 같이 팝업이 뜨도록 하고 있습니다.

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="300">

    <mx:Script>
        <![CDATA[
   
        import mx.controls.Alert;

        public function alert(evt:MouseEvent):void
        {
            Alert.show("Hello, Flex!", "Alert");
        }

        public function canvasClick(evt:MouseEvent):void
        {
            btnAlert.dispatchEvent(new MouseEvent(MouseEvent.CLICK));
        }

        ]]>
    </mx:Script>

    <mx:Canvas x="44" y="79" width="200" height="153" backgroundColor="#FF0000" borderStyle="solid"
            cornerRadius="20" click="canvasClick(event)">
        <mx:Label text="Click Here!" horizontalCenter="0" verticalCenter="0"/>
    </mx:Canvas>

    <mx:Button id="btnAlert" x="271" y="137" label="Alert!" click="alert(event)"/>

</mx:Application>

dispatchEvent 를 이용하여 마치 버튼을 클릭한 것 처럼 MouseEvent.CLICK 이벤트를 버튼에 dispatch 함으로써 버튼에서 클릭 이벤트 핸들러로 등록해놓은 alert() 메소드가 실행되게 됩니다.

물론 위의 예제에서는 단순히 클릭시에 Alert 을 띄우는 작업으로 그쳤기에 문제가 없었지만, 실제 클릭이벤트와 관련된 작업이 필요할 경우 새로 생성해준 마우스이벤트 (new MouseEvent(MouseEvent.CLICK)) 상세한 값들을 제어할 필요가 있습니다.

MouseEvent (type:String , bubbles:Boolean = true, cancelable:Boolean = false, localX:Number , localY:Number , relatedObject:InteractiveObject = null, ctrlKey:Boolean = false, altKey:Boolean = false, shiftKey:Boolean = false, buttonDown:Boolean = false, delta:int = 0)

와.. 많다.;;;

신고
Creative Commons License
Creative Commons License
박스농사 | 2008.03.18 09:13 신고 | PERMALINK | EDIT/DEL | REPLY
악, 배아퍼 화장실좀.
Favicon of http://warkyman.tistory.com BlogIcon 검쉰 | 2008.03.18 20:57 신고 | PERMALINK | EDIT/DEL
음?
후니 | 2008.03.18 10:58 신고 | PERMALINK | EDIT/DEL | REPLY
검쉰님아 전에 홈 플젝 할때 이런 기술 사용하시지 않았나요 ㅋㅋ
Favicon of http://warkyman.tistory.com BlogIcon 검쉰 | 2008.03.18 20:57 신고 | PERMALINK | EDIT/DEL
많이 썼지요-ㅋ
박스농사 | 2008.06.10 09:09 신고 | PERMALINK | EDIT/DEL | REPLY
어제 급하게 퍼가니라 댓글 못 남겼어요 ㅋ
검쉰님 글 잘보구 있습니다. ^^;; 막막 퍼갈께요 이해좀 해주세요 ㅎㅎㅎㅎㅎㅎㅎ ㅌㅌㅌㅌㅌㅌㅌㅌㅌㅌㅌㅌ
Favicon of http://warkyman.tistory.com BlogIcon 검쉰 | 2008.06.10 09:36 신고 | PERMALINK | EDIT/DEL
출처만 남겨주시면 괜찮습니다. ;)
요즘 올리는 글들은 코드가 플러그인때문에 제대로 표시 안될 수도 있겠네요 ^^;
phalanx | 2013.02.26 17:35 신고 | PERMALINK | EDIT/DEL | REPLY
헉..정말 필요했는데 감사합니다!!!!!!!
- 덧글 좀..(굽신굽신) : 장문의 덧글은 트랙백을 이용해주세요 ;^)
Name
Password
Homepage
Secret