TextBox的智能感知
最近MSDN回答一个问题——说如果在TextBox中键入字符,需要智能感知出列表,同时对不存在的单词(没有出现智能感知的)自动显示“Not Found”。
首先想到的是利用TextBox的AutoComplete功能。该功能允许你设置不同形式的AutoComplete智能感知,譬如:
1)AutoCompleteSource:设置感知源头类型(这里是CustomSource)。
2)AutoCompleteMode:设置感知的模式(输入不存在的字符追加,不追加还是同时存在,这里显然不追加)。
3)AutoCompleteCustomSource:设置源头数据(AutoCompleteSource必须是CustomSource)。
接下来思考如何在输入第一个字符的时候判断是否被感知到,如果没有则显示文本。
拖拽一个Label到窗体上,然后在TextBox的KeyUp事件中对数据源进行判断(为了方便,直接先把数据源数据转化成Array的形式然后使用扩展方法Any进行判断),同时为了防止界面卡死,使用异步,代码如下(VB.NET):
Public Class Form1Dim collection As New AutoCompleteStringCollectionPrivate ReadOnly arrayCollection() As String = {"a"}Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.LoadEnd SubPublic Sub New()InitializeComponent()collection.AddRange(New String() {"apple", "aero", "banana"})TextBox1.AutoCompleteCustomSource = collectionReDim arrayCollection(collection.Count - 1)collection.CopyTo(arrayCollection, 0)End Sub''' <summary>''' When release the keys, plz start a background thread to handle the problem''' </summary>Private Sub TextBox1_KeyUp(sender As Object, e As KeyEventArgs) Handles TextBox1.KeyUpDim act As New Action(Sub()'Check whether there are any values inside the collection or notIf (TextBox1.Text = "") OrElse (arrayCollection.Any(Function(s)Return s.StartsWith(TextBox1.Text)End Function)) ThenLabel1.BeginInvoke(New MethodInvoker(Sub()Label1.Text = String.EmptyEnd Sub))ElseLabel1.BeginInvoke(New MethodInvoker(Sub()Label1.Text = "Not found"End Sub))End IfEnd Sub)act.BeginInvoke(Nothing, Nothing)End Sub End Class
这里有一些注意点:
1)异步的异常不会抛出(因为异步的本质是CLR内部的线程),只能调试时候看到。因此编写异步程序必须万分小心。
2)VB.NET定义数组(譬如定义String(5)的数组,其实长度是6(从0~5)包含“5”自身,因此数组复制(Redim重定义大小)的时候必须Count-1,否则重新定义的数组会多出一个来,默认是Nothing,会导致异步线程出现异常)。
转载于:https://www.cnblogs.com/ServiceboyNew/archive/2013/04/30/3051772.html
TextBox的智能感知相关推荐
- 如何彻底禁用VS 2008的智能感知功能
作者:朱金灿 来源:http://blog.csdn.net/clever101 现在发现VS 2008的智能感知做得真是烂得一坨.使用VS2008或者2005时候,当切换配置,总是显示"正 ...
- 用txt做数据源和winfrom textbox输入智能提示
1.用txt做数据源连接字符串 //text作为数据源的链接字符串 string strConnection = @"Provider=Microsoft.Jet.O ...
- VS2010没有Intellisense(智能感知)的解决办法
为什么80%的码农都做不了架构师?>>> Visual Studio 2010 的Intellisense是依赖于Microsoft SQL Server Compact 3. ...
- VS2010与.NET4系列 20.VS2010的JavaScript智能感知增强
今天介绍VS2010和VWD2010 Express对JavaScript智能感知方面的一些改进.你会发现 VS2010 的 JavaScript 智能感知加载大的脚本文件和使用大的库更加迅速了,它现 ...
- 在Visual Studio中启用对jquery等javascript框架的智能感知
http://www.cnblogs.com/tonybinlj/archive/2009/05/26/1490434.html 启用Visual Studio 对jQuery的智能感知 首先看一下V ...
- 启用Visual Studio 对jQuery的智能感知
启用Visual Studio 对jQuery的智能感知 首先看一下Visual Studio带给我们的智能感知惊喜. 要让Visual Studio支持智能感知, 需要下列条件: 安装 VS2008 ...
- 如何为javascript代码编写注释以支持智能感知
在使用Visual Studio做开发的时候,智能感知是非常方便的.从VS2008开始,提供了对javascript的智能感知支持.例如 上述代码中,我们先用document对象的getElement ...
- 【数据竞赛】2020首届海洋目标智能感知国际挑战赛冠军方案分享
作者:欧奕旻.左育莘.杨锐 赛事回顾 2020年12月22日由中国造船工程学会等单位主办,哈尔滨工程大学承办,武汉理工大学协办的首届"海洋目标智能感知国际挑战赛"落下帷幕.秉承 & ...
- vs2005 智能感知不正常的解决办法
vs2005 自动提示(智能感知)不出现或者闪一下就消失的解决办法 早上的时候,我的vs智能感知不正常了,不是不出现,而是一闪就没有了.以为是pd12插件搞的鬼,卸载了pd也不行,折腾了半天也没用,最 ...
最新文章
- 这可能是近 2 年进京东的最好机会!
- Resin install document
- java中定时任务和线程池_java基于线程池和反射机制实现定时任务完整实例
- 浅析Java各种变量线程安全问题
- 08_添加图例、添加标题(Adding a Title)
- Fluid 0.5 版本:开启数据集缓存在线弹性扩缩容之路
- virtualbox 创建桥接网络_VirtualBox 配置虚拟网卡(桥接),实现主机-虚拟机网络互通(图文教程)...
- Nexys4DDR的DDR2读写操作例程详解
- ICE第三篇------一些疑难点
- 七种常见的核酸序列蛋白编码能力预测工具 | ncRNAs | lncRNA
- SharePoint 2010多语言包的安装
- Flutter学习记录-关于一些常见实现
- 基建管控系统_催生智慧园区三维管控系统解决方案,新基建背景下构建可视化监控平台...
- 剑指offer(C++)-JZ33:二叉搜索树的后序遍历序列(数据结构-树)
- sap 双计量单位_[原创]浅谈MM模块的双计量单位(二)
- 中止执行后超过2年_10年后超过美国!汪涛:中国GDP将达到28万亿美元
- 网线 - RJ45接口线序
- cad怎么画立体图形教学_立体图形怎么画步骤 找CAD图形中心点的方法步骤图
- 脸谱网下载_脸谱网对AR眼镜大胆愿景的最大障碍是信任
- 一个屌丝程序猿的人生(二十二)