I had to do something like this a long time ago. The trick is to keep
track of the last menu item that was rolled over.

The following code should get you started toward a solution (Note: This
is very old code from when I was just beginning Flex).
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
layout="absolute"
     creationComplete="onCreationComplete()">
     <mx:Script>
         <![CDATA[
             import mx.controls.Menu;
             import mx.events.MenuEvent;
             import mx.controls.Alert;
             import mx.collections.*;

             [Bindable]private var menuBarCollection:XMLListCollection;
             private var currentMenuItem:String = "";
             private var menuXML:String =     '<menuitem label="Menu"
data="top">'
                                         +        '<menuitem label="Menu
Item 1" data="Item 1"/>'
                                         +        '<menuitem
label="SubMenu 1" data="top">'
                                         +            '<menuitem
label="SubMenu 1 Item 1" data="Item 1"/>'
                                         +            '<menuitem
label="SubMenu 1 Item 2" data="Item 2"/>'
                                         +        '</menuitem>'
                                         +        '<menuitem
label="SubMenu 2" data="top">'
                                         +            '<menuitem
label="SubMenu 2 Item 1" data="Item 1"/>'
                                         +            '<menuitem
label="SubMenu 2 Item 2" data="Item 2"/>'
                                         +        '</menuitem>'
                                         +    '</menuitem>';

             private function onCreationComplete():void
             {
                 menuBarCollection = new
XMLListCollection(XMLList(menuXML));
                 for(var i:int = 0 ; i < menuBarCollection.length ; i++)
                 {
                    
menuBar.getMenuAt(i).addEventListener(MouseEvent.CLICK,
menuItemClickHandler);
                    
menuBar.getMenuAt(i).addEventListener(MenuEvent.ITEM_ROLL_OVER,
rollOverHandler);
                 }
             }

             private function menuHandler(event:MenuEvent):void
             {
                 if ([EMAIL PROTECTED] != "top")
                 {
                     Alert.show([EMAIL PROTECTED] + "\n" +
[EMAIL PROTECTED]);
                 }
             }

             private function menuItemClickHandler(event:MouseEvent):void
             {
                 if(currentMenuItem.length > 0)
                 {
                     Alert.show("SubMenu Clicked: " + currentMenuItem);
                 }
             }

             private function rollOverHandler(event:MenuEvent):void
             {
                 currentMenuItem = [EMAIL PROTECTED] == "top" ?
[EMAIL PROTECTED] : "";
             }

         ]]>
     </mx:Script>
     <mx:MenuBar id="menuBar" labelField="@label"
itemClick="menuHandler(event)" dataProvider="{menuBarCollection}" />
</mx:Application>



--- In [email protected], "Tracy Spratt" <[EMAIL PROTECTED]> wrote:
>
> Maybe a custom MenuBarItemRenderer would solve this.  Just guessing,
> though.
>
> Tracy
>
>
>
> ________________________________
>
> From: [email protected] [mailto:[EMAIL PROTECTED]
On
> Behalf Of Tracy Spratt
> Sent: Friday, September 26, 2008 8:57 PM
> To: [email protected]
> Subject: RE: [flexcoders] Listen itemClick Event on MenuBar
>
>
>
> Hmm, I have use the "click" event with top-level menu items with no
> children and it fires, but the click event does not fire on sub menu
> items with children.
>
>
>
> I couldn't get MouseDown or up to fire either.
>
>
>
> I am stumped.
>
>
>
> Tracy
>
>
>
> ________________________________
>
> From: [email protected] [mailto:[EMAIL PROTECTED]
On
> Behalf Of Andres Serral
> Sent: Friday, September 26, 2008 8:45 AM
> To: [email protected]
> Subject: RE: [flexcoders] Listen itemClick Event on MenuBar
>
>
>
> Tracy.
>
> Maybe I don't explain very well.
>
>
>
> Look in the next menu structure... I want to capture the event click
on
> "SubMenu 1.1"
>
>
>
> Menu
>
>     ->SubMenu 1
>
>         -> "SubMenu 1.1"
>
>             -> SubMenu 1.1.1
>
>             -> SubMenu 1.1.2
>
>         -> SubMenu 1.2
>
>             -> SubMenu 1.2.1
>
>             -> SubMenu 1.2.2
>
>     ->SubMenu 2
>
>         -> SubMenu 1.1
>
>         -> SubMenu 1.2
>
>
>
> I looked at the SDK source that the itemClick event only is dispatched
> when the node hasn't childrens
>
>
>
> here is an example
>
>
>
> <?xml version="1.0" encoding="utf-8"?>
> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml
> <http://www.adobe.com/2006/mxml> " layout="absolute"
>  creationComplete="initCollections();"
>  >
>
>  <mx:Script>
>   <![CDATA[
>    import mx.collections.XMLListCollection;
>    import mx.events.MenuEvent;
>
>   private function menuItemClickHandler(event:MenuEvent):void  {
>
>               trace([EMAIL PROTECTED] <mailto:[EMAIL PROTECTED] );
>   }
>
>   private function initCollections():void {
>    menuBarCollection = new XMLListCollection(menubarXML);
>   }
>
>
>
>   [Bindable]
>   public var menuBarCollection:XMLListCollection;
>
>
>
>   private var menubarXML:XMLList =
>   <>
>       <menuitem label="Sub Menu 1">
>       <menuitem label="Sub Menu 1.1">
>     <menuitem label="MenuItem 1.1.1"/>
>     <menuitem label="MenuItem 1.1.2"/>
>    </menuitem>
>    <menuitem label="Sub Menu 1.2" />
>       </menuitem>
>       <menuitem label="Sub Menu 2">
>       <menuitem label="Sub Menu 2.1" />
>       <menuitem label="Sub Menu 2.2" />
>       </menuitem>
>   </>;
>
>
>   ]]>
>  </mx:Script>
>
>
>  <mx:MenuBar
>   labelField="@label"
>   dataProvider="{menuBarCollection}"
>   itemClick="menuItemClickHandler(event)"
>   />
>
> </mx:Application>
>
>
>
> Andres
>
>
>
> ________________________________
>
> From: [email protected] [mailto:[EMAIL PROTECTED]
On
> Behalf Of Tracy Spratt
> Sent: Thursday, September 25, 2008 9:34 PM
> To: [email protected]
> Subject: RE: [flexcoders] Listen itemClick Event on MenuBar
>
> This is an aggravating aspect of Menu.
>
> You have to listen for both itemClick and click.
>
> Tracy
>
> ________________________________
>
> From: [email protected] [mailto:[EMAIL PROTECTED]
On
> Behalf Of Andres Serral
> Sent: Thursday, September 25, 2008 3:54 PM
> To: [email protected]
> Subject: [flexcoders] Listen itemClick Event on MenuBar
>
> Hello people
>
> I have a problem... someone maybe can help me
>
> The MenuBar control doesn't dispatch the "itemClick" event on items
that
> has childrens.
>
> Anybody knows how can I capture the click event on any item (with
> childrens or  without them)?
>
> Thanks
>
> Andres
>

Reply via email to