Actionscript 3 检测网格中滚动条的出现/消失

Actionscript 3 检测网格中滚动条的出现/消失,actionscript-3,apache-flex,actionscript,flex3,Actionscript 3,Apache Flex,Actionscript,Flex3,我有一个网格组件,它的垂直滚动策略设置为“自动”。 每当verticalScrollBar出现或消失时,我都想处理这个事件 我尝试收听调整大小事件: private function onGridResize(event:Event):void { if (_grid.verticalScrollBar && _grid.verticalScrollBar.visible) { trace("scroll on")

我有一个网格组件,它的垂直滚动策略设置为“自动”。 每当verticalScrollBar出现或消失时,我都想处理这个事件

我尝试收听调整大小事件:

    private function onGridResize(event:Event):void
    {
       if (_grid.verticalScrollBar && _grid.verticalScrollBar.visible)
       {
           trace("scroll on");
       }
       else
       {
           trace("scroll off");
       }
    }
但它不起作用:在我看来,调整大小事件实际上是在网格可视化更新和滚动条出现/消失之前发出的。 我尝试了监听ChildExistenceChangedEvent.CHILD\u添加和ChildExistenceChangedEvent.CHILD\u删除事件,但对我来说也不起作用

也许我只是看不到什么明显的解决办法。
提前感谢您的帮助或建议。

也许您可以收听
滚动条本身的“显示”事件。这样做应该会奏效:

_grid.verticalScrollBar.addEventListener(ComponentEvent.SHOW, onGridResize);
我还没有测试过这个,但我很确定它应该能工作。(当然,您可能希望将
onGridResize
重命名为更合适的名称,如
onVerticalScrollShow

顺便说一下,您不必检查
滚动条是否存在;至少在纯AS3中,它们与
DataGrid
一起被实例化,并且不考虑它们的
ScrollPolicy
值而存在


resize事件显示为立即触发的原因是,一旦其维度发生更改,它就会被调度。我假设在您的应用程序中,用户拖动以手动调整网格的大小,因此一旦进行任何调整,事件就会触发。

您不指定哪个网格。(Spark、MX或我们的其中一个())

您可以做的一件事是在检查之前抛出validateNow:

private function onGridResize(event:Event):void
    {
       _grid.validateNow(); //add this.

       if (_grid.verticalScrollBar && _grid.verticalScrollBar.visible)
       {
           trace("scroll on");
       }
       else
       {
           trace("scroll off");
       }
    }
你也可以做的另一件事,就是使用定时器或稍后打电话

private function onGridResize(event:Event):void
    {
       callLater(checkForScrollBar); //check for scrollbar would have the code above.
    }

感谢您的快速回复!我现在已经尝试过了,但当我尝试启动应用程序时,我得到了以下错误:“error#1009:无法访问空对象引用的属性或方法:_grid.verticalScrollBar.addEventListener(ComponentEvent.SHOW,onGridResize);这是因为当滚动条未显示时,它实际上并不存在。我在基本组件容器中找到了合适的代码块。正如:滚动条每次出现时都会被创建,每次隐藏时都会被销毁。啊,这太糟糕了。我很确定它总是存在的,尽管Flex组件的工作方式可能与Flash组件不同。在这种情况下,不幸的是,除了每一帧检查
滚动条的存在之外,我想不出其他什么了。现在我的问题解决了。无论如何,非常感谢你的帮助和建议。非常感谢你的帮助!“_grid.validateNow();”完全适合我!现在一切都按我的要求进行了。再次感谢你!p、 在这个例子中,我使用的是MX组件。