Форма теряет фокус после нажатия кнопки - PullRequest
0 голосов
/ 22 июля 2010

при нажатии на кнопку запуска в приведенном ниже коде форма, кажется, теряет фокус, и мне нужно дважды нажать кнопку остановки, чтобы остановить счет. (Сначала нажмите, чтобы активировать форму, затем нажмите кнопку) Кто-то может объяснить это поведение или предложить лучшую альтернативу?

Public Class Form1
    Dim testrunning As Boolean

    Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
        testrunning = True
        test()
    End Sub

    Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStop.Click
        testrunning = False
    End Sub

    Private Sub test()
        Dim count As Integer

        While testrunning = True
            count += 1
            TextBox1.Text = count.ToString
            System.Threading.Thread.Sleep(100)
            Application.DoEvents()
        End While
    End Sub
End Class

1 Ответ

0 голосов
/ 22 июля 2010

Форма не теряет фокус.Кнопка «Стоп» не получает фокус после нажатия кнопки «Пуск». Вы можете установить фокус (btnStop.Focus ()) в btnStart_Click.Другая проблема заключается в том, что вы должны изменить свою тестовую функцию.Это больше похоже на ориентир.Прочитайте несколько статей о том, почему использование Application.DoEvents может быть опасно и имеет плохой дизайн в целом.Вместо этого лучше использовать System.Windows.Forms.Timer или BackgroundWorkers .Я думаю, что в вашем коде Application.DoEvents сначала только позволяет кнопке «Стоп» получить фокус, и вам нужно второй щелчок, чтобы выполнить событие нажатия.

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