首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > flex >

menuBar中itemClick的点击事件不响应解决方案

2012-08-03 
menuBar中itemClick的点击事件不响应?xml version1.0 encodingutf-8?s:Application xmlns:fxht

menuBar中itemClick的点击事件不响应
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
xmlns:s="library://ns.adobe.com/flex/spark" 
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<s:layout>
<s:BasicLayout/>
</s:layout>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.events.MenuEvent;
[Bindable]
private var arr:ArrayCollection=new ArrayCollection([{"label":"关注图层","data":1},{"label":"属性查询","data":2},{"label":"空间查询","data":3},{"label":"周边查询","data":4},{"label":"撒点","data":5}]);
//private function opentoolQuery(n:Number):void{
//Alert.show(n.toString());
//}
private function menuHandler(event:MenuEvent):void{
Alert.show("right");
}


protected function myMenu_itemClickHandler(event:MenuEvent):void
{
Alert.show("right");
}

]]>
</fx:Script>
<mx:MenuBar id="myMenu" x="110" y="40" width="571" height="24"  
dataProvider="{arr}" labelField="label"
itemClick="myMenu_itemClickHandler(event)" >


</mx:MenuBar>
</s:Application>

itemClick的点击事件为什么不响应啊?在线等-----

[解决办法]
MenuBar 控件定义包含一个或多个菜单的顶级水平菜单栏。单击顶级菜单项会打开一个弹出子菜单,该菜单是一个 Menu 控件实例。 
通常,MenuBar 控件的顶级菜单栏始终可见。此控件不适合用作弹出菜单。当用户使用鼠标或键盘进行选择时,将弹出相应的子菜单。如果选择了某个菜单项,或者用户通过在菜单外单击取消了该菜单,打开的子菜单将会消失。

itemClick是监控不到menubar的顶级菜单的,itemClick只是和Menu这个类有关,而menubar只是能"CALL"出Menu 的MenuBarItem的集合.但用menubar的change侦听器能监控到点击顶级按钮的事件,不过我在FLEX3正式版测试发现点击一次 menubar的顶级按钮会出发两次change事件,如果用change事件来处理某些问题是很麻烦. 

我解决该类问题的方法如下: 
比如有个id为TopMenu的menubar 

我用两个侦听器来监测menubar的点击时间,一个是Menu的itemClick事件还有一个是click事件. 

就是说用Menu的itemClick的事件还监测子Menu的点击事件,再用click事件检测menubar的顶级菜单的点击事件. 

具体: 
//itemClick事件 
private function menuItemClick(e:MenuEvent):void 

trace(e.label) 

//MouseEvent 
private function doClick():void 

//用MenuBarItem.data是否为空来判断该MenuBarItem是否有子Menu,如果有 
就不触发事件,这个可以根据自己的需要来设置 
if(TopMenu.selectedIndex!=-1&&MenuBarItem(TopMenu.getChildAt(TopMenu.selectedIndex+1)).data=="") 

trace(MenuBarItem(TopMenu.getChildAt(TopMenu.selectedIndex+1)).data.@name); 
//激活所有MenuBar的顶级MenuBarItem 
activeMenu(); 
//使点过的按钮不能再点 
MenuBarItem(TopMenu.getChildAt(TopMenu.selectedIndex+1)).enabled=false; 


//激活所有MenuBar的顶级MenuBarItem 
private function activeMenu():void 

for each(var item:MenuBarItem in TopMenu.menuBarItems) 

item.enabled=true; 

}
MenuBar:
<mx:MenuBar id="TopMenu" itemClick="menuItemClick(event)" click="doClick()" showRoot="false"/>

正如上面,不仅可以解决MenuBar的一些不方便的地方,而且使其具有了一定的记忆功能.


出自: http://hi.baidu.com/onino_info/blog/item/b6aecb1bd8423fdcac6e7514.html

热点排行