2010-05-13 2 views
0

코드를 통해 간접적으로 조작 할 수 있도록 텍스트 필드에 이벤트를 수동으로 전달하려고합니다 (예 : 지정된 x/y 좌표 집합에 커서 놓기). 그러나 내 행사는 효과가없는 것 같습니다. 이 모든 테스트가 텍스트 필드에 5 초 후에 효과적으로 텍스트 필드의 TF에 '기록'이벤트와 그들을 재생할에서는 setTimeout을 사용하는 것입니다 않으며, 기본적으로dispatchEvent()를 통해 UI 요소를 조작 할 수 있습니까?

package sandbox { 
import flash.display.Sprite; 
import flash.events.MouseEvent; 
import flash.text.TextField; 
import flash.text.TextFieldType; 
import flash.text.TextFieldAutoSize; 
import flash.utils.setTimeout; 



    public class Test extends Sprite { 
     private var tf:TextField; 
     private var tf2:TextField; 

     public function Test() { 
      super(); 

      tf = new TextField(); 
      tf.text = 'Interact here'; 
      tf.type = TextFieldType.INPUT; 
      addChild(tf); 

      tf2 = new TextField(); 
      tf2.text = 'Same events replayed with five second delay here'; 
      tf2.autoSize = TextFieldAutoSize.LEFT; 
      tf2.type = TextFieldType.INPUT; 
      tf2.y = 30; 
      addChild(tf2); 

      tf.addEventListener(MouseEvent.CLICK, mouseListener); 
      tf.addEventListener(MouseEvent.DOUBLE_CLICK, mouseListener); 
      tf.addEventListener(MouseEvent.MOUSE_DOWN, mouseListener); 
      tf.addEventListener(MouseEvent.MOUSE_MOVE, mouseListener); 
      tf.addEventListener(MouseEvent.MOUSE_OUT, mouseListener); 
      tf.addEventListener(MouseEvent.MOUSE_OVER, mouseListener); 
      tf.addEventListener(MouseEvent.MOUSE_UP, mouseListener); 
      tf.addEventListener(MouseEvent.MOUSE_WHEEL, mouseListener); 
      tf.addEventListener(MouseEvent.ROLL_OUT, mouseListener); 
      tf.addEventListener(MouseEvent.ROLL_OVER, mouseListener); 
     } 


     private function mouseListener(event:MouseEvent):void { 
      //trace(event); 
      setTimeout(function():void {trace(event); tf2.dispatchEvent(event);}, 5000); 
     } 
    } 
} 

:

나는이 현상을 실험하는 테스트를 작성했습니다 tf2. 이벤트가 tf2에서 디스패치되면 콘솔 출력으로 추적됩니다. 이 프로그램을 실행하고 tf를 클릭하면 콘솔 출력은 다음과 같습니다 :

[MouseEvent type="mouseMove" bubbles=true cancelable=false eventPhase=3 localX=0 localY=1 stageX=0 stageY=1 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="rollOver" bubbles=false cancelable=false eventPhase=2 localX=0 localY=1 stageX=0 stageY=1 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="mouseOver" bubbles=true cancelable=false eventPhase=3 localX=0 localY=1 stageX=0 stageY=1 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="mouseMove" bubbles=true cancelable=false eventPhase=3 localX=2 localY=1 stageX=2 stageY=1 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="mouseMove" bubbles=true cancelable=false eventPhase=3 localX=2 localY=2 stageX=2 stageY=2 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="mouseMove" bubbles=true cancelable=false eventPhase=3 localX=2 localY=3 stageX=2 stageY=3 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="mouseMove" bubbles=true cancelable=false eventPhase=3 localX=3 localY=3 stageX=3 stageY=3 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="mouseMove" bubbles=true cancelable=false eventPhase=3 localX=5 localY=3 stageX=5 stageY=3 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="mouseMove" bubbles=true cancelable=false eventPhase=3 localX=6 localY=5 stageX=6 stageY=5 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="mouseMove" bubbles=true cancelable=false eventPhase=3 localX=7 localY=5 stageX=7 stageY=5 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="mouseMove" bubbles=true cancelable=false eventPhase=3 localX=9 localY=5 stageX=9 stageY=5 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="mouseMove" bubbles=true cancelable=false eventPhase=3 localX=10 localY=5 stageX=10 stageY=5 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="mouseMove" bubbles=true cancelable=false eventPhase=3 localX=11 localY=5 stageX=11 stageY=5 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="mouseMove" bubbles=true cancelable=false eventPhase=3 localX=12 localY=5 stageX=12 stageY=5 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="mouseDown" bubbles=true cancelable=false eventPhase=3 localX=12 localY=5 stageX=12 stageY=5 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="mouseUp" bubbles=true cancelable=false eventPhase=3 localX=12 localY=5 stageX=12 stageY=5 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="click" bubbles=true cancelable=false eventPhase=3 localX=12 localY=5 stageX=12 stageY=5 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="mouseMove" bubbles=true cancelable=false eventPhase=3 localX=10 localY=4 stageX=10 stageY=4 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="mouseMove" bubbles=true cancelable=false eventPhase=3 localX=9 localY=2 stageX=9 stageY=2 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="mouseMove" bubbles=true cancelable=false eventPhase=3 localX=9 localY=1 stageX=9 stageY=1 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="mouseOut" bubbles=true cancelable=false eventPhase=3 localX=-1 localY=-1 stageX=-1 stageY=-1 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 
[MouseEvent type="rollOut" bubbles=false cancelable=false eventPhase=2 localX=-1 localY=-1 stageX=-1 stageY=-1 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0] 

우리가 볼 수 있듯이 이벤트가 캡처되고 성공적으로 재생됩니다. 그러나 tf2에서 아무런 변화가 일어나지 않습니다. 마우스 커서는 tf2에 나타나지 않습니다. 사실 커서는 tf2 이벤트가 전달 된 후에도 tf에 남아 있습니다.

도와주세요!

감사합니다, 부유 한

답변

1

당신은 종류의 뒤로 것입니다. 객체를 클릭하고 MouseEvent를 전달하면 기본적으로 세계에 "이봐, 내가 클릭 했어"라고 말하고있다. 이 이벤트는 클릭의 결과입니다. 객체에 이벤트를 보내면 실제로 객체가 클릭되는 것은 아닙니다 (다른 객체가 객체의 이벤트를 수신하는 경우에도 이벤트를 전달하면 이 객체를 클릭했는지 여부와 상관없이 생각 함) 실제로 클릭했는지 여부).

그냥 실험이 아니라면 여기서 무엇을 할 건지 잘 모르겠지만 단순히 tf2에 이벤트를 보내지 않고 원하는 것을 생각하면 tf2 내부에서 무슨 일이 있었는지 해석 할 수 있습니다. 그 사건의 결과로, 그리고 프로그래밍 방식으로 그렇게하십시오.

tf1의 저장된 이벤트 배열을 살펴보고 클릭이 표시되고 tf2를 클릭하면 포커스가 발생한다는 것을 알고 있으면 프로그래밍 방식으로 tf2 포커스를 지정해야합니다.

편집 :

원래의 게시물을 다시 읽기, 난 당신이, y 좌표 특정 X에 커서를 설정하려는 말했다 참조하십시오. TextField.getLineIndexAtPoint(), TextField.getCharIndexAtPoint() 및 TextField.setSelection()을 살펴볼 수 있습니다.

+0

감사합니다. :) – rinogo

관련 문제