我有一棵树(在Flex 3.5中),我想使用拖动和放大器删除功能,但我想让用户只移动节点,而不是复制它们。我尝试监听dragOver事件并更改拖动事件的action属性(如果它指示复制操作),并且还监听keyDown事件并使用DragManager更改反馈如果按下的键是ctrl,但无效。
有人有另一个想法吗? 感谢。
答案 0 :(得分: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支持复制。
答案 1 :(得分:0)
您可以覆盖树中的dragEnterHandler
,dragOverHandler
和dragDropHandler
功能,因为所有功能都受到保护且非常简单,以便不显示副本反馈,也不允许用户通过拖动:
override protected function dragEnterHandler(event:DragEvent):void
{
// ...
}
override protected function dragOverHandler(event:DragEvent):void
{
// ...
}
答案 2 :(得分:0)
我们可以通过为dragOver,dragDrop添加我们自己的事件处理程序来实现与上述答案相同的逻辑,而不是扩展Tree类(不必要)。我们的事件处理程序在之前执行默认值,因此可以修改事件属性,例如action。所以一个例子就是
<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;
}
答案 3 :(得分:0)
你必须扩展课程。在Sab Than的回答中,将调用基类处理程序,因此,覆盖该操作将变得无用。因此,在调用基类处理程序之前,我们需要覆盖操作类型。