加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex 多选 ComboBox

发布时间:2020-12-15 01:01:42 所属栏目:百科 来源:网络整理
导读:说多了墨迹,直接帖代码 ? MyClassFactory 类 如下: import flash.display.DisplayObject;import mx.core.ClassFactory;import mx.states.OverrideBase;public class MyClassFactory extends ClassFactory{public function MyClassFactory(generator:Class=

说多了墨迹,直接帖代码

?

MyClassFactory 类 如下:

	import flash.display.DisplayObject;
	
	import mx.core.ClassFactory;
	import mx.states.OverrideBase;
	
	public class MyClassFactory extends ClassFactory
	{
		public function MyClassFactory(generator:Class=null)
		{
			super(generator);
		}
		private var eventArray:Array=new Array();
		private var _properties:Array=new Array();
		public function addInitEventListener(type:String,listener:Function,useCapture:Boolean=false,priority:int=0,useWeakReference:Boolean=false):void{
			eventArray.push({type:type,listener:listener,useCapture:useCapture,priority:priority,useWeakReference:useWeakReference});
		}
		public function addInitProperties(key:String,value:*):void{
			_properties.push({key:key,value:value});
		}
		
		override public function newInstance():*{
			trace("MyClassFactory.newInstance();");
			var obj:*=super.newInstance();
			var event:Object;
			if(eventArray!=null&&eventArray.length>0&&obj as DisplayObject){
				var i:int=0;
				for(i=0;i<_properties.length;i++){
					event=_properties[i];
					if(event.value is Function){
						obj[event.key]=event.value();
					}else{
						obj[event.key]=event.value;
					}
					
				}
				
				for(i=0;i<eventArray.length;i++){
					event=eventArray[i];
					DisplayObject(obj).addEventListener(event.type,event.listener,event.useCapture,event.priority,event.useWeakReference);
				}
			}
			return obj
		}
		
	}

?

?

MyComboBox 类 如下:

?

	import flash.events.Event;
	import flash.events.MouseEvent;
	import mx.collections.ArrayCollection;
	import mx.controls.ComboBox;
	import mx.controls.List;
	import mx.controls.listClasses.ListBase;
	import mx.core.ClassFactory;
	import mx.events.FlexEvent;
	import mx.events.FlexMouseEvent;
	import mx.events.ListEvent;
	import mx.events.SandboxMouseEvent;
	
	public class MyComboBox extends ComboBox
	{
		public function MyComboBox()
		{
			super();
			this.dropdownFactory=new MyClassFactory(List);
			this.getDropdownFactory().addInitEventListener(ListEvent.CHANGE,dropdown_Change,false,1);
			this.getDropdownFactory().addInitEventListener(MouseEvent.MOUSE_DOWN,dropdown_mouseDownHandler);
			this.getDropdownFactory().addInitEventListener(FlexMouseEvent.MOUSE_DOWN_OUTSIDE,dropdown_mouSEOutsideHandler);
			this.getDropdownFactory().addInitEventListener(FlexMouseEvent.MOUSE_WHEEL_OUTSIDE,dropdown_mouSEOutsideHandler);
			this.getDropdownFactory().addInitEventListener(SandboxMouseEvent.MOUSE_DOWN_SOMEWHERE,dropdown_mouSEOutsideHandler);
			this.getDropdownFactory().addInitEventListener(SandboxMouseEvent.MOUSE_WHEEL_SOMEWHERE,dropdown_mouSEOutsideHandler);
			this.getDropdownFactory().addInitProperties("allowMultipleSelection",true);
			this.getDropdownFactory().addInitProperties("selectedItems",getSelectedItems);
		}

		private var _selectedItems:Array;
		private var _selectedIndices:Array;
		private var _separation:String=",";
		[Bindable("change")]
		[Bindable("valueCommit")]
		public function get selectedItems():Array{
			return 	_selectedItems==null?[]:_selectedItems;
		}
		public function set selectedItems(array:Array):void{
			var t:String;
			this._selectedItems=array;
			this.text=selectedLabel;
		}
		[Bindable("change")]
		[Bindable("valueCommit")]
		public function get selectedIndices():Array{
			return _selectedIndices!=null?_selectedIndices:[];
		}
		public function set selectedIndices(array:Array):void{
			this._selectedIndices=array;
		}
		/**
		 * Label 分隔符
		 * */
		public function get separation():String{
			return this._separation;
		}
		public function set separation(value:String):void{
			this._separation=value;
		}
		public function getSelectedItems():Array{
			return this.selectedItems;
		}
		/**
		 * 选中项时,Ctrl 是否按下
		 * */
		private var ctrlKey:Boolean=false;

		private function dropdown_Change(event:ListEvent):void{
			var listBase:ListBase=event.currentTarget as ListBase;
			this.selectedItems=listBase.selectedItems;
			this.selectedIndices=listBase.selectedIndices;
			
			trace("dropdown_Change-----"+"selectedItems:"+selectedItems.length+"t"+"selectedIndices:"+selectedIndices.length);
			
		}
		
		private function dropdown_mouseDownHandler(event:MouseEvent):void{
			ctrlKey=event.ctrlKey;
		}
		private function dropdown_mouseDownOutSide(event:FlexMouseEvent):void{
			close();
		}
		
		override public function close(trigger:Event=null):void{
			if(!ctrlKey){
				super.close(trigger);//未按下 Ctrl 时 关闭
			}
		}
		override public function get selectedLabel():String
		{
			var array:Array=this.selectedItems;
			var result:String="";
			for(var i:int=0;i<array.length;i++){
				result+=itemToLabel(array[i]);
				if(i!=(array.length-1)){
					result+=separation;
				}
			}
			
			return result;
		}
		public function  getDropdownFactory():MyClassFactory{
			return super.dropdownFactory as MyClassFactory;
		}
		/**
		 *  @private
		 */
		private function dropdown_mouSEOutsideHandler(event:Event):void
		{
			trace("selectedItems:"+selectedItems.length+"t"+"selectedIndices:"+selectedIndices.length);
			if (event is MouseEvent)
			{
				var mouseEvent:MouseEvent = MouseEvent(event);
				if (!hitTestPoint(mouseEvent.stageX,mouseEvent.stageY,true))
				{
					super.close(event);
				}
			}
			else if (event is SandboxMouseEvent) 
			{
				super.close(event);
			}
		}
	}


调用代码 如下:

				<my:MyComboBox width="180">
					<my:dataProvider>
						<s:ArrayCollection>
							<fx:String>选项一</fx:String>
							<fx:String>选项二</fx:String>
							<fx:String>选项三</fx:String>
							<fx:String>选项四</fx:String>
							<fx:String>选项五</fx:String>
						</s:ArrayCollection>
					</my:dataProvider>
				</my:MyComboBox>

(按Ctrl 点击选择项 为多选)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读