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!
5 Response Comments
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.
@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
Muito bom cara!!!
Valeu o Marcos!