单击下面代码中的开始按钮时,表单似乎失去焦点,我需要单击停止按钮两次以停止计数。 (首先点击激活表格,然后点击第二个按钮)有人可以解释一下这种行为还是提供更好的选择?
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 :(得分:0)
表单没有松散的焦点。单击开始按钮后,停止按钮不会获得焦点 - 您可以在btnStart_Click中将其聚焦(btnStop.Focus())。 另一个问题是你应该改变你的测试功能。它更像是一个基准。 阅读一些关于为什么使用Application.DoEvents could be dangerous并且一般为poor design的文章。最好使用System.Windows.Forms.Timer或BackgroundWorkers代替。 我认为在你的代码中,Application.DoEvents首先只让停止按钮获得焦点,你需要再次点击来执行点击事件。