Vb.net 将组合框“Droppeddown”值设置为false时参数超出范围异常
我有一个用于搜索数据库的组合框。下拉列表将显示用户正在搜索的内容是否有匹配项,如果没有,则将收回。但是,当我的代码将DroppedDown值更改为False时,我立即得到ArgumentOutOfRangeException 错误还包括其他信息:“0”的InvalidArgument=值对“index”无效 我不确定发生了什么,因为这是我第一次尝试组合框并自动更新它们Vb.net 将组合框“Droppeddown”值设置为false时参数超出范围异常,vb.net,visual-studio,Vb.net,Visual Studio,我有一个用于搜索数据库的组合框。下拉列表将显示用户正在搜索的内容是否有匹配项,如果没有,则将收回。但是,当我的代码将DroppedDown值更改为False时,我立即得到ArgumentOutOfRangeException 错误还包括其他信息:“0”的InvalidArgument=值对“index”无效 我不确定发生了什么,因为这是我第一次尝试组合框并自动更新它们 'Search box - Text Update Event Private Sub searchBoxCB_Text
'Search box - Text Update Event
Private Sub searchBoxCB_TextUpdate(sender As Object, e As EventArgs) Handles searchBoxCB.TextUpdate
'Begin search when user types
searchBoxCB.Items.Clear()
'Check if search has numbers in it
Dim letters() As Char = searchBoxCB.Text
Dim noNumbers As Boolean = True
For Each c As Char In letters
If (IsNumeric(c)) Then
noNumbers = False
End If
Next
'Only search if no numbers
If (noNumbers) Then
searchDataPerson(searchBoxCB.Text, "Person1")
searchDataPerson(searchBoxCB.Text, "Person2")
End If
searchBoxCB.SelectionStart = searchBoxCB.Text.Length + 1 'Move cursor to end
Cursor.Current = Cursors.Default
End Sub
'Search PERSON operation
Private Sub searchDataPerson(input As String, person As String)
Dim itemAdded As Boolean = False
myConnection.Open()
Dim str As String = "SELECT * FROM AllEmployeeDirectory WHERE " + person + " Like """ + input + "%""" 'Searches for NAMES beginning with input
Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection) '*
dr = cmd.ExecuteReader '*
'Reads through all data
While dr.Read
searchBoxCB.DroppedDown = True
searchBoxCB.Items.Add(dr(person) + " - " + dr("Desk"))
itemAdded = True
End While
If (Not itemAdded) Then
searchBoxCB.DroppedDown = False 'ERROR OCCURS HERE
End If
myConnection.Close()
End Sub
我无法让你的代码工作,尽管它有很多变化 但是,通过将combobox设置为与以下代码一起使用autocomplete,我得到了您想要的结果:
Option Infer On
Public Class Form1
Public Shared Function ACSC(s1 As String, s2 As String) As AutoCompleteStringCollection
'TODO: substitute your query for obtaining the data here
Dim a = {"A", "B", "AB", "CBA", "CB", "BC", "ABC"}
Dim sc As New AutoCompleteStringCollection
sc.AddRange(a.ToArray())
Return sc
End Function
Private Sub searchBoxCB_TextChanged(sender As Object, e As EventArgs) Handles searchBoxCB.TextChanged
Dim txt = DirectCast(sender, ComboBox).Text
searchBoxCB.AutoCompleteSource = AutoCompleteSource.CustomSource
searchBoxCB.AutoCompleteCustomSource = ACSC(txt, "")
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
searchBoxCB.AutoCompleteMode = AutoCompleteMode.SuggestAppend
End Sub
End Class
a上的.ToArray只是为了防止a恰好是LINQ方法
信用证:尽管你的代码有很多变化,但我还是无法让它工作 但是,通过将combobox设置为与以下代码一起使用autocomplete,我得到了您想要的结果:
Option Infer On
Public Class Form1
Public Shared Function ACSC(s1 As String, s2 As String) As AutoCompleteStringCollection
'TODO: substitute your query for obtaining the data here
Dim a = {"A", "B", "AB", "CBA", "CB", "BC", "ABC"}
Dim sc As New AutoCompleteStringCollection
sc.AddRange(a.ToArray())
Return sc
End Function
Private Sub searchBoxCB_TextChanged(sender As Object, e As EventArgs) Handles searchBoxCB.TextChanged
Dim txt = DirectCast(sender, ComboBox).Text
searchBoxCB.AutoCompleteSource = AutoCompleteSource.CustomSource
searchBoxCB.AutoCompleteCustomSource = ACSC(txt, "")
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
searchBoxCB.AutoCompleteMode = AutoCompleteMode.SuggestAppend
End Sub
End Class
a上的.ToArray只是为了防止a恰好是LINQ方法
信用证:经过一些令人沮丧的实验,我终于实现了对原始代码的简单解决方案。我没有执行searchBoxCB.DroppedDown=False,而是将其更改为searchBoxCB.dropdownhight=1,这实际上也做了同样的事情。然后我还将高度重置回65,其中下拉值设置为true。它现在正在按预期工作,真不敢相信我以前没有想到过这种解决方法。经过一些令人沮丧的实验,我终于实现了对原始代码的简单解决方案。我没有执行searchBoxCB.DroppedDown=False,而是将其更改为searchBoxCB.dropdownhight=1,这实际上也做了同样的事情。然后我还将高度重置回65,其中下拉值设置为true。它现在正在按预期工作,真不敢相信我以前没有想到过这种解决方法。我有一种很好的感觉,这可能是您的操作顺序。由于你没有发布任何东西,我无法证实。我对扎格勒先生的好感有好感。我对你在外部网站上发布代码而不是作为你问题的一部分感到不好-我刚开始使用Stackoverflow,所以我还不熟悉它的所有方面。我在做其他事情的时候,必须快速地把代码升级。我很快就会把它放到问题中。好了,问题补充了代码:我有一个很好的感觉,这可能是你的操作顺序。由于你没有发布任何东西,我无法证实。我对扎格勒先生的好感有好感。我对你在外部网站上发布代码而不是作为你问题的一部分感到不好-我刚开始使用Stackoverflow,所以我还不熟悉它的所有方面。我在做其他事情的时候,必须快速地把代码升级。我们很快就会把它放到问题中。好了,问题中添加了代码:这是可行的,但我更愿意让下拉菜单真正下拉,让用户点击一个项目。如果我可以让用户从下拉列表中选择,我在选择和项后执行该功能的方式会更简单。我将完整模式改为建议而不是附加,它可以执行我想要的操作,我不确定我是否能得到建议的索引,但我会尝试。我同意这并不像你试图让它工作的方式那么好,但至少如果有多个选择,它会显示一个下拉列表。即使我将searchBoxCB.DroppedDown=False这一行包装起来,Try..Catch中也会出现错误并忽略了异常。当它到达searchBoxCB.SelectionStart=searchBoxCB.Text.Length+1时,我仍然会出现错误。我尝试将AutoCompleteSource更改为ListItems,并将样式更改为DropDown,我认为这可能有效。我只实现了测试数据,所以我现在将尝试实际搜索数据库。这是可行的,但我更愿意让下拉菜单实际下拉,以便用户单击某个项目。如果我可以让用户从下拉列表中选择,我在选择和项后执行该功能的方式会更简单。我将完整模式改为建议而不是附加,它可以执行我想要的操作,我不确定我是否能得到建议的索引,但我会尝试。我同意这并不像你试图让它工作的方式那么好,但至少如果有多个选择,它会显示一个下拉列表。即使我将searchBoxCB.DroppedDown=False这一行包装起来,Try..Catch中也会出现错误并忽略了异常。当它到达searchBoxCB.SelectionStart=searchBoxCB.Text.Length+1时,我仍然会出现错误。我尝试将AutoCompleteSource更改为ListItems,并将样式更改为DropDown,我认为这可能有效。我只实现了测试数据,所以现在我将尝试实际搜索数据库。