首页 > 解决方案 > 循环结束后,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

标签: .netvisual-studio

解决方案


你有一个无限循环。您设置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

推荐阅读