Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 将组合框“Droppeddown”值设置为false时参数超出范围异常_Vb.net_Visual Studio - Fatal编程技术网

Vb.net 将组合框“Droppeddown”值设置为false时参数超出范围异常

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

我有一个用于搜索数据库的组合框。下拉列表将显示用户正在搜索的内容是否有匹配项,如果没有,则将收回。但是,当我的代码将DroppedDown值更改为False时,我立即得到ArgumentOutOfRangeException

错误还包括其他信息:“0”的InvalidArgument=值对“index”无效

我不确定发生了什么,因为这是我第一次尝试组合框并自动更新它们

'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,我认为这可能有效。我只实现了测试数据,所以现在我将尝试实际搜索数据库。