`

Flex ComBobox录入关键字动态提示

    博客分类:
  • Flex
 
阅读更多
只要调用下面AutoComplete后即可实现录入关键字动态提示
package components.common
{
import flash.events.Event;
import flash.events.FocusEvent;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;

import mx.collections.ICollectionView;
import mx.controls.Alert;
import mx.controls.ComboBox;
import mx.core.UIComponent;

import view.customer.viewCustomer;


public class AutoComplete extends ComboBox
{
public function AutoComplete()
{
super();
init();
}

private function init():void{
editable=true;
rowCount=5;
selectedIndex=-1;
isTextBoxStringChange=false;
isfocusInDropDown=false;
isAutoComplete=false;
//伪装成TextBox
setStyle("cornerRadius",0);
setStyle("arrowButtonWidth",0);
setStyle("fontWeight","normal");
setStyle("paddingLeft",0);
}



//获得焦点时,是否自动弹出下拉框,get set
private var isfocusInDropDown:Boolean=false;

//是否自动完成,get set
private var isAutoComplete:Boolean=false;

//类默认过滤函数,get set
private var _filterFunction:Function = myFilterFunction;

//文本是否发生了变化
private var isTextBoxStringChange:Boolean=false;

//按下的键是否是退格键
private var isBackSpaceKeyDown:Boolean=false;

/**
* 处理退格键按下的情况
*/
override protected function keyDownHandler(event:KeyboardEvent):void
{
if(!event.ctrlKey&&!event.shiftKey)
{
if(event.keyCode == Keyboard.BACKSPACE)
{
close();
isBackSpaceKeyDown=true;
}
else
{
isBackSpaceKeyDown=false;
}
//当按UP键向上选择时,到达最顶时,显示用户原来所需文字
if(event.keyCode == Keyboard.UP && selectedIndex==0)
{
selectedIndex=-1;
}
}
super.keyDownHandler(event);
}

/**
* 数据源发生变化,数据不为0弹出下拉列表
*/
override protected function collectionChangeHandler(event:Event):void
{
super.collectionChangeHandler(event);
if(dataProvider.length>0&&text!="")
{
// Alert.show(textInput.text+","+textInput.text.length);
open();
}
}

/**
     *  Displays the drop-down list.
     */
    override public function open():void{
   
    if(text!=""){
//     Alert.show(textInput.text+","+text+"open()!!!"+isTextBoxStringChange);
    super.open();
    }
    }
/**
* 获得焦点
*/
override protected function focusInHandler(event:FocusEvent):void{
if(isfocusInDropDown) open();
//
super.focusInHandler(event);
}

/**
* 文本发生变化时
*/
override protected function textInput_changeHandler(event:Event):void
{
// Alert.show(textInput.text+" text change!");
if(textInput.text == ""){
// Alert.show(textInput.text+",null");
isTextBoxStringChange=false;
}
else{
// Alert.show(textInput.text+","+event.toString());
isTextBoxStringChange=true;
super.textInput_changeHandler(event);
invalidateProperties();//调用该方法,随后会触发调用commitProperties()
}
}

override protected function commitProperties():void{
if(isTextBoxStringChange&&textInput.text!=""){
prompt=text;
filter(); //进行匹配项的查找
if(isAutoComplete&&!isBackSpaceKeyDown){
var autoCompleteString:String="";
if(dataProvider.length>0)
{
autoCompleteString=itemToLabel(dataProvider[0]);
textInput.setSelection(prompt.length,autoCompleteString.length);
prompt=autoCompleteString;
}
else{
textInput.setSelection(textInput.selectionEndIndex,textInput.selectionEndIndex);
}
}
else{
textInput.setSelection(textInput.selectionEndIndex,textInput.selectionEndIndex);
}
}
super.commitProperties();
}

/**
* 与TextBox同样的宽度
*/
override protected function measure():void
{
super.measure();
measuredWidth=UIComponent.DEFAULT_MEASURED_WIDTH;
}

/**
* 过滤操作
*/
private function filter():void{
var tmpCollection:ICollectionView = dataProvider as ICollectionView;
tmpCollection.filterFunction = _filterFunction;
tmpCollection.refresh();
}

/**
* 过滤函数
*/
private function myFilterFunction(item:Object):Boolean
{
var myLabel:String = itemToLabel(item);
if(myLabel.substr(0,text.length).toLowerCase() == prompt.toLowerCase())
{
return true;
}
return false;
}

/************************Get Set 属性**********************************/

public function get FilterFunction():Function{
return _filterFunction;
}

public function set FilterFunction(filterFunction:Function):void{
_filterFunction=filterFunction;
}


public function get IsfocusInDropDown():Boolean{
return isfocusInDropDown;
}

public function set IsfocusInDropDown(value:Boolean):void{
isfocusInDropDown=value;
}

public function get IsAutoComplete():Boolean{
return isAutoComplete;
}

public function set IsAutoComplete(value:Boolean):void{
isAutoComplete=value;
}

}
}

注意:在引用该ComboBox后,如果下拉列表中的数据是从库中查出来的,那么在显示时会闪出一个下拉列表框,很不顺眼。解决办法:首先在往库中查询全部数据后,应当清空ComboBox,接着再给ComboBox中的data和label赋值,就可以避免闪出方框。
分享到:
评论
4 楼 liugang_ok 2012-10-12  
zjlzlr 写道
你好,请问输入的时候如何能与后台交互呀?就是在输入改变的时候怎样动态改变dataProvider值?

combobox中数据是在初次加载时从库中获取到的,然后将值赋给dataprovider属性,当在输入文字时会自动匹配。dataprovider的值是一次加载,如果库中的数据源变更了,需要单独触发查询事件,把数据查出来赋给dataprovider,在输入改变时应该是不调整dataprovider值
3 楼 zjlzlr 2012-10-11  
你好,请问输入的时候如何能与后台交互呀?就是在输入改变的时候怎样动态改变dataProvider值?
2 楼 xcloading 2012-05-23  
可以给我一个案列吗/
1 楼 xcloading 2012-05-23  
在引用该ComboBox后,如果下拉列表中的数据是从库中查出来的,那么在显示时会闪出一个下拉列表框,很不顺眼。解决办法:首先在往库中查询全部数据后,应当清空ComboBox,接着再给ComboBox中的data和label赋值,就可以避免闪出方框。可以告诉我具体的嘛?现在就遇到这问题了

相关推荐

    flex combobox联动demo

    Flex Combobox联动效果是Adobe Flex开发中的一个常见功能,它涉及到UI组件的交互与数据绑定。在Flex中,Combobox是一种下拉选择框,它允许用户从预定义的选项列表中选择一个值,同时也可以手动输入。联动效果则是指...

    flex ComboBox checkbox

    在Flex编程中,ComboBox是一个常用的组件,用于提供下拉列表让用户选择。这个“flex ComboBox checkbox”的主题涉及到在ComboBox中集成复选框(checkbox)的功能,这使得用户可以选择多个选项,而不仅仅是单选。下面...

    flex combobox 输入过滤实例

    Flex Combobox是一款在Adobe Flex框架下使用的组件,它结合了下拉列表和文本输入框的功能,用户可以在输入框中输入文字,同时从下拉列表中选择一个匹配项。在本实例中,我们将深入探讨如何利用Flex 4实现Combobox的...

    Flex ComboBox 树形控件

    Flex ComboBox 是一种强大的用户界面组件,它结合了下拉列表(ComboBox)和树形结构(Tree)的功能,为用户提供了一种交互式的数据选择方式。在Flex应用中,这种控件通常用于显示层次化的数据,允许用户从多个层级的...

    flex实现 ComboBox中下拉checkbox

    在Flex编程领域,ComboBox是一个常用的组件,它提供了一个下拉列表供用户选择,通常用于实现单选功能。然而,有时我们需要在ComboBox中嵌入多选功能,这时可以通过添加Checkbox来实现。本文将深入探讨如何在Flex中的...

    flex4代替ComboBox的类

    flex4中不能使用combobox,该类是用LIST 自写的一个代替类

    Flex 联想ComboBox通用组件(可识别汉语拼音和汉字)

    1.采用ActionScript3.0编写。 2.仿Google联想输入框。 3.可识别汉语拼音,字符及汉字。 4.精简算法,能够秒出内容。 5.带有注释。...在Flex 可视化编辑界面直接拖出就行。 有问题或者BUG 可联系QQ:408955289

    easyui combobox开启搜索自动完成功能的实例代码

    - `missingMessage`定义未选择值时的提示信息。 - `valueField`和`textField`分别指定值和文本字段。 - `method`和`url`用于远程加载数据,这里我们使用的是本地数据,所以`mode`设为"local"。 - `onHidePanel`...

    C# ComboBox输入智能提示补全

    C# ComboBox输入智能提示补全,自动提示,很不错的案例!

    Flex 下拉框为Tree的ComboBox

    在Flex编程中,ComboBox是一个非常常用的组件,它结合了输入框和下拉列表的功能,让用户可以从预设的选项中选择一个值。然而,标准的ComboBox通常仅支持简单的列表项显示,而不能展示层级结构的数据。当需要处理具有...

    ComBoBox动态实例asp+zip

    在IT行业中,动态加载是提高用户体验和网页性能的重要技术之一,尤其在处理大量数据或选项时,如ComboBox(下拉列表框)控件。本文将深入探讨如何在ASP(Active Server Pages)环境中实现ComboBox的动态加载,并结合...

    Flex设置下拉框ComboBox组件在不可编辑状态下的选中样式

    在Flex开发中,ComboBox组件是一种常用的用户界面元素,它结合了文本输入框和下拉列表的功能,用户可以从中选择一个项目。在某些情况下,我们可能希望禁用ComboBox的编辑功能,使其变为只读模式,同时还要保持良好的...

    flex datagrid 中实现combobox联动

    在Flex编程中,数据网格(DataGrid)是用于展示大量结构化数据的组件,而ComboBox是一种下拉选择框,常用于提供用户可选择的选项。当我们需要在DataGrid的不同列中实现ComboBox的联动效果时,即在一个ComboBox的选择...

    flex中ComboBox嵌套checkbox的例子以及源代码

    在Flex编程中,ComboBox是一个非常常用的组件,它允许用户从一组下拉选项中选择一个值。然而,有时候我们可能需要更复杂的功能,比如在ComboBox中嵌套Checkbox,让用户可以选择一个或多个选项。这个主题——“flex中...

    Flex实现自动过滤ComboBox

    在Flex编程中,ComboBox是一个常用的组件,用于展示可选择的下拉列表。它结合了输入框和下拉列表的功能,用户可以直接输入或者从列表中选择一个选项。在某些场景下,我们可能希望实现ComboBox的自动过滤功能,即当...

    flex DataGrid 嵌入Combobox列拖动下拉条数据混乱

    在Flex开发中,DataGrid是一种常用的组件,用于展示表格数据,而Combobox列则可以提供下拉选择功能,增强用户交互。然而,在实际应用中,我们可能会遇到一些问题,比如在DataGrid中嵌入Combobox列,并且允许用户拖动...

    Q703119 问题的回答 c# combobox如何动态模糊查询?

    在某些情况下,我们可能希望实现ComboBox的动态模糊查询功能,即用户在输入框中输入文本时,ComboBox会实时过滤并显示匹配的选项。这在大数据量的下拉列表中尤其有用,可以提高用户体验。下面我们将详细讨论如何实现...

    VB基于ComboBox控件的自动匹配查询内容实例源码

    资源名:VB基于ComboBox控件的自动匹配查询内容实例源码 资源类型:程序源代码 源码说明:VB基于ComboBox控件的自动匹配查询内容实例 autocomplete 自动完成 适合人群:新手及有一定经验的开发人员

    winform 实现TextBox 关键字智能提示

    有时候由于项目需求的需要,需要实现像百度那样输入关键字后有下拉框提示,在网上搜了下,一种是利用ComboBox和TextBox的AutoCompleteMode属性,个人感觉不太灵活,关键字只能从第一个字符开始匹配,不能实现任意...

    QML自定义ComboBox组件,支持动态筛选

    QtQuick.Controls提供了ComboBox组件,该组件能够满足日常的下拉选择框的需求,但当需要用户在ComboBox中通过输入关键字进行自动匹配时,原生的组件虽然提供了editable属性用于输入关键字,但是匹配内容不弹出下拉框...

Global site tag (gtag.js) - Google Analytics