Показать сообщение отдельно
Старый 02.08.2011, 20:02
qmel вне форума Посмотреть профиль Отправить личное сообщение для qmel Найти все сообщения от qmel
  № 1  
Ответить с цитированием
qmel

Регистрация: Dec 2010
Сообщений: 23
По умолчанию Multiselect ComboBox

Доброе время суток!

Флекс знаю мало и почти с ним не работаю. Был нужен ComboBox с возможностью выбора нескольких значений, нашел готовый код интернете, например здесь http://blog.comtaste.com/2008/09/ext...x_to_impl.html

Код:
Код AS3:
package
{
	import flash.events.Event;
	import flash.events.KeyboardEvent;
 
	import mx.controls.ComboBox;
	import mx.events.ListEvent;
 
	public class MultiSelectComboBox extends ComboBox
	{
 
		private var ctrlKeyPressed:Boolean = false; //Control Key Pressed
 
		/**
		 * This function checks whether the CtrlKey is pressed.
		 * If CtrlKey is pressed then, 
		 *   						multiple selection is enabled for the ComboBox dropdown.
		 **/
		override protected function keyDownHandler( event:KeyboardEvent ):void
		{
			super.keyDownHandler( event );
 
			this.ctrlKeyPressed = event.ctrlKey;
 
			if( this.ctrlKeyPressed == true ) 
			{
				dropdown.allowMultipleSelection = true;
			}
		}
 
		/**
		 * This function prevents the ComboBox from closing if CtrlKey is pressed
		 * Else it fires a Change event to update selectedItems array on close  
		 * 
		 * If CtrlKey is not pressed then, 
		 * 								ComboBox dropdown is closed and change event is dispatched.
		 * 
		 * 'dropdown' in a ComboBox is a List component
		 **/
		override protected function keyUpHandler( event:KeyboardEvent ):void
		{
			super.keyUpHandler( event );
			this.ctrlKeyPressed = event.ctrlKey;
 
			if ( this.ctrlKeyPressed == false ) 
			{
				this.close(); 
				var changeEvent:ListEvent = new ListEvent( ListEvent.CHANGE );
				this.dispatchEvent( changeEvent );
				this.selectedIndex = -1;
			}			
		}
 
		/**
		 * This function prevents the ComboBox from closing if CtrlKey is pressed on a Close Event
		 **/
		override public function close( trigger:Event=null ):void
		{
			if( this.ctrlKeyPressed == false )
			{
				super.close( trigger );
				this.selectedIndex = -1;
			}
		}
 
 
		/**
		 * 'selectedItems' Setter
		 **/
		public function set selectedItems( value:Array ):void
		{
			if( this.dropdown )
			{
				this.dropdown.selectedItems = value;
			}
		}
 
 
		/**
		 * 'selectedItems' Getter
		 **/
		[Bindable("change")]
		public function get selectedItems( ) : Array
 
		{
			if ( this.dropdown )
				return this.dropdown.selectedItems
			else
				return null;	
		}
 
 
		/**
		 * 'selectedIndices' Setter
		 **/
		public function set selectedIndices( value:Array ) : void
		{
			if ( this.dropdown )
				this.dropdown.selectedIndices = value;
		}
 
 
		/**
		 * 'selectedIndices' Getter
		 **/
		[Bindable("change")]
		public function get selectedIndices( ) : Array
		{
			if ( this.dropdown )
				return this.dropdown.selectedIndices;
			else
				return null;
		}
 
		/**
		 * 'MultiSelectComboBox' constructor
		 **/		
		public function MultiSelectComboBox()
		{
			super();
		}
 
	}
}
Хочется отображать выбранные значения через запятую в Combox-е, как это реализовать?

Нашел вот эти вещи, но не знаю что с ними делать:

Код AS3:
 override public function itemToLabel(item:Object, ...rest):String {
		var label : String = "";
		if( !selectedItems || selectedItems.length) {
		return super.itemToLabel(item);
		} else {
		for each( var object : Object in selectedItems ) {
		label += super.itemToLabel(object) + ", ";
		}
		}
		return label.substring(0,label.length - 2);
		}
 
		override protected function commitProperties():void {
		var label : String = "";
		super.commitProperties();
		for each( var object : Object in selectedItems ) {
		label += super.itemToLabel(object) + ", ";
		}
		textInput.text = label.substring(0,label.length - 2);
		}
Кто знает, подскажите, пожалуйста.