我使用AIR。
我必须使用窗口,一个带有列表(词汇表),另一个带有datagrid和可编辑的单元格。 目标是将列表上的项目拖放到itemEditor(datagrid)上的光标位置。 我不知道该怎么做。
这是我用来执行相同操作的代码,不是在datagrid中,而是在textarea上同一个数据网格窗口上的内容。
//在第一个窗口(词汇表)
<s:List dataProvider="{DP_GlossList2}" id="list2"
labelField="glNom"
dragEnabled="true"
dropEnabled="true"
dragMoveEnabled="true"
click="list2_clickHandler(event)"
height="60%" width="100%"/>
//在第二个窗口:textarea和datagrid
//拖放
protected function retTTAfaire_dragDropHandler(event:DragEvent):void
{
retTTAfaire.text = retTTAfaire.text.substring(0,retTTAfaire.selectionAnchorPosition)+ " "+event.dragSource.dataForFormat("itemsByIndex")[0].glNom+
" "+retTTAfaire.text.substring(retTTAfaire.selectionAnchorPosition+1);
}
protected function retTTAfaire_dragEnterHandler(event:DragEvent):void
{
DragManager.acceptDragDrop(spark.components.TextArea(event.target));
}
请帮帮我。 感谢
答案 0 :(得分:0)
我没有确切的答案,但要研究的一个方面是使用getObjectsUnderPoint()
方法(来自DisplayObjectContainer)。使用一个点 - 来自Drag / Mouse事件的局部坐标系。这将让您查看显示树的“右侧”分支。
我认为你很难弄明白的是确切地知道你要与之交互的元素 - 在这种情况下是项目编辑器。在迭代可疑列表时,您需要将其与已知ItemEditor(IGridItemRenderer
)而不是其他对象的接口进行比较。
同样取决于mouseX / mouseY坐标所在的参考,您很可能需要将其转换为项目编辑器所在的相同坐标系 - 在这种情况下,编辑器由PopupManager(或SystemManager)处理) - 或者应该是Flex SDK团队遵循与spark相同的范例 - 但我没有验证这一点。
我无法从你的问题的措辞中看出来,但是如果你试图在项目编辑器打开后放置项目 - 由于焦点管理,这将变得非常困难。