我为 WinMo 6.x 编写了一个简单的应用程序来娱乐我的女儿。它拥有一组动物图像到动物噪声对,并随机显示其中一个图像。单击图像时,会播放动物噪音,两岁的孩子会分心:-),然后显示下一张图像。
然而,由于她倾向于在屏幕上猛击,实际流程是图像显示并且她点击了几次;播放几个动物噪音,然后图像变为下一个随机动物。
我的猜测是操作系统正在排队点击事件,而程序在播放噪音时阻塞,然后尽快处理它们。就像您可以在机器挂起时继续打字一样,当一切再次清除时显示文本。
所以表单有两个变量
Private thisCollectionOfThings As ObjectStore
Private currentObject As RealWorldObject
ObjectStore 是一个围绕 List(Of RealWorldObject) 的包装类,它有一个 getNextObject 方法,该方法返回一个随机的 RealWorldObject,该方法检查了最近没有返回特定对。
在我们的表格中...
Private Sub picBox_Click(ByVal sender As Object, ByVal e As EventArgs)
RemoveHandler picBox.Click, AddressOf picBox_Click
picBox.BackColor = Color.Gray
If currentObject.getSoundLocation() <> "" Then
currentObject.playSound()
refreshScreen()
End If
End Sub
Private Sub refreshScreen()
picBox.Image = Nothing
currentObject = thisCollectionOfThings.getNextObject()
If Not currentObject Is Nothing Then addImage()
AddHandler picBox.Click, AddressOf picBox_Click
End Sub
Private Sub addImage()
picBox.Image = New Bitmap(currentObject.getImageLocation())
End Sub
您可以看到我已尝试删除事件处理程序以尝试避免单击排队问题,但它不起作用。
任何关于如何避免这种情况的建议都将受到高度赞赏......否则我会尝试在图片框控件周围编写自己的包装器来尝试处理点击,但如果其他人的经验表明我不愿意用完我的时间那不会有帮助的。