首页 > 解决方案 > 无限循环导致表单不显示 vb

问题描述

我在这个 sub 中有一个无限循环,因为我希望程序继续测试这个过程以查看变量是否已更改。当我在调试器中运行程序时,什么都没有显示,包括表单,但是当我从程序中删除无限循环时,表单又出现了。有谁知道为什么会这样?我还应该提到我也尝试过 DO LOOP。任何人都可以帮忙吗?

    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

标签: vb.netvisual-studio

解决方案


无论如何,您都需要摆脱所有这些代码。取决于你如何首先改变BackColor那些Buttons,更新石灰计数可能最好在那里完成。否则,您应该处理适当的事件,例如

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

请注意,此代码假定只有两个可能的BackColor值,并且Buttons默认情况下都不是石灰。如果您的场景比这更复杂,那么您可能需要稍微更改代码,例如

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

推荐阅读