Бесконечный l oop приводит к тому, что форма не отображается vb - PullRequest
0 голосов
/ 20 января 2020

У меня есть бесконечное число l oop в этом подпрограмме, потому что я хочу, чтобы программа продолжала тестировать этот процесс, чтобы увидеть, изменилась ли переменная. Когда я запускаю программу в отладчике, ничего не появляется, включая форму, однако, когда я удалил бесконечный l oop из программы, форма снова появилась. Кто-нибудь знает, почему это происходит? Я должен также упомянуть, что я попробовал DO L OOP. Кто-нибудь может помочь?

    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

Ответы [ 2 ]

1 голос
/ 21 января 2020

Вы должны избавиться от всего этого кода независимо. В зависимости от того, как вы меняете 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
0 голосов
/ 20 января 2020

Form.Load происходит до того, как форма отображается в первый раз.

Это означает, что вы никогда не увидите свою форму, пока вы l oop в этом событии , Вы, вероятно, хотите использовать событие Shown.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...