我有一棵樹(在Flex 3.5中),我想使用拖放功能,但我想讓用戶只移動節點,而不是複製它們。我嘗試監聽dragOver事件,如果它指示覆制操作,則更改拖動事件的操作屬性,並且如果按下的按鍵是ctrl,則監聽keyDown事件並使用DragManager更改反饋,但無濟於事。在Flex樹中拖放只能移動
有沒有人有另一個想法? 謝謝。
我有一棵樹(在Flex 3.5中),我想使用拖放功能,但我想讓用戶只移動節點,而不是複製它們。我嘗試監聽dragOver事件,如果它指示覆制操作,則更改拖動事件的操作屬性,並且如果按下的按鍵是ctrl,則監聽keyDown事件並使用DragManager更改反饋,但無濟於事。在Flex樹中拖放只能移動
有沒有人有另一個想法? 謝謝。
您可以覆蓋dragEnterHandler
,dragOverHandler
和dragDropHandler
功能樹,因爲所有的保護和相當簡單,爲了不顯示覆制的反饋,而不是允許用戶通過拖動複製:
override protected function dragEnterHandler(event:DragEvent):void
{
// ...
}
override protected function dragOverHandler(event:DragEvent):void
{
// ...
}
超越控制所有拖動處理程序,並添加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支持拷貝。
除了擴展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;
}
你必須擴展這個類。在Sab Than的回答中,基類處理程序將被調用,因此,覆蓋該行爲將變得毫無用處。所以在調用基類處理程序之前,我們需要覆蓋動作類型。
正如我所說的,我已經嘗試覆蓋dragOver處理程序並更改反饋,但它不起作用,反饋保持原樣,即顯示「+」號表示複製模式,儘管我在樹和DragManager(使用移動模式)上都調用了show(Drop)Feedback功能。 – user940016
對不起,實際上你需要重載一個函數 - 'dragEnterHandler'。我只是試圖讓它的內部變成空的 - 而且它的工作,沒有DragManager的反饋,這是允許下降。 – moropus
你能解釋我做了什麼嗎?覆蓋dragEnter事件對我來說不起作用... – user940016