2010-07-22 8 views
0

lorsque vous cliquez sur le bouton de démarrage dans le code ci-dessous, le formulaire semble perdre le focus et je dois cliquer deux fois sur le bouton d'arrêt pour arrêter le compte. (Premier clic pour activer le formulaire, deuxième pour cliquer sur le bouton) Quelqu'un peut-il expliquer ce comportement ou offrir une meilleure alternative?Le formulaire perd le focus après avoir cliqué sur le bouton

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 

Répondre

0

La forme ne perd pas le focus. Le bouton d'arrêt ne prend pas le focus après avoir cliqué sur le bouton de démarrage. Vous pouvez lui donner le focus (btnStop.Focus()) dans btnStart_Click. L'autre problème est que vous devriez changer votre fonction de test. C'est plus comme un repère. Lisez quelques articles sur pourquoi utiliser Application.DoEvents could be dangerous et poor design en général. Il est préférable d'utiliser System.Windows.Forms.Timer ou BackgroundWorkers à la place. Je pense que dans votre code, Application.DoEvents ne laisse d'abord que le bouton d'arrêt se concentrer et vous avez besoin d'un second clic pour effectuer l'événement click.

Questions connexes