关于MenuBar

~~~~~~~~~~~~~~~~~~~~~~~~ 写给自己看的~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

比如一个myMenu的MenuBar,其实数据源就跟我们平常用的软件菜单栏一样,有子菜单弹出菜单,如果我们给myMenu添加MenuEvent.ITEM_ROLL_OVER事件,然后在鼠标滑动的时候得到myMenu的菜单索引(trace((e.target as MenuBar).selectedIndex);),将会发现顶级菜单的selectIndex全部都是-1,子菜单为顶级菜单在菜单栏中的索引值。如果是利用MenuEvent.index(trace(e.index);)得到myMenu的菜单索引,无论是顶级菜单还是子菜单都会得到正确结果,但如果想利用得到的索引值来触发一些事件或做些什么将会引起一些预料之外的麻烦,因为这时的索引值所对应的菜单项并不唯一。MenuEvent.index指的是相关联菜单项在其父菜单或子菜单中的索引。

点击Menubar的顶级菜单不触发MenuEvent.ITEM_CLICK这个事件,该事件由子菜单触发,侦听函数(trace((e.target as MenuBar).selectedIndex);),得到的索引跟MenuEvent.ITEM_ROLL_OVER事件一样,值为顶级菜单在菜单栏中的索引值。帮助文档中说

selectedIndex : int
MenuBar 控件中当前打开的菜单或上一次打开的菜单(如果当前没有打开菜单)的索引。

我想的理解能力在待加强.可是不明白那个-1是怎么来的!!!!!!!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
现在思路挺乱的,完全不明白它的原理流程之类的,这样的学习效果是非常差的~~~~~~~有点郁闷~~~好想有个人指导下~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果需要当鼠标位于顶级菜单的某一项时,转而执行某一特定代码。这个时个就像上面所说用selectIndex或者e.index都不大合适,可以试着利用MenuEvent.MENU_SHOW事件,再利用(e.target as MenuBar).selectedIndex得到该选择的菜单在顶级菜单中的索引,再利用这个索引值,转而执行其他的代码。

MenuEvent.MENU_SHOW  当弹出子菜单打开或用户选择的菜单栏项目没有下拉菜单时调度。也就是说在菜单由隐藏到显示或者是MenuBar获得焦点时调试。
MenuBar的selectIndex是指子菜单索引而不是下拉菜单索引。

而MenuEvent.ITEM_CLICK是对MenuBar的下拉菜单的事件,唉~好像搞个图弄下~,总之去尝试下,很快就会明白的。

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
height="300" width="500"   initialize="initApp()" >
    <mx:Script> 
        <![CDATA[
        import mx.events.MenuEvent;
        import flash.events.MouseEvent;
       
        public var menubarXMLList:XMLList;
        public function initApp():void
        {
        menubarXMLList=new XMLList(menuBarXML.item);
        myMenu.dataProvider=menubarXMLList;
            myMenu.addEventListener(MenuEvent.MENU_SHOW,menuShowHandler);
            myMenu.addEventListener(MenuEvent.ITEM_CLICK,clickHandler);
        }
       
        function clickHandler(e:MenuEvent):void
        {
             trace("click");
            trace(e.item.@label);
        }

        function menuShowHandler(e:MenuEvent):void
        {
        trace((e.target as MenuBar).selectedIndex);
       
        }


        ]]> 
    </mx:Script> 
    <mx:XML id="menuBarXML" source="MenuBar.xml"/>
     <mx:MenuBar labelField="@label"  height="30" id="myMenu"  width="100%"></mx:MenuBar>
</mx:WindowedApplication>

你可能感兴趣的:(xml,Flash)