Vb.net 无限循环导致窗体不显示

Vb.net 无限循环导致窗体不显示,vb.net,visual-studio,Vb.net,Visual Studio,我在这个子程序中有一个无限循环,因为我想让程序继续测试这个过程,看看变量是否发生了变化。当我在调试器中运行程序时,没有显示任何内容,包括表单。但是,当我从程序中删除无限循环时,表单再次显示。有人知道为什么会这样吗?我还应该提到,我也尝试过DO循环。有人能帮忙吗 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim greenCount As Integer Dim

我在这个子程序中有一个无限循环,因为我想让程序继续测试这个过程,看看变量是否发生了变化。当我在调试器中运行程序时,没有显示任何内容,包括表单。但是,当我从程序中删除无限循环时,表单再次显示。有人知道为什么会这样吗?我还应该提到,我也尝试过DO循环。有人能帮忙吗

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Dim greenCount As Integer
    Dim looptest As Boolean = True
    While looptest = True
        For Each control In Me.Controls.OfType(Of Button)
            If control.BackColor = Color.Lime Then
                greenCount += 1
            End If
        Next
        txtFielder.Text = greenCount.ToString
    End While
End Sub
在窗体首次显示之前发生


这意味着,只要在此事件中循环,就永远看不到表单。您可能希望改用显示的
事件。

您需要清除所有这些代码。首先,根据您如何更改那些
按钮的
背景色
,更新石灰计数可能是最好的方法。否则,您应该处理适当的事件,例如

Private limeButtonCount As Integer = 0

Private Sub Buttons_BackColorChanged(sender As Object, e As EventArgs) Handles Button3.BackColorChanged,
                                                                               Button2.BackColorChanged,
                                                                               Button1.BackColorChanged
    If DirectCast(sender, Button).BackColor = Color.Lime Then
        limeButtonCount += 1
    Else
        limeButtonCount -= 1
    End If

    TextBox1.Text = limeButtonCount.ToString()
End Sub
请注意,此代码假定只有两个可能的
背景色
值,并且默认情况下并非所有
按钮
。如果您的场景稍微复杂一些,那么您可能需要稍微更改代码,例如

Private limeButtonCount As Integer = 0

Private Sub Buttons_BackColorChanged(sender As Object, e As EventArgs) Handles Button3.BackColorChanged,
                                                                               Button2.BackColorChanged,
                                                                               Button1.BackColorChanged
    limeButtonCount = Controls.OfType(Of Button)().Count(Function(b) b.BackColor = Color.Lime)

    TextBox1.Text = limeButtonCount.ToString()
End Sub

好吧,你在一个循环中。条件何时变为假?嗯,应该已经完全阅读了信息,而不仅仅是标题/代码。为什么您首先需要继续检查表单上按钮的
背景色?是否需要运行无限循环来测试是否单击了
按钮
?当然不是。您可以处理适当的事件。也许你应该处理一个事件来知道你的
按钮的
背景色何时改变。事实上,既然首先必须是您的代码更改
背景色
,那么您为什么还要使用事件呢?在UI中,您可以使用事件来测试这些条件。是什么将按钮的背景色更改为
Color.Lime
?请参阅BuffCurror事件。请考虑下面的答案…但是,要回答您关于为什么会发生这种情况的问题,您永远不会离开load事件。它仍在运行,因为您有一个无限循环。您是否尝试在单独的线程中运行该测试?看,虽然我已经回答了问题本身,但我应该补充一点,我不认为无限循环是OP所做工作的正确工具。这就是说,创建某种在另一个线程上运行的观察程序可能会实现OP想要实现的目标。好主意!不过,我怀疑OP可能是个初学者,如果是的话,他可能很难实现这样的逻辑。