拖放DataGrid中下降,拖动过程中自定义光标不工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拖放DataGrid中下降,拖动过程中自定义光标不工作相关的知识,希望对你有一定的参考价值。

我有我想要的用户对行进行排序一个DataGrid。为了使它明显,它的排序我采取了一些自定义光标。但我有一个问题,当我真正拖动项目。

这里的问题的伪示范

应用=正常光标//细

侧翻的DataGrid =开放的手形光标//好为止

上数据网格=闭合的手光标鼠标按下//好

拖动项目周围=收手光标//切换回正常光标(如果我移动它周围实快,我可以看到我的自定义光标瞬间)

鼠标向上在数据网格=开放的手形光标//不知道,当我放下它可以追溯到开手,但如果我按下鼠标,不要移动鼠标了,我有一个封闭的手

数据网格的部署=正常光标//好

DataGrid的代码:

<mx:DataGrid id="sectQuestionsDG" x="10" y="204" width="558" height="277" headerHeight="0" selectable="{editMode}"
dragMoveEnabled="{editMode}" dragEnabled="{editMode}" dropEnabled="{editMode}"
dragDrop="sectQuestReOrder(event);" rollOver="over();" mouseDown="down();" mouseUp="up();" rollOut="out();"/>

职能:

public function over():void{
CursorManager.setCursor(grabCursor,CursorManagerPriority.LOW,0,0);
}
public function down():void{
CursorManager.setCursor(grabbingCursor,CursorManagerPriority.HIGH,0,0);
}
public function up():void{
CursorManager.setCursor(grabCursor,CursorManagerPriority.LOW,0,0);
}
public function out():void{
CursorManager.removeAllCursors();
}

编辑09年12月17日:我做的一点点进步,我现在这样做对侧翻

var styleSheet:CSSStyleDeclaration = StyleManager.getStyleDeclaration("DragManager");
styleSheet.setStyle("moveCursor", grabbingCursor);
CursorManager.setCursor(grabCursor,CursorManagerPriority.LOW);

这是给我正确的翻滚和正确的阻力,但如果我尝试添加任何功能,再次推出它搞砸了,所以现在我坚持用grabCursor。好像当我设置一个推出它的开火的每一行DataGrid中,同样有鼠标移开,有什么办法避免?

编辑12/21/09:这是一个确认的东西,滚/鼠标输出/火上在数据网格的每个项目。我需要的解决方案是如何防止这一点,只有启动它,当用户将鼠标移出数据网格作为一个整体的。我需要柔性看森林,没有树木。

PS。卷展栏仅在触发时,我拖着每个项目。鼠标移开每个项目的火灾不管


