2010-07-22 6 views
0

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

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 

ответ

0

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

Смежные вопросы