我有我想要的用户对行进行排序一个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();
}