2011-09-12 5 views
1

나는 (플렉스 3.5에서) 트리를 가지고 있으며, 드래그 & 드롭 기능을 사용하고 싶지만 사용자가 노드를 이동하고 복사하지 못하게하고 싶습니다. dragOver 이벤트를 수신 대기하고 드래그 이벤트의 액션 속성을 복사 작업을 나타내는 것으로 변경하고 keyDown 이벤트를 수신하고 Ctrl 키를 누른 상태에서 Ctrl 키를 사용하여 피드백을 변경했지만 아무런 효과가없는 경우 시도했습니다.플렉스 트리의 드래그 앤 드롭으로 이동 전용

다른 사람이 있습니까? 감사합니다. .

답변

0

당신은 모두가 매우 간단 보호되기 때문에 복사 피드백을 표시하지 않기 위해, 나무에 dragEnterHandler, dragOverHandlerdragDropHandler 기능을 대체 할 수 있습니다 및 사용자가 드래그를 통해 복사 할 수 있도록하지 : 오버라이드 (override)하는 모든

override protected function dragEnterHandler(event:DragEvent):void 
{ 
    // ... 
} 

override protected function dragOverHandler(event:DragEvent):void 
{ 
    // ... 
} 
+0

내가 말했듯이, 나는 이미 dragOver 핸들러를 덮어 쓰고 피드백을 변경하려고 시도했지만, 작동하지 않았다. 피드백은 그대로 유지되었다. 즉, 복사 모드를 나타 내기 위해 "+"기호를 표시했다. 트리와 DragManager (이동 모드 사용) 모두에서 표시 (놓기) 피드백 함수를 호출했습니다. – user940016

+0

죄송합니다. 실제로 하나의 함수, 즉 'dragEnterHandler'를 재정의해야합니다. 방금 내부 구조를 비워 뒀습니다. DragManager의 피드백이 없었습니다. 삭제가 가능합니다. – moropus

+0

당신이 한 일을 설명해 주시겠습니까? dragEnter 이벤트를 재정 의하여 나를 위해 작동하지 않았다 ... – user940016

2

드래그 핸들러와 아래를 참조 event.action = DragManager.MOVE을 추가

override protected function dragEnterHandler(event:DragEvent):void{ 
     if(event.action == DragManager.COPY) 
      event.action=DragManager.MOVE; 
     super.dragEnterHandler(event); 
    } 

    override protected function dragCompleteHandler(event:DragEvent):void{ 
     if(event.action == DragManager.COPY) 
      event.action=DragManager.MOVE; 
     super.dragCompleteHandler(event); 
    } 

    override protected function dragDropHandler(event:DragEvent):void{ 
     if(event.action == DragManager.COPY) 
      event.action=DragManager.MOVE; 
     super.dragDropHandler(event); 
    } 

    override protected function dragExitHandler(event:DragEvent):void{ 
     if(event.action == DragManager.COPY) 
      event.action=DragManager.MOVE; 
     super.dragExitHandler(event); 
    } 

    override protected function dragOverHandler(event:DragEvent):void{ 
     if(event.action == DragManager.COPY) 
      event.action=DragManager.MOVE; 
     super.dragOverHandler(event); 
    } 

    override protected function dragStartHandler(event:DragEvent):void{ 
     if(event.action == DragManager.COPY) 
      event.action=DragManager.MOVE; 
     super.dragStartHandler(event); 
    } 

이 유일한 목록 이동 .. 및 wudnot 지원 복사본을 만들 것입니다.

0

Tree 클래스를 확장하는 대신 (불필요하게) dragOver, dragDrop에 대한 자체 이벤트 핸들러를 추가하여 위 응답과 동일한 로직을 구현할 수 있습니다. 우리의 이벤트 핸들러는 앞에 을 실행하고 기본 이벤트를 처리하므로 조치와 같은 이벤트 속성을 수정할 수 있습니다. 그러므로 한 예가 될 것입니다.

<mx:DataGrid id="datagrid" dragEnabled="true" dropEnabled="true" 
    dragMoveEnabled="true" dragEnter="datagrid_dragEnterHandler(event)" 
    dragDrop="datagrid_dragDropHandler(event)" 
    dragOver="datagrid_dragOverHandler(event)"/> 
.... 
protected function datagrid_dragDropHandler(event:DragEvent):void { 
    event.action = DragManager.MOVE; 
} 
protected function datagrid_dragOverHandler(event:DragEvent):void { 
    event.action = DragManager.MOVE; 
} 
0

클래스를 확장해야합니다. Sab Than의 답변에서 기본 클래스 핸들러가 호출되므로 액션을 무시하면 쓸모 없게됩니다. 기본 클래스 핸들러가 호출되기 전에 액션 유형을 재정의해야합니다.

관련 문제