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