我正在为一个非常简单的时钟应用程序工作。我有一个填充了员工姓名的组合框,以及一个显示员工登录的列表框。如果员工已经登录(在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,如果这很重要的话。
谢谢大家。
答案 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