Хобрук: Ваш путь к мастерству в программировании

Как вы можете программно превратить элемент при наведении курсора в выбранный элемент в дереве/списке?

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

Я думал в строках: myTree.selectedItem = EVENT.TARGET (где EVENT может быть событием mouseover/rightclick/rollOver, а TARGET должен быть узлом/элементом, который в данный момент находится под указателем мыши).

Есть ли способ сделать это (или любым другим способом)?

Ааа, и я хочу сделать это без щелчка левой кнопкой мыши ;-)

Заранее спасибо, Себастьян


  • Добро пожаловать в СО! Некоторые дополнительные усилия будут оценены с вашей стороны. Я думаю, вы идете в правильном направлении. 23.07.2013

Ответы:


1

Я нашел это достаточно интересным, поэтому я спрашиваю, является ли это самым простым способом добиться этого. Во-первых, вместо списка вам нужно добавить прослушиватель rollOver в ItemRenderer, а не в сам список (поскольку event.target и event.currentTarget просто покажут ваш список).

Итак, давайте создадим собственный ItemRenderer и добавим прослушиватель rollOver.

<xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" 
            xmlns:mx="library://ns.adobe.com/flex/mx" 
            autoDrawBackground="true" height="20" rollOver="itemrenderer1_rollOverHandler(event)">
<fx:Script>
    <![CDATA[

        protected function itemrenderer1_rollOverHandler(event:MouseEvent):void
        {
            this.dispatchEvent(new CustomEvent(CustomEvent.SELECT_ITEM, data, true));

        }

    ]]>

    <s:Label id="label1" text="{data.label}"/>

</s:ItemRenderer>

Вам нужно каким-то образом получить значение выбранного элемента (это данные в itemRenderer), поэтому я создал класс CustomEvent только для этого.

package
{
    import flash.events.Event;

    public class CustomEvent extends Event
    {

        public var selectedItem:Object;

        public static const SELECT_ITEM:String = "selectItem";


         public function CustomEvent(type:String, selectedItem:Object, bubbles:Boolean=false, cancelable:Boolean=false)
         {
            super(type, bubbles, cancelable);
            this.selectedItem = selectedItem;
         }
    }
}

затем я добавил eventListener в основной класс и соответственно установил свойство list.selectedItem:

//for the main MXML initializer: 
    this.addEventListener(CustomEvent.SELECT_ITEM, rollOverChangeSelected);


            //and the function:
    protected function rollOverChangeSelected(ce:CustomEvent):void{


            list.selectedItem = ce.selectedItem;

    }

Другой способ: привязываемая переменная Список:

s:List id="list" allowMultipleSelection="true"  selectionColor="red" rollOverColor="red" itemRenderer="customItemRenderer" selectedItem="{_rollOverSelectedItem}">

Переменная и методы set/get:

        [Bindable] public var _rollOverSelectedItem:Object;     

        public function get rollOverSelectedItem():Object
        {
            return _rollOverSelectedItem;
        }

        public function set rollOverSelectedItem(value:Object):void
        {
            _rollOverSelectedItem = value;
        }

и метод rollOver ItemRenderer:

protected function itemrenderer1_rollOverHandler(event:MouseEvent):void
        {

            this.parentApplication.rollOverSelectedItem = data;             

        }

Каков наилучший/правильный способ?

23.07.2013
Новые материалы

Расистский и сексистский робот, обученный в Интернете
Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

Управление состоянием в микрофронтендах
Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

Структуры данных в C ++ - Часть 1
Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

Как я опубликовал свое первое приложение в App Store в 13 лет
Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

Что в лицо
Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..

Почему шаблоны проектирования и почему нет?
Сложность — мать всех проблем в программировании. Программное обеспечение должно быть разработано с точки зрения того, кто его поддерживает, а не того, кто его пишет, потому что программное..