(VB.Net)防止将重复项添加到列表框中

时间:2019-05-03 02:26:51

标签: vb.net duplicates inputbox

在处理我正在处理的作业中出现重复项时遇到麻烦。

任务是田径比赛经理。从文本文件中读取时间,然后为每次从文本文件中加载的时间输入一个围嘴编号(又名,但是时间文本文件中有很多行)

围兜编号和时间然后按照输入顺序进行同步。要求是必须使用一个输入框一次输入一个号码。每次输入围兜号码,它都会被加载到名为lstBibs的列表框中。

问题 我在使用输入框方面的经验有限,到目前为止,我在运行时中忽略了我为检查重复项所做的任何尝试。我也不确定在哪里放置一个循环来检查输入框中是否有重复项。下面是到目前为止的代码。

 Dim i As Integer = 0
    Dim Bibno As Integer = 0
    Dim strrow As String = ""
    Dim count As Integer = 0
    Dim errorCount1 As Integer = 0

    'Reads through the number of rows in the Time Text File. 
    'The Number of rows we have in the text file corresponds to the number
    'of bib numbers we need. Thus the input box will loop through bib 
    'numbers until
    'we reach the amount of loaded times

    Try

        For Each item In lstTimeEntry.Items

            i += 1

            For Bibno = 1 To i
                count += 1
                Bibno = InputBox("Enter Bib #" & count)
                lstBibs.Items.Add(count & " - " & Bibno)
                btnSyncTimesBibs.Enabled = True

            Next
        Next

    Catch ex As Exception

        'Catches any invalid data that isnt a number
        MsgBox("Invalid Input, Please Try Again", , "Error")
        lstBibs.Items.Clear()
        btnSyncTimesBibs.Enabled = False

    End Try

所以我假设我必须使用一个for循环来检查每个列表框项目是否重复,我只是不确定该循环相对于上面的代码在哪里。

非常感谢所有帮助。谢谢。

2 个答案:

答案 0 :(得分:0)

根据评论中的Steven B建议,您可以像这样检查它:

If Not listTimeEntry.Items.Contains(itemToBeInserted) Then 
     listTimeEntry.Items.Add(itemToBeInserted)
End If

答案 1 :(得分:0)

不要对异常情况使用异常处理。异常是超出我们控制范围的事情,例如不可用的网络连接。用户未能输入正确的输入完全不是例外。验证输入。不要通过清除列表来使用户重新开始,而只是要求他重新输入最后一个输入。

我使用TryParse验证用户输入。如果第一个条件成功,则将检查AndAlso条件。如果TryParse失败,则永远不会评估AndAlso条件,因此我们不会获得异常。第二个条件是检查该号码是否已被使用。只有在两个条件都通过的情况下,我们才将数字添加到“使用的数字”列表中,更新lstBibs并增加计数。

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim Bibno As Integer
    Dim count As Integer = 1
    Dim usedNumbers As New List(Of Integer)
    Do While count <= lstTimeEntry.Items.Count
        Dim input = InputBox("Enter Bib #" & count)
        If Integer.TryParse(input, Bibno) AndAlso Not usedNumbers.Contains(Bibno) Then
            usedNumbers.Add(Bibno)
            lstBibs.Items.Add(count & " - " & Bibno)
            count += 1
        Else
            MessageBox.Show("Please enter a number that does not appear in the list box")
        End If
    Loop
End Sub