编辑12/21/09,一天的结束: 我已成功地回答我的问题,所以我的赏金推销员都输给我:-(反正因为我的回答解决我的问题,我会奖励赏金给任何人能回答这个问题。我的解决方案使用AS删除卷展栏/滚动而一个用户拖动。在DataGrid,你怎么能不删除部署/侧翻(这样部署不点火每个项目,你在它拖到另一个项目)相同的结果?

答案

如果你正在做的拖累为什么不使用isDragging的财产DragManager你不需要改变光标。不要忘记检查的情况下,你把数据网格外dragExit事件。

N.B有时光标保持与拖动形状后回落,所以你可以在你的sectQuestReOrder删除光标,将其设置回了状态。

样品:

public function over(evt:Event):void{ //on mouse over, added with AS
  if (DragManager.isDragging) // you are dragging so no cursor changed
   return;

  CursorManager.removeAllCursors();
  CursorManager.setCursor(grabCursor,CursorManagerPriority.LOW,-7,-7);
  var styleSheet:CSSStyleDeclaration = StyleManager.getStyleDeclaration("DragManager");
  styleSheet.setStyle("moveCursor",grabbingCursor); //style set for the drag cursor
}
public function down(evt:Event):void{ // on mouse down
    CursorManager.removeAllCursors();
    CursorManager.setCursor(grabbingCursor,CursorManagerPriority.LOW,-7,-7);     
}
public function up(evt:Event):void{
    CursorManager.removeAllCursors();
    CursorManager.setCursor(grabCursor,CursorManagerPriority.LOW,-7,-7);
}
public function out(evt:Event):void{
 if (DragManager.isDragging) // you are dragging so no cursor changed
  return;
 CursorManager.removeAllCursors();
}
public function sectQuestReOrder(e:Event):void{
    // sometime you will be stuck with the moving cursor
    // so after the drop done reset cursor to what you want
 CursorManager.removeAllCursors();
 CursorManager.setCursor(grabCursor,CursorManagerPriority.LOW,-7,-7);
 ...
}
public function onDragExit(e:Event):void {
    // in case you go out of the datagrid reset the cursor
    // so when you do a drop outside you ll not get one of your dragging cursor
 CursorManager.removeAllCursors();
}

而在您的网格中添加dragExit

 <mx:DataGrid 
      id="sectQuestionsDG" 
      x="10" y="204" width="558" height="277" headerHeight="0" 
      selectable="{editMode}"
      dragExit="onDragExit(event)"
      dragMoveEnabled="{editMode}" 
      dragEnabled="{editMode}"
      dropEnabled="{editMode}"
      dragDrop="sectQuestReOrder(event);" 
      rollOver="over(event);" 
      mouseDown="down(event);" 
      mouseUp="up(event);" 
      rollOut="out(event);"/>
另一答案

我想看看mouseout事件,如果它发射确定,当你在拖动过程移动鼠标。我曾经见过拖动的对象不随鼠标移动准确,和一小会儿,鼠标实际上是悬停在另一个对象(导致mouseOut事件火灾,从而改变光标)的情况。

另一答案

OK一些道具来加布里埃尔那里得到我的脑海出一辙,并返回到全模式这个问题。我不得不去通过几个步骤去我的回答

1)从MXML移除侧翻,部署,和MouseUp听众并通过在AS addEventListener方法添加侧翻和rollOut

2)听者dragComplete添加到MXML和分配以前分配给鼠标松开给它的函数

3)改变主功能是:

public function over(evt:Event):void{ //on mouse over, added with AS
    CursorManager.removeAllCursors();
    CursorManager.setCursor(grabCursor,CursorManagerPriority.LOW,-7,-7);
    var styleSheet:CSSStyleDeclaration = StyleManager.getStyleDeclaration("DragManager");
    styleSheet.setStyle("moveCursor",grabbingCursor); //style set for the drag cursor
}
public function down(evt:Event):void{ // on mouse down
    CursorManager.removeAllCursors();
    CursorManager.setCursor(grabbingCursor,CursorManagerPriority.LOW,-7,-7);
    sectQuestionsDG.removeEventListener(MouseEvent.ROLL_OVER,over);
    sectQuestionsDG.removeEventListener(MouseEvent.ROLL_OUT,out);
    //this is why I had to take it off the mxml, can only remove listeners
    //added with the addEventListener, I don't remember where I read that.
}
public function up(evt:Event):void{
    CursorManager.removeAllCursors();
    CursorManager.setCursor(grabCursor,CursorManagerPriority.LOW,-7,-7);
    sectQuestionsDG.addEventListener(MouseEvent.ROLL_OVER,over);
    sectQuestionsDG.addEventListener(MouseEvent.ROLL_OUT,out);
}
public function out(evt:Event):void{
    CursorManager.removeAllCursors();
}

以上是关于拖放DataGrid中下降,拖动过程中自定义光标不工作的主要内容,如果未能解决你的问题,请参考以下文章

自定义光标与拖放没有库的 HTML 元素

是否可以在拖动时更改光标图标,使用 HTML5 原生拖放

GWT 2.4 HTML 5 拖放 APIS - 拖动时更改光标

更改html5拖放功能,使元素看起来附加到光标[重复]

使用图像拖放

文件拖放 HTML5 问题