0

我与 AIR 合作。

我必须打开窗口,一个带有列表(词汇表),另一个带有数据网格和可编辑单元格。目标是拖动列表中的项目并将其放在 itemEditor(数据网格)上的光标位置。我不知道该怎么做。

这在我用来执行相同操作的代码下方,而不是在 datagrid 中,而是在 textarea 上,它位于同一个 datagrid 窗口中。

// 在第一个窗口(词汇表)

<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));

        }

请帮我。谢谢

4

1 回答 1

0

我没有确切的答案,但要调查的一个领域是使用该getObjectsUnderPoint()方法(来自 DisplayObjectContainer)。使用点 - 来自拖动/鼠标事件的本地坐标系。这将使您查看显示树的“右”分支。

我认为你最难弄清楚的部分是确切地知道你想与哪个元素进行交互——在这种情况下是项目编辑器。在迭代您的可疑列表时,您需要将其与 ItemEditor ( IGridItemRenderer) 已知但没有其他对象的接口进行比较。

此外,根据 mouseX/mouseY 坐标所在的引用,您很可能需要将其转换为项目编辑器所在的相同坐标系 - 在这种情况下,编辑器由 PopupManager(或 SystemManager)处理 - 或如果 Flex SDK 团队遵循与使用 halo 相同的范例,则应该是火花 - 但我还没有验证这一点。

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

于 2012-05-29T20:02:16.860 回答