`

ComboBox下拉列表选择转为手工录入提示

    博客分类:
  • Flex
阅读更多

下面自定义class继承ComboBox类,实现的功能是将下拉列表框中的数据通过手工录入检索,而不是通过下拉列表选择,对于下拉列表中数据较多非常方便。需要注意的是,如果ComboBox中有chang事件,需要进行判断ComboBoxId.selectIndex != -1;否则或报空对象异常。

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;
  }  

 }
}

分享到:
评论

相关推荐

    DataGridView控件中加入ComboBox下拉列表框

    `ComboBox`则是一个下拉列表控件,用户可以在文本框中输入文本,或者从下拉列表中选择预设的选项。 集成`ComboBox`到`DataGridView`中的步骤如下: 1. **创建ComboBox列**:首先,在`DataGridView`中添加一个新列...

    vs2008演示ComboBox下拉列表控件的使用实例

    总结,VS2008中的ComboBox下拉列表控件是一个功能强大的组件,不仅提供了多种选择方式,还能进行数据绑定和自定义事件处理。通过理解和熟练运用这些特性,开发者可以构建出更加用户友好的Windows Forms应用程序。

    Combobox下拉列表显示图片.zip

    这个"Combobox下拉列表显示图片.zip"文件可能包含了实现这一功能的代码示例或教程。 在Windows Forms应用程序中,Combobox默认只支持显示文本,但通过自定义绘制或者使用第三方控件,我们可以实现显示图片与文本...

    delphi7实现 combobox下拉hint.

    在Delphi 7中,`ComboBox`控件是常见的用户界面元素,用于提供一个下拉列表供用户选择。然而,有时候我们希望在用户鼠标悬停在下拉项上时显示额外的信息,这就是所谓的"hint"功能。在Delphi中,我们可以自定义这个...

    C# combobox下拉列表中可添加图片

    一款非常实用的C# 的combobox的第三方控件,可以实现下拉后在下拉框中添加图片的功能,忘对有此功能需求的朋友所有帮助。

    combobox下拉时间选择控件

    在描述中提到附带了源码,这意味着我们将有一个现成的解决方案,可能是一个名为DateTimePickerEx的自定义控件,这个控件结合了ComboBox的下拉列表特性和DateTimePicker的时间选择功能。 DateTimePicker是.NET ...

    在DataGridView控件中加入ComboBox下拉列表框的实现

    `ComboBox`控件通常用于在有限的选项中进行选择,它包含了文本输入框和下拉列表两部分。在`DataGridView`中,我们可以通过创建一个自定义的`DataGridViewColumn`子类,继承自`DataGridViewTextBoxColumn`,然后重写...

    改变ComboBox下拉高度/强行展开下拉表/自动查询列表/多列下拉框/XP风格Combobox/带图标的ComboBox

    1. 改变ComboBox下拉高度:默认情况下,ComboBox的下拉列表高度是固定的,但通过编程可以自定义其高度。这涉及到修改COMBOBOXINFO结构体中的iListHeight成员,并调用SetWindowLong函数来更新控件的样式。这样做可以...

    在DataGridView控件中加入ComboBox下拉列表框的实现案例

    而为了增强用户交互和提供更多的操作选项,有时我们需要在`DataGridView`的单元格中集成`ComboBox`控件,这样用户就可以从下拉列表中选择值。本案例将详细介绍如何在`DataGridView`中实现`ComboBox`下拉列表的功能。...

    WPF 下拉列表框ComboBox扩展控件

    首先,WPF的ComboBox是一个常用的控件,它结合了文本输入框和下拉列表的功能。用户可以输入文本,或者从下拉列表中选择一个预定义的选项。在默认情况下,ComboBox仅支持简单的文本项,但通过自定义控件和模板,我们...

    ComboBox下拉框内字体加颜色

    在默认情况下,ComboBox内的文本都是单一的颜色,但有时为了提高可读性或者美化界面,我们可能需要为ComboBox下拉框内的字体添加不同的颜色。本篇文章将详细介绍如何在ComboBox下拉框内实现字体加颜色的功能。 首先...

    VC.NET2005_ComboBox下拉列表框

    在本讨论中,我们将深入探讨"VC.NET2005_ComboBox下拉列表框"这一主题,它涉及到在Visual Studio 2005中使用ComboBox控件创建交互式用户界面。 ComboBox控件是Windows Forms应用程序中的一个重要组件,它结合了文本...

    C#combobox下拉树形菜单

    一款非常实用的combobox的第三方控件,可以实现让其combobox下拉出TreeView,且可以对TreeView进行相关的选择,且只能选择树形数据中的最底层数据,选择后的数据的所有父节点也都相应的递归显示出来。非常实用,忘对...

    VC/MFC ComboBox下拉列表控件程序

    总结来说,"VC/MFC ComboBox下拉列表控件程序"着重讲解了如何在MFC环境中使用ComboBox控件进行UI交互,涉及控件创建、项目添加、用户选择响应等多个关键步骤。掌握这些知识点对于开发具有下拉列表功能的Windows应用...

    wpf_combobox_tree下拉树形控件

    3. **事件处理**:转换过程中,需要确保所有必要的事件(如打开/关闭下拉列表、选择项等)在WPF环境中仍能正确触发。这可能需要重写一些事件处理代码。 4. **扩展性与自定义行为**:为了提供与原Silverlight控件...

    带选择项CheckBox的下拉列表ComboBox控件

    本话题聚焦于一个特定的UI组件,即“带选择项CheckBox的下拉列表ComboBox控件”。这个控件结合了两种常见的界面元素:CheckBox和ComboBox,提供了一种更灵活的选择方式,特别是在需要用户从多个选项中进行多选时。 ...

    datagridview中使用combobox下拉列表框,datetimepicker 日期选择框

    `DataGridView`用于显示表格形式的数据,`ComboBox`用于提供下拉选项选择,而`DateTimePicker`则允许用户方便地选择日期和时间。下面我们将详细探讨如何在`DataGridView`中嵌入`ComboBox`和`DateTimePicker`,以及...

    C# 基于ComboBox 下拉多选 自定义控件 源代码

    3、在下拉列表中可显示自定义的多列数据。 4、可在下拉列表中通过输入关键字,自动搜索符合条件的数据行。 5、可指定不同的值列和显示列。 6、可设置是否显示行头和列头。 7、程序根据显示列的多少和宽度,自动调整...

    Ext combobox 下拉多选框带搜索功能

    在给定的标题“Ext ComboBox 下拉多选框带搜索功能”中,我们关注的是一个特别的ComboBox实现,它不仅允许用户从下拉列表中选择多个选项,还具备搜索功能,使得用户可以更高效地找到他们想要的选择项。 ComboBox在...

    C#DataGridView中ComboBox下拉更改事件

    C# DataGridView 中 ComboBox 下拉更改事件 在 C# 开发中,DataGridView 控件是应用非常广泛的控件之一。然而,在使用 DataGridView 控件时,如何在单元格中添加按钮、下拉菜单,并且添加事件和事件处理则是许多...

Global site tag (gtag.js) - Google Analytics