关于带有拼音过滤得自动完成功能的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