No combobox acima, quando você pressiona a tecla Ctrl, é possível selecionar mais que uma opção.
Para conseguir esse resultado é necessário
estender o componente combobox criando um novo componente como mostra o
código abaixo:
Arquivo ComboBoxs.as
package br.combobox<br />{<br />import flash.events.Event;<br />import flash.events.KeyboardEvent;<br />import flash.text.TextLineMetrics;<br />import mx.controls.ComboBox;<br />import mx.events.ListEvent;<br /> <br /> public class ComboBoxs extends ComboBox<br /> {<br /> private var ctrlKey:Boolean = false;<br /> private const multiplaSelecao:String = 'Múltipla Seleção'<br /> <br /> override public function set initialized(value:Boolean):void<br /> {<br /> super.initialized = value;<br /> if(value)<br /> resize();<br /> }<br /> <br /> override protected function keyDownHandler(event:KeyboardEvent):void<br /> {<br /> super.keyDownHandler(event);<br /> <br /> ctrlKey = event.ctrlKey;<br /> <br /> if(ctrlKey)<br /> dropdown.allowMultipleSelection = true;<br /> }<br /> <br /> override protected function keyUpHandler(event:KeyboardEvent):void<br /> {<br /> super.keyUpHandler(event);<br /> ctrlKey = event.ctrlKey;<br /> if(!ctrlKey) <br /> {<br /> close(); <br /> var changeEvent:ListEvent = new ListEvent(ListEvent.CHANGE)<br /> dispatchEvent(changeEvent);<br /> }<br /> }<br /> <br /> override public function close(trigger:Event=null):void<br /> {<br /> if(!ctrlKey)<br /> {<br /> super.close(trigger);<br /> if(dropdown.selectedItems.length > 1)<br /> textInput.text = multiplaSelecao; <br /> }<br /> }<br /> <br /> private function resize():void<br /> {<br /> var lineMetrics:TextLineMetrics; <br /> lineMetrics = measureText(multiplaSelecao);<br /> var newWidth:Number = lineMetrics.width;<br /> newWidth += getStyle("arrowButtonWidth") + getStyle("paddingLeft") + getStyle("paddingRight") + 8;<br /> this.width = Math.max(this.width, newWidth);<br /> }<br /> <br /> public function set selectedItems(value:Array):void<br /> {<br /> if(dropdown)<br /> dropdown.selectedItems = value;<br /> }<br /> <br /> [Bindable("change")]<br /> public function get selectedItems():Array<br /> {<br /> if(dropdown)<br /> return dropdown.selectedItems;<br /> else<br /> return null;<br /> }<br /> <br /> public function set selectedIndices(value:Array):void<br /> {<br /> if(dropdown)<br /> dropdown.selectedIndices = value;<br /> }<br /> <br /> [Bindable("change")]<br /> public function get selectedIndices():Array<br /> {<br /> if(dropdown)<br /> return dropdown.selectedIndices;<br /> else<br /> return null;<br /> }<br /> }No arquivo MXML.
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="br.combobox.*" height="128" width="276"><br /><mx:Script><br /> <![CDATA[<br /> <br /> public function retornaSelecao(arTemp:Array,campo:String):String<br /> {<br /> var retorno:String = '';<br /> for(var i:int = 0; i<arTemp.length; i++)<br /> { <br /> if(retorno != '')<br /> retorno += ',';<br /> retorno += arTemp[i][campo];<br /> }<br /> return retorno; <br /> } <br /> <br /> <br /> ]]><br /></mx:Script><br /> <ns1:ComboBoxs y="10" id="cbMultiplo" labelField="label" prompt="Selecione" change="{lbSelecao.text = 'Valor selecionado: ' + retornaSelecao(cbMultiplo.selectedItems,'valor')}" horizontalCenter="0"><br /> <ns1:dataProvider><br /> <mx:Array><br /> <mx:Object label='Valor 1' valor='1'/><br /> <mx:Object label='Valor 2' valor='2'/><br /> <mx:Object label='Valor 3' valor='3'/><br /> <mx:Object label='Valor 4' valor='4'/><br /> </mx:Array><br /> </ns1:dataProvider><br /> </ns1:ComboBoxs> <br /> <mx:Label y="40" id="lbSelecao" width="219" horizontalCenter="0" textAlign="center"/><br /></mx:Application>Divirta-se!







