DevSecOpsARTIGO

Combobox de múltipla de seleção

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!

é Consultor de Inteligência para e-Commerce e já deixou sua marca em grandes empresas como Sadia SA (BRF Foods), CINQ Technologies e Buscapé Company.

Ver perfil