アプリ版:「スタンプのみでお礼する」機能のリリースについて

大至急返答お願いします。
学校の自由実験で、VB2008でもぐらたたきを作っているのですが、以下のソースでデバッグし、ゲームを開始するボタンを押すとすると変なバグが表示されます。

Private Sub PictureBox_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Static Hit As Integer 'もぐらを叩いた時
Me.Controls.Remove(sender) 'もぐらが消える
Hit += 1 'Hitが1加算される
Point = 0 + Hit 'Pointは 0+ Hit で表わされる
Label5.Text = Format(Point, "000")
End Sub


Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick

Dim X, Y As Integer '座標指定
Dim mole1 As System.Windows.Forms.PictureBox '表示されるモグラ

For Each mole1 In Me.Controls
mole1.Tag -= 1 'もぐらの出現している時間のカウント
If mole1.Tag < 0 Then
Me.Controls.Remove(mole1) 'カウントが0になったらもぐらが消える
End If
Next
If Rnd() * 4 < 1 Then
mole1 = New System.Windows.Forms.PictureBox '1/4の確率でもぐらを表示
mole1.Size = New Size(100, 100) 'もぐらのサイズは100*100
X = Rnd() * (Me.ClientSize.Width - 100)
Y = Rnd() * (Me.ClientSize.Height - 100)
mole1.Location = New Point(X, Y) 'もぐらはX,Yの場所に表示される
mole1.Image = My.Resources.Mole
mole1.Tag = Int(Rnd() * 9) + 7 'もぐらの停滞している時間のカウント
AddHandler mole1.Click, AddressOf PictureBox_Click
Me.Controls.Add(mole1)
End If
End Sub

もぐらを表示させるためのTimerのソースはこれなのですが、デバッグしてゲームスタートボタンを押すと

InvalidCastExceptionはハンドルされませんでした。
型 'System.Windows.Forms.Label' のオブジェクトを型 'System.Windows.Forms.PictureBox' にキャストできません。

という意味深な文章が表示されてしまいます。
まだ初心者なので、よく分からないことが結構あります。
自己解決しようと努力してきましたが結局できず、終了期間間際になってしまいました。
是非御返答の程よろしくお願いします。

A 回答 (1件)

ソースをさらっと静的レビューしただけですが……



> For Each mole1 In Me.Controls
 この行はMe.Controlsなので画面のコントロールすべてを対象に処理しちゃってますよね、PictureBoxだけでなくLabelに対しても。それなのにそのlabelをPictureBox専用の入れ物であるmole1に入れようとしたら、そりゃエラーとなります。

 なお、キャストというのは型変換(integerをlongにするなど)という意味です。そのことからどういうエラーメッセージか察しがつくでしょうか?

 そもそも、動作テストをして確認したわけではないですが、Timer4_Tick内のForの扱い方とか、いろいろおかしい気がします……が、とりあえずいろいろがんばってみてください。
 それと説教くさくてすみませんが「どこで、だれが、なにを、どうした?」を常に考えるようにしましょう。質問文では、どこの行でエラーが起きているか(どこで?)が抜けています。デバッガーが表示しているはずから。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!