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 点击选择项 为多选) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |