VB.NET中TextBox的智能感知应用实例

 更新时间:2014年08月05日 10:49:30   投稿:shichen2014  
这篇文章主要介绍了VB.NET中TextBox的智能感知应用实例,非常实用的功能,需要的朋友可以参考下

本文实例形式介绍了VB.NET中TextBox的智能感知实现方法,功能非常实用,具体如下:

该实例主要实现:在TextBox中键入字符,可以智能感知出列表,同时对不存在的单词(没有出现智能感知的)自动显示“Not Found”。

对此功能首先想到的是利用TextBox的AutoComplete功能。该功能允许你设置不同形式的AutoComplete智能感知,譬如:

1)AutoCompleteSource:设置感知源头类型(这里是CustomSource)。

2)AutoCompleteMode:设置感知的模式(输入不存在的字符追加,不追加还是同时存在,这里显然不追加)。

3)AutoCompleteCustomSource:设置源头数据(AutoCompleteSource必须是CustomSource)。

接下来思考如何在输入第一个字符的时候判断是否被感知到,如果没有则显示文本。

拖拽一个Label到窗体上,然后在TextBox的KeyUp事件中对数据源进行判断(为了方便,直接先把数据源数据转化成Array的形式然后使用扩展方法Any进行判断),同时为了防止界面卡死,使用异步。

具体实现代码如下:

Public Class Form1
  Dim collection As New AutoCompleteStringCollection
  Private ReadOnly arrayCollection() As String = {"a"}

  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

  End Sub

  Public Sub New()

    InitializeComponent()
    collection.AddRange(New String() {"apple", "aero", "banana"})
    TextBox1.AutoCompleteCustomSource = collection
    ReDim 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.KeyUp
    Dim act As New Action(Sub()
                 'Check whether there are any values inside the collection or not
                 If (TextBox1.Text = "") OrElse (arrayCollection.Any(Function(s)
                                             Return s.StartsWith(TextBox1.Text)
                                           End Function)) Then

                   Label1.BeginInvoke(New MethodInvoker(Sub()
                                        Label1.Text = String.Empty
                                      End Sub))
                 Else
                   Label1.BeginInvoke(New MethodInvoker(Sub()
                                        Label1.Text = "Not found"
                                      End Sub))
                 End If

               End Sub)
    act.BeginInvoke(Nothing, Nothing)
  End Sub
End Class

这里有一些注意点:

1)异步的异常不会抛出(因为异步的本质是CLR内部的线程),只能调试时候看到。因此编写异步程序必须万分小心。

2)VB.NET定义数组(譬如定义String(5)的数组,其实长度是6(从0~5)包含“5”自身,因此数组复制(Redim重定义大小)的时候必须Count-1,否则重新定义的数组会多出一个来,默认是Nothing,这会导致异步线程出现异常)。

相关文章

  • WPF实现动画效果(七)之演示图板

    WPF实现动画效果(七)之演示图板

    这篇文章介绍了WPF实现动画效果之演示图板,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • C#实现给DataGrid单元行添加双击事件的方法

    C#实现给DataGrid单元行添加双击事件的方法

    这篇文章主要介绍了C#实现给DataGrid单元行添加双击事件的方法,较为详细的分析了C#给DataGrid单元添加双击事件的步骤及相关实现代码,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • C#使用Enum.TryParse()实现枚举安全转换

    C#使用Enum.TryParse()实现枚举安全转换

    这篇文章介绍了C#使用Enum.TryParse()实现枚举安全转换的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • C# 使用EntityFramework CodeFirst 创建PostgreSQL数据库的详细过程

    C# 使用EntityFramework CodeFirst 创建PostgreSQL数据库的详细过程

    这篇文章主要介绍了C#使用EntityFramework CodeFirst创建PostgreSQL数据库的过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • C#通过yield实现数组全排列的方法

    C#通过yield实现数组全排列的方法

    这篇文章主要介绍了C#通过yield实现数组全排列的方法,以实例形式较为详细的分析了全排列的概念及C#的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • C# Dynamic关键字之:解析dynamic就是Object

    C# Dynamic关键字之:解析dynamic就是Object

    本篇文章是对C#中dynamic关键字就是Object进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 详解C# Protobuf如何做到0分配内存的序列化

    详解C# Protobuf如何做到0分配内存的序列化

    这篇文章主要介绍了详解C# Protobuf如何做到0分配内存的序列化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • C#实现异步连接Sql Server数据库的方法

    C#实现异步连接Sql Server数据库的方法

    这篇文章主要介绍了C#实现异步连接Sql Server数据库的方法,涉及C#中await方法的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • C# PictureBox图片控件实现图片交换

    C# PictureBox图片控件实现图片交换

    在c#中可以使用PictureBox控件来呈现图像,本文主要介绍了C# PictureBox实现图片交换,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • C#中字符串优化String.Intern、IsInterned详解

    C#中字符串优化String.Intern、IsInterned详解

    这篇文章主要给大家介绍了关于C#中字符串优化String.Intern、IsInterned的相关资料,文中通过示例代码介绍的,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-12-12

最新评论