.net - 循环结束后,VB .net 表单挂起(无法单击表单)
问题描述
我有一个项目,我正在整合。在我进入一个循环以从输入框(从先前的列表框确定的框数)中将项目输入列表框后 - 它在正确的时间结束循环,但是,我根本无法单击表单。关于为什么会发生这种情况,没有什么清楚的说明。我必须停止调试才能关闭表单。有任何想法吗?
Private Sub btnEnterBib_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnterBib.Click
' The btnEnterBib click event accepts and x number of Bib numbers.
' 1 for each time entry.
' Declare and initialize variables
Dim strBibEntry As String = CStr(0)
Dim strInputMessage As String = "Enter the BIB #"
Dim strInputHeading As String = "BIB Entry"
Dim strNegativeError As String = "Error - Enter a positive number for the Bib #"
Dim strNonNumericError As String = "Error - Enter a positive number for the Bib #"
Dim intNumberofEntries As Integer = 1
Dim intBibNum As Integer = 0
Dim intTotalEntries As Integer = 0
Dim strCancelClicked As String = " "
Dim intMaxNumberofEntries As Integer = (lstTimeEntry.Items.Count)
Do Until intTotalEntries > intMaxNumberofEntries Or strBibEntry = strCancelClicked
If intNumberofEntries <= intMaxNumberofEntries Then
strBibEntry = InputBox(strInputMessage & intNumberofEntries, strInputHeading, " ")
End If
If IsNumeric(strBibEntry) Then
intBibNum = Convert.ToInt32(strBibEntry)
If intBibNum > 0 Then
lstBibs.Items.Add(strBibEntry)
intNumberofEntries += 1
Else
strInputMessage = strNegativeError
End If
Else
strInputMessage = strNonNumericError
End If
Loop
btnSyncTimesBibs.Enabled = True
btnEnterBib.Enabled = False
End Sub
解决方案
你有一个无限循环。您设置intTotalEntries
为 0,并通过检查是否intTotalEntries
大于来控制循环intMaxNumberOfEntries
,我认为这永远不会是负数。
在你的循环中,你永远不会改变intTotalEntries
. 相反,您使用intNumberOfEntries
,还将其与intMaxNumberOfEntries
. 你用它来决定你是否应该接受更多的条目,然后你会增加intNumberOfEntries
。一旦该变量超过最大值,您将不再接受输入。这就是为什么您认为循环正在结束。事实上,它现在已经开始比赛了,因为intTotalEntries
它始终为零,并且永远不会大于最大值。
如您所见,无限循环将锁定所有内容,直到程序被强制终止。
我怀疑您并不是要使用两个单独的变量来计算条目。也不需要第一个 If 语句。
尝试这个:
Do Until intNumberOfEntries > intMaxNumberOfEntries Or strBibEntry = strCancelClicked
strBibEntry = InputBox(strInputMessage & intNumberOfEntries, strInputHeading, " ")
'Remainder of your code here
Loop