大至急返答お願いします。
学校の自由実験で、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' にキャストできません。
という意味深な文章が表示されてしまいます。
まだ初心者なので、よく分からないことが結構あります。
自己解決しようと努力してきましたが結局できず、終了期間間際になってしまいました。
是非御返答の程よろしくお願いします。
No.1ベストアンサー
- 回答日時:
ソースをさらっと静的レビューしただけですが……
> For Each mole1 In Me.Controls
この行はMe.Controlsなので画面のコントロールすべてを対象に処理しちゃってますよね、PictureBoxだけでなくLabelに対しても。それなのにそのlabelをPictureBox専用の入れ物であるmole1に入れようとしたら、そりゃエラーとなります。
なお、キャストというのは型変換(integerをlongにするなど)という意味です。そのことからどういうエラーメッセージか察しがつくでしょうか?
そもそも、動作テストをして確認したわけではないですが、Timer4_Tick内のForの扱い方とか、いろいろおかしい気がします……が、とりあえずいろいろがんばってみてください。
それと説教くさくてすみませんが「どこで、だれが、なにを、どうした?」を常に考えるようにしましょう。質問文では、どこの行でエラーが起きているか(どこで?)が抜けています。デバッガーが表示しているはずから。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) Visual Basic : ImageListの画像がそろったときにメッセージを表示 1 2023/07/20 13:53
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Visual Basic(VBA) エクセルで、1つのセルで上書き足し算して セルの範囲を指定できますか? パソコン初心者です。 お時間 3 2023/07/05 06:13
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SavePictureで保存できない
-
ボールが壁に当たって跳ね返る...
-
Matlabでsin波を使って矩形波を...
-
SCALEの使い方教えてください
-
Functionの戻り値を配列にした...
-
チェックボックスを操作できな...
-
C言語のサフィックスについて
-
VBA public変数はどのようなこ...
-
C#のループでtextboxに値を入れ...
-
他のフォームから別のフォーム...
-
マクロ 条件式
-
【VB6.0】 あるフォームから他...
-
リストビューの列ヘッダーの幅...
-
【VBScript】変数のスコープ
-
VB.NETでのイベントの途中終了
-
verilogのcase文
-
アクセスできない保護レベルエ...
-
VBAでcallで呼び出したsubを終...
-
VB
-
ExcelのVBAで文章にある複数の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SavePictureで保存できない
-
文字間の幅の設定
-
Matlabでsin波を使って矩形波を...
-
ボールが壁に当たって跳ね返る...
-
FlexGridで文字色を変更。
-
[ASP]小数点第2位以下をカット!
-
C言語のOpenGLで複数のテクスチ...
-
VB6 ドラッグ&ドロップ
-
ピッ、ってアルファベットでど...
-
もぐらたたきのプログラミング
-
PictureBoxでのアニメーション...
-
グラフィックの表示について VB6
-
(VB)ピクチャボックスに表示し...
-
ホンテットマンションに乗った...
-
SCALEの使い方教えてください
-
VB6でマウスのドラッグで範囲を...
-
一次元静電粒子コードについて...
-
日付の計算
-
画像処理
-
sublimit textっていうエディタ...
おすすめ情報