将列表项拖到itemeditor

时间:2012-05-29 17:18:36

标签: actionscript-3 flex flash-builder

我使用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));

        }

请帮帮我。 感谢

1 个答案:

答案 0 :(得分:0)

我没有确切的答案,但要研究的一个方面是使用getObjectsUnderPoint()方法(来自DisplayObjectContainer)。使用一个点 - 来自Drag / Mouse事件的局部坐标系。这将让您查看显示树的“右侧”分支。

我认为你很难弄明白的是确切地知道你要与之交互的元素 - 在这种情况下是项目编辑器。在迭代可疑列表时,您需要将其与已知ItemEditor(IGridItemRenderer)而不是其他对象的接口进行比较。

同样取决于mouseX / mouseY坐标所在的参考,您很可能需要将其转换为项目编辑器所在的相同坐标系 - 在这种情况下,编辑器由PopupManager(或SystemManager)处理) - 或者应该是Flex SDK团队遵循与spark相同的范例 - 但我没有验证这一点。

我无法从你的问题的措辞中看出来,但是如果你试图在项目编辑器打开后放置项目 - 由于焦点管理,这将变得非常困难。