如何在VB.NET中实现ComboBox的自动完成功能
给ComboBox添加自动完成功能的调整方案
要让你的ComboBox具备自动完成功能,只需在绑定数据源后添加自动完成相关属性配置,具体调整如下:
选择合适的自动完成模式:
AutoCompleteMode.Suggest:输入时显示匹配的建议列表AutoCompleteMode.Append:自动补全匹配的剩余字符AutoCompleteMode.SuggestAppend:同时显示建议列表并自动补全(推荐使用)
配置自动完成数据源:由于你的ComboBox绑定了DataTable,需要将DataTable中的
PNM列数据提取到AutoCompleteStringCollection中,再绑定到ComboBox的AutoCompleteCustomSource。
修改后的完整代码:
Private Sub PopulateComboBox() Dim query As String = "SELECT DISTINCT PNM FROM GSD UNION SELECT DISTINCT PNM FROM GSG ORDER BY PNM" Try Using con As OleDbConnection = New OleDbConnection(cn) Using sda As OleDbDataAdapter = New OleDbDataAdapter(query, con) 'Fill the DataTable with records from Table. Dim dt As DataTable = New DataTable() sda.Fill(dt) 'Insert the Default Item to DataTable. Dim row As DataRow = dt.NewRow() row(0) = "" dt.Rows.InsertAt(row, 0) 'Assign DataTable as DataSource. ComboBox1.DataSource = dt ComboBox1.DisplayMember = "PNM" ComboBox1.ValueMember = "PNM" ' 配置自动完成功能 ComboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend ComboBox1.AutoCompleteSource = AutoCompleteSource.CustomSource Dim autoCompleteCollection As New AutoCompleteStringCollection() ' 遍历DataTable,提取非空的PNM值到自动完成集合 For Each dr As DataRow In dt.Rows Dim pnmValue As String = dr("PNM").ToString().Trim() If Not String.IsNullOrEmpty(pnmValue) Then autoCompleteCollection.Add(pnmValue) End If Next ComboBox1.AutoCompleteCustomSource = autoCompleteCollection End Using End Using Catch myerror As OleDbException MessageBox.Show("Error: " & myerror.Message) Finally End Try End Sub Private Sub ComboBox1_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectionChangeCommitted fillDataGridView1() fillDataGridView2() End Sub
说明:
- 跳过了DataTable中的第一个空行,避免自动完成列表出现空条目
- 可根据需求修改
AutoCompleteMode的值,比如只需要建议列表就改成AutoCompleteMode.Suggest
内容的提问来源于stack exchange,提问作者roy
相关产品推荐
相关产品推荐

