娘を楽しませるために、WinMo 6.x 用の簡単なアプリケーションを作成しました。動物の画像と動物のノイズのペアのセットを保持し、画像の 1 つをランダムに表示します。画像をクリックすると動物の鳴き声が聞こえ、2 歳児は気が散ってしまいます :-) そして次の画像が表示されます。
ただし、彼女は画面を叩く傾向があるため、実際の流れは、画像が表示されて数回クリックすることです。いくつかの動物の鳴き声が再生された後、画像が次のランダムな動物に変わります。
私の推測では、プログラムがノイズを再生してブロックしている間に、OS がクリック イベントをキューに入れ、できるだけ早くそれらを処理していると思われます。マシンがハングし、すべてが再びクリアされたときにテキストが表示される間、入力を続けることができるのとほぼ同じ方法です。
したがって、フォームには2つの変数があります
Private thisCollectionOfThings As ObjectStore
Private currentObject As RealWorldObject
ObjectStore は、特定のペアが最近返されていないことを確認して、ランダムな RealWorldObject を返す getNextObject メソッドを持つ List(Of 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
クリック キューイングの問題を回避するためにイベント ハンドラーを削除しようとしたことがわかりますが、機能していません。
これを回避する方法についてのアドバイスは非常に高く評価されます...それ以外の場合は、画像ボックスコントロールの周りに独自のラッパーを書いてクリックを処理しようとしますが、他の誰かの経験が示唆する場合は時間を使いたくありませんそれは役に立ちません。