VB.NET - 无法退出For / Next循环

时间:2016-03-14 14:39:23

标签: vb.net combobox listbox

我正在为一个非常简单的时钟应用程序工作。我有一个填充了员工姓名的组合框,以及一个显示员工登录的列表框。如果员工已经登录(在ListIn列表框中显示),那么子应该通知用户并退出而不尝试添加再次向ListIn框中的人。不幸的是,我已经开始了#34;消息,但该人再次添加到ListIn框。

这是我的代码:

Private Sub btnIn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIn.Click
    For i As Integer = 0 To listIn.Items.Count - 1
        If (listIn.Items(i).ToString.Contains(cboEmployees.SelectedItem)) Then
            MsgBox("Error - employee is already clocked in.", vbOKOnly, "Error")
            Exit For
        Else
            listIn.Items.Add(cboEmployees.SelectedItem)
            timerDateTime.Stop() ' Turn off the timer, prepare to display the clock-in label.
            lblTime.Text = "Success!"
            lblDate.Text = "You are clocked in."
            timerLabel.Start() ' Turn on the timer for the clock-in label.
        End If
    Next
    cboEmployees.SelectedIndex = 0 ' After clocking in, set dropdown box to blank, disables buttons again.
    listIn.Refresh()
End Sub

对这个小问题的任何帮助都将非常感激。我正在使用VB.NET 2010 Professional,如果这很重要的话。

谢谢大家。

2 个答案:

答案 0 :(得分:2)

您在这里重叠两个不同的任务:搜索列表并更新列表。在For循环中,您将测试当前条目是否与员工匹配,如果它不匹配,则添加员工。这意味着除非第一个条目与员工匹配,否则您将执行" Else"您的If语句的一部分,并添加员工。因此,即使第二个条目匹配,也为时已晚 - 您已经添加了该员工,因为第一个条目并不匹配。

您要做的是将搜索与更新分开。创建一个名为" isClockedIn"的布尔变量。并将其设置为false。然后浏览For循环,如果条目匹配,则将isClockedIn设置为true并退出循环。然后,在For循环之后,执行另一个检查isClockedIn的If语句,并更新列表或显示错误。

答案 1 :(得分:0)

已完成的有效代码,以防其他人遇到此问题。

Private Sub btnIn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIn.Click
    Dim isIn As Boolean = False
    For i As Integer = 0 To listIn.Items.Count - 1
        If (listIn.Items(i).ToString.Contains(cboEmployees.SelectedItem)) Then
            isIn = True
            MsgBox("Error - employee is already clocked in.", vbOKOnly, "Error")
            Exit For
        End If
    Next
    If isIn = False Then
        listIn.Items.Add(cboEmployees.SelectedItem)
        timerDateTime.Stop() ' Turn off the timer, prepare to display the clock-in label.
        lblTime.Text = "Success!"
        lblDate.Text = "You are clocked in."
        timerLabel.Start() ' Turn on the timer for the clock-in label.
    End If


    cboEmployees.SelectedIndex = 0 ' After clocking in, set dropdown box to blank, disables buttons again.
    listIn.Refresh()
End Sub