Быстрый способ узнать источник полосы прокрутки?

#actionscript-3 #flex3 #mxml

#actionscript-3 #flex3 #mxml

Вопрос:

Всякий раз, когда я использую множество вложений внутри компонентов mxml (включая множество состояний) с довольно большим количеством Vboxs и других контейнеров, я всегда путаюсь, когда вижу, что на экране появляется полоса прокрутки, особенно с datagrid внутри нее (я всегда хочу показывать полосу прокрутки в datagrid, а не в родительском контейнере, для которого я обычно устанавливаю высоту и ширину datagrid меньше, чем его родительский контейнер во время выполнения). контейнер).

Мой вопрос в том, как я мог бы узнать (БЫСТРО), используя debugger, какой компонент является источником полосы прокрутки, которую я вижу на экране (если их несколько, то некоторые свойства компонента должны меняться при прокрутке его вверх или вниз).

Спасибо.

Комментарии:

1. Никто? По сути, я спрашиваю, за каким свойством контейнера мне следует следить, чтобы определить во время выполнения, чью полосу прокрутки я перемещаю на экране… Спасибо…

Ответ №1:

Я понимаю, что в этом ответе не используется отладчик напрямую. Я имею в виду это как идею для действительно простого инструмента.

Я быстро собрал простое приложение, функция которого заключается в том, чтобы сообщать, какой отображаемый объект отправляет событие колеса мыши. Для приложения не имеет значения, есть полоса прокрутки или нет, но я думаю, вы могли бы настроить ее в соответствии со своими потребностями. На самом деле это быстрое начало, вот код…

 <?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" minWidth="955" minHeight="600"
                creationComplete="init()">
    <mx:HBox id="HBoxWithScrollbar" width="600" height="500">
        <mx:HBox width="800" height="800">
        </mx:HBox>
    </mx:HBox>
    <mx:TextArea id="record" height="300" width="600"/>
    <mx:Script>
        <![CDATA[
            private function init():void{
                record.text = 'Scroll Recordn';
                this.addEventListener(MouseEvent.MOUSE_WHEEL, recordObject);
                for each (var obj:DisplayObject in this.getChildren()){
                    obj.addEventListener(MouseEvent.MOUSE_WHEEL, recordObject);
                }
            }

            protected function recordObject(event:MouseEvent):void{
                record.text  = (event.target as DisplayObject).toString()   'n';
            }

        ]]>
    </mx:Script>
</mx:Application>
  

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

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/InteractiveObject.html#event:mouseWheel

Как только вы получите доступ к этому событию, у вас появятся варианты.

Это было создано с использованием версии 3.6 Flex SDK, но для создания версии 4.x не потребовалось бы много времени. Я просто отображаю значение «toString ()» целевого отображаемого объекта, но это может быть любой атрибут, который вы хотите. Вероятно, вы захотите включить некоторую обработку ошибок для цикла добавления событий, а также в обработчик событий. Как я уже сказал, это только начало, и я надеюсь, что это поможет.