当前位置: 首页 > news >正文

combox数据过滤 wpf_ComboBox实现输入自动过滤

package com.beyondsoft

{

import flash.events.Event;

import mx.collections.ArrayCollection;

import mx.controls.Alert;

import mx.controls.ComboBox;

import mx.events.FlexEvent;

import mx.utils.StringUtil;

/**

* ComboBox过滤自动完成组件

* @author 韩敬诺

*

*/

public class AutoCompleteComboBox extends ComboBox

{

public function AutoCompleteComboBox()

{

if(!width){

//如果没有指定width则设置默认的宽度

width=120;

}

setStyle("paddingLeft","0");

selectedIndex=-1;

editable=true;

addEventListener("creationComplete",init);

}

private var ac:ArrayCollection;//保存数据源

/**

*

* @param event

*

*/

private function init(event:Event):void{

ac=dataProvider as ArrayCollection;

}

/**

* 重写下三角按钮的点击事件

* @param event

*

*/

override protected function downArrowButton_buttonDownHandler(event:FlexEvent):void{

dataProvider=ac;

super.downArrowButton_buttonDownHandler(event);

}

/**

* 当输入框中的值发生变化时开始过滤

* @param event

*

*/

override protected function textInput_changeHandler(event:Event):void{

super.textInput_changeHandler(event);

//当数据源不为空并且关键字不为空时开始搜索数据源

if(ac){

var keyWord:String=StringUtil.trim(textInput.text);

if(keyWord){

searchKeyWord(keyWord);

}

}

}

/**

*

* @param keyWord关键字

*

*/

private function searchKeyWord(keyWord:String):void{

var dp:ArrayCollection=filterData(ac);

//当数据源改变的时候

if(dp.length>0){

dataProvider=dp;

dropdown.selectedIndex=-1;

dropdown.verticalScrollPosition=0;

textInput.setFocus();

//注意先设置关键字被选中后打开下拉列表

textInput.setSelection(keyWord.length,keyWord.length);

open();

}else{

dataProvider=ac;

textInput.text="";

selectedIndex=-1;

close();

}

}

/**

*

* @param item

* @return

*

*/

private function filterData(ac:ArrayCollection):ArrayCollection{

var dp:ArrayCollection=new ArrayCollection();

for(var i:int=0;i

var item:Object=ac.getItemAt(i);

if(item.hasOwnProperty(labelField)){

var value:String=item[labelField];

if(value.indexOf(textInput.text)!=-1){

dp.addItem(item);

}

}

}

return dp;

}

}

}

网上虽然有很多例子,但是写的都有很多bug,因此自己动手写了个组件。出现了一个难点就是如何点击下三角的时候数据源全部出来,看了ComboBox后才知道是这个方法downArrowButton_buttonDownHandler,因此重写这个方法就ok了。

思路:1监听textInput_changeHandler事件

2 对数据源进行过滤

3 重写下三角的点击事件

相关文章:

  • mysql 数据库表被锁住了_MYSQL数据库MYSQL 解锁与锁表介绍
  • 华为设备如何将接口配置为中继模式_华为5700系列交换机常用配置示例
  • 前端图片合成技术_前端图片合并方案调研
  • 可靠性测试设备技术含量_设备软件可靠性测试
  • plsql怎么用字段查表明_在oracle中怎么通过字段名查询其所在的表
  • 微信小程序云开发用户身份登录_微信小程序+云开发实现欢迎登录注册
  • pandas提取时间里面的年月日_pandas进行时间数据的转换和计算时间差并提取年月日...
  • iserdese2接口详解_Xilinx Notes
  • postman启动没反应_高压软起动通电没反应维修控制器烧毁
  • python策略模式包含以下哪些角色_python---策略模式
  • mybatis 插件_建议收藏,mybatis插件原理详解
  • h5引入json_Html5页面内使用JSON动画的实现
  • bootstrap列表加序号_用vue.js做一个列表,类似于百度的搜索排名,用v-for来循环...
  • 中将2个map的值合并_如果是我,不纠结卫生间留1个还是2个,主卫次卫大合并,宽敞舒适...
  • 宋佳机器人_丝路电影节|宋佳专访:特殊时期用电影抚慰人心 是很温暖的事
  • JS实现简单的MVC模式开发小游戏
  • Linux Process Manage
  • nodejs调试方法
  • rabbitmq延迟消息示例
  • scrapy学习之路4(itemloder的使用)
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 手机端车牌号码键盘的vue组件
  • 算法---两个栈实现一个队列
  • 推荐一个React的管理后台框架
  • 微信公众号开发小记——5.python微信红包
  • 一个SAP顾问在美国的这些年
  • C# - 为值类型重定义相等性
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​io --- 处理流的核心工具​
  • ​Linux·i2c驱动架构​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • (20050108)又读《平凡的世界》
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (简单) HDU 2612 Find a way,BFS。
  • (蓝桥杯每日一题)love
  • (转)大型网站的系统架构
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • ??javascript里的变量问题
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • [<MySQL优化总结>]
  • [23] 4K4D: Real-Time 4D View Synthesis at 4K Resolution
  • [C++]运行时,如何确保一个对象是只读的
  • [CareerCup][Google Interview] 实现一个具有get_min的Queue
  • [EULAR文摘] 脊柱放射学持续进展是否显著影响关节功能
  • [IE9] GPU硬件加速到底是实用创新还是噱头
  • [JS]Math.random()随机数的二三事
  • [Lua实战]整理Lua中忽略的问题
  • [mysql]错误解决之Failed to start MySQL Server
  • [nlp] tokenizer
  • [OIDC in Action] 3. 基于OIDC(OpenID Connect)的SSO(添加Github OAuth 2.0的支持)
  • [PHP] 算法-字符串的左循环的PHP实现
  • [python开发模拟netcat工具] BHPnet