关于带有拼音过滤得自动完成功能的combobox控件,找了很多资料,终于完成此 功能,实现的方式是继承了combobox控件的属性和方法,在combobx里输入拼音时,自动搜索相应的中文加载到Listbox,比如输入“bj”,则“北京”等中文拼音带有bj的字段就会加载到Listbox里(对于字母的自动匹配功能在vs2005设置autocomplete的属性即可),以下是相关代码

Public
Class AuliaryCombobox
Class AuliaryCombobox
Inherits ComboBox

变量#Region "变量"
Private Empty As String = String.Empty
Private WithEvents popupListBox As New ListBox '所要用到的列表框
#End Region

方法#Region "方法"
Private Shared Sub SetListStateDataTable()Sub SetListStateDataTable(ByVal lb As ListBox, ByVal tb As System.Windows.Forms.ComboBox, ByVal keyInt As Integer, ByVal dt1 As DataTable, ByVal DisplayMember As String, ByVal ValueMember As String)
Dim x As String = ""
If Not IsNothing(tb.Text) Then
x = tb.Text.ToString
End If
Dim iStrCount As Integer = x.Length
Dim dt As DataTable = dt1.Clone
Dim dr As DataRow
dt.Rows.Clear()
If x = String.Empty Then
lb.Visible = False
Return
Else
Dim i As Integer
If dt1.Rows.Count >= 1 Then
For i = 0 To dt1.Rows.Count - 1
Dim strItem As String = dt1.Rows.Item(i).Item(DisplayMember).ToString
Dim strtemp As String = getPYString(strItem)
If strItem.Length >= iStrCount Then
If strtemp.ToLower.IndexOf(x.ToLower) <> -1 Then
dr = dt.NewRow
dr.Item(DisplayMember) = strItem
dr.Item(ValueMember) = dt1.Rows.Item(i).Item(ValueMember).ToString
dt.Rows.Add(dr)
End If
End If
Next
End If
SetListData(lb, dt, DisplayMember, ValueMember)
SetListPosition(lb, tb, tb.Parent, tb.Top, tb.Left)
lb.Visible = True
If lb.Items.Count >= 1 Then
lb.SelectedIndex = 0
Else
lb.SelectedIndex = -1
End If
'空格
If keyInt = 32 And x.ToString = " " Then
dt.Rows.Clear()
dt = dt1
End If
'没数据
If IsNothing(dt) Or dt.Rows.Count = 0 Then
lb.DataSource = Nothing
lb.Visible = False
Return
End If
'向下健
If keyInt = 40 Then
If IsNothing(lb.DataSource) Or lb.SelectedIndex < 0 Then
VerifyValue(lb, tb)
Return
End If
If lb.SelectedIndex = lb.Items.Count - 1 Then
lb.SelectedIndex = 0
End If
Else
lb.SelectedIndex = -1
End If
'向上键
If keyInt = 38 Then
If IsNothing(lb.DataSource) Or lb.SelectedIndex < 0 Then
VerifyValue(lb, tb)
Return
End If
If lb.SelectedIndex = 0 Then
lb.SelectedIndex = lb.Items.Count - 1
Else
lb.SelectedIndex = -1
End If
End If
'回车键
If keyInt = 13

本文介绍如何创建一个具有拼音过滤功能的自定义ComboBox控件。通过继承ComboBox,当用户输入拼音时,控件会自动搜索并显示对应中文的列表。例如,输入'bj'将显示包含'北京'等拼音前缀的选项。实现这一功能主要涉及对控件属性和方法的扩展,并利用Autocomplete特性进行字母匹配。
最低0.47元/天 解锁文章
873

被折叠的 条评论
为什么被折叠?



