O combobox acima, quando você pressiona a tecla Ctrl, é possível selecionar mais que uma opção.

Para conseguir esse resultado é necessário extender o componente combobox criando um novo componente como mostra o código abaixo:

Arquivo ComboBoxs.as

package br.combobox
{
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.text.TextLineMetrics;
import mx.controls.ComboBox;
import mx.events.ListEvent;

	public class ComboBoxs  extends ComboBox
	{
		private var ctrlKey:Boolean = false;
		private const multiplaSelecao:String = 'Múltipla Seleção'

		override public function set initialized(value:Boolean):void
		{
			super.initialized = value;
			if(value)
            			resize();
		}

		override protected function keyDownHandler(event:KeyboardEvent):void
		{
			super.keyDownHandler(event);

			ctrlKey = event.ctrlKey;

			if(ctrlKey)
				dropdown.allowMultipleSelection = true;
		}

		override protected function keyUpHandler(event:KeyboardEvent):void
		{
			super.keyUpHandler(event);
			ctrlKey = event.ctrlKey;
			if(!ctrlKey)
			{
				close();
				var changeEvent:ListEvent = new ListEvent(ListEvent.CHANGE)
				dispatchEvent(changeEvent);
			}
		}

		override public function close(trigger:Event=null):void
		{
			if(!ctrlKey)
			{
				super.close(trigger);
				if(dropdown.selectedItems.length > 1)
					textInput.text = multiplaSelecao;
			}
		}

		private function resize():void
		{
			var lineMetrics:TextLineMetrics;
 			lineMetrics = measureText(multiplaSelecao);
 			var newWidth:Number = lineMetrics.width;
 			newWidth += getStyle("arrowButtonWidth") + getStyle("paddingLeft") + getStyle("paddingRight") + 8;
		    this.width = Math.max(this.width, newWidth);
		}

		public function set selectedItems(value:Array):void
		{
			if(dropdown)
				dropdown.selectedItems = value;
		}

		[Bindable("change")]
		public function get selectedItems():Array
		{
			if(dropdown)
				return dropdown.selectedItems;
			else
				return null;
		}

		public function set selectedIndices(value:Array):void
		{
			if(dropdown)
				dropdown.selectedIndices = value;
		}

		[Bindable("change")]
		public function get selectedIndices():Array
		{
			if(dropdown)
				return dropdown.selectedIndices;
			else
				return null;
		}
	}
}

No arquivo MXML.[like-gate]



	
	
		
			
				
				
				
				
			
		
	
	

[/like-gate] Divirta-se!

About Author

You may also like

5 Response Comments

  • Caio  13/01/2009 at 09:47

    Olá Igor, achei interessante esse post porém não conseguir executar o mesmo a minha nova aplicação diz que não consegue encontrar a classe ComboBoxs…

    Acho que deve ser algum problema na questão das pastas ou na declaração dos pacotes, podes me informar qual a estrutura de pastas que preciso criar para funcionar esse exemplo ?!

    Muito obrigado pela atenção.
    Abraço.

    • Igor Musardo  16/01/2009 at 19:52

      @Caio, o arquivo ComboBoxs.as deve estar dentro da pasta srcbrcombobox e no arquivo mxml, que utilizará o componente ComboBoxs deve ter a instrução xmlns:ns1=”br.combobox.*” dentro da tag Application na primeira linha.

      Faça o teste e veja se resolveu o problema.

      Abraços,
      Igor Musardo