如何让数据网格像ctrl键一样活动?

时间:2010-02-26 20:37:32

标签: flex actionscript-3 actionscript datagrid flex3

我希望我的数据网格默认运行,就像用户按住控制键一样。因此,当单击某个项目时,另一个项目它们都是选择的一部分,再次单击它们将从选择中删除它们。

我已经有allowMultipleSelection = true但我似乎无法找到任何设置来执行此操作。我正在同时处理itemclick事件,但似乎可能有一个易于使用的设置我不知道。

有什么想法吗?

3 个答案:

答案 0 :(得分:6)

您还可以扩展DataGrid并覆盖selectItem方法,如下所示:

override protected function selectItem(item:IListItemRenderer, shiftKey:Boolean, ctrlKey:Boolean, transition:Boolean = true):Boolean
{
    return super.selectItem(item, shiftKey, true, transition )
}

代码减少,不太可能对可能正在侦听MouseEvent的其他元素产生影响。

答案 1 :(得分:0)

您可以尝试将事件侦听器添加到具有最高优先级的MouseEvents(UP和/或DOWN)的网格中,停止传播,并在原始event.target上重新分配具有相同属性的新MouseEvent,但这次使用ctrlKey =真。

我不确定它是否会导致其他10,000件事情破裂。

答案 2 :(得分:0)

我尝试了Nalandial的想法,但没有运气......无法真正拦截这些事件,但它让我朝着正确的方向前进。在这方面做了很多工作然后发现解决方案比我制作它简单得多。我只需要扩展dataGrid类并覆盖两个函数(mouseDownHandler和mouseClickHandler),然后在那里添加ctrlKey = true,然后完美地调用函数的其余部分。如果你想实现它,这里是代码:

package com{
    import flash.events.MouseEvent;
    import mx.controls.DataGrid;

    public class ForceCtrlDataGrid extends DataGrid{
        public function ForceCtrlDataGrid(){
            super();
        }
        override protected function mouseClickHandler(event:MouseEvent):void{
            event.ctrlKey = true;
            super.mouseClickHandler(event);
        }
        override protected function mouseDownHandler(event:MouseEvent):void{
            event.ctrlKey = true;
            super.mouseDownHandler(event);
        }
    }
}