Как заставить сетку данных вести себя так, как работает клавиша Ctrl? - PullRequest
4 голосов
/ 26 февраля 2010

Я хочу, чтобы моя сетка данных по умолчанию работала так, как если бы пользователь удерживал нажатой клавишу управления. Поэтому, если щелкнуть элемент, другой элемент, оба они являются частью выделения, повторное нажатие на них удаляет их из выбора.

У меня уже есть allowMultipleSelection = true, но я не могу найти ни одной настройки, которая делает это. В то же время я работаю над событием itemclick, но, похоже, мне может не хватать удобной настройки.

Есть мысли?

Ответы [ 3 ]

6 голосов
/ 27 февраля 2010

Вы также можете расширить DataGrid и переопределить метод selectItem следующим образом:

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

Меньше кода и меньше вероятность влияния на другие элементы, которые могут прослушивать это MouseEvent.

0 голосов
/ 27 февраля 2010

Я испробовал идею Наландиала, но безуспешно ... не могу перехватить эти события, но это заставило меня двигаться в правильном направлении. Много поработал над этим, потом обнаружил, что решение было намного проще, чем я его делал. Мне просто нужно было расширить класс 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);
        }
    }
}
0 голосов
/ 27 февраля 2010

Вы можете попробовать добавить прослушиватели событий в сетку для MouseEvents (UP и / или DOWN) с наивысшим приоритетом, остановить распространение и повторно отправить новый MouseEvent с теми же свойствами в исходном event.target, но на этот раз с помощью ctrlKey = правда.

Я не уверен, что это приведет к поломке 10 000 других вещей.

...