したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

ユーザ定義関数の不具合

1おんだん:2011/01/25(火) 11:16:48
2年ほど前にもユーザ定義関数(コントロール配列)のプログラムを
ご教示していただいた者です。
再度、同じような壁に当たりましたので、ご教示していただけないでしょうか。
よろしくお願いします。

①のコードは、4枚の画像を交互に表示して動画風に見せているプログラムです。
これはエラーもなく正常に動作しています。
4枚の画像のnameはPicBox0、PicBox1、PicBox2、PicBox3の4つです。
なお、以前ご教示していただいた関数を利用したものです。その節には大変丁寧に対応していただき感謝申し上げます。

ところが、②のプログラムはエラーが表示され終了してしまいます。
3枚の画像はグー、チョキ、パーの画像であり、nameはPicBox0、PicBox1、PicBox2の3つです。
②のコードは関数を利用した①と同じようなプログラムですが、→の部分で「System.NullReferenceExceptionの初回例外が
発生した」ということでデバッグが終了します。
①と同じように関数を利用しているのですが、どのように修正すれば、正常に動くプログラムになるか不明です。
さまざまなことを試行的に実施しましたが、私の能力では無理ですので、再度ご教示願えませんでしょうか。


Public Class Form1
Dim i As Short

Private Function PicBox(ByVal index As Integer) As PictureBox
Return DirectCast(Me.Controls("PicBox" & index.ToString), PictureBox)
End Function

Private Sub Cmdstart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdstart.Click
Timer1.Enabled = True
i = 0
End Sub

Private Sub Cmdstop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdstop.Click
Timer1.Enabled = False
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
PicBoxMain.Image = PicBox(i).Image
i = (i + 1) Mod 4
End Sub

End Class


Public Class Form1
Dim i As Integer
Dim x As Integer

Private Function PicBox(ByVal index As Integer) As PictureBox
Return DirectCast(Me.Controls("PicBox" & index.ToString), PictureBox)
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'PicBoxcp.Image = PicBox(0).Image
'PicBoxmy.Image = PicBox(0).Image
PicBoxcp.Image = PicBox0.Image
PicBoxmy.Image = PicBox0.Image
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
i = Int(Rnd() * 3)
 → PicBoxcp.Image = PicBox(i).Image
PicBoxmy.Image = PicBox(x).Image

Select Case i - x
Case 0
TextBox1.Text = "あいこでした。"
Case 1, -2
TextBox1.Text = "あなたの勝ち!"
Case -1, 2
TextBox1.Text = "あなたの負け"
End Select
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
x = 0
End Sub
Sub RadioButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadioButton1.Click
x = RadioButton1.TabIndex
End Sub
Private Sub RadioButton2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadioButton2.Click
x = RadioButton2.TabIndex
End Sub
Private Sub RadioButton3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadioButton3.Click
x = RadioButton3.TabIndex
End Sub

End Class

なお、別の考え方では正常に動作します。
Dim te(3) As PictureBoxと定義して、フォームをロードしたときに、次のように定義して各画像を表示する
プログラムは、正常に動いています。
te(0)=PicBox0
te(1)=PicBox1
te(2)=PicBox2

i = Int(Rnd() * 3)
PicBoxcp.Image = te(i).Image
PicBoxmy.Image = te(x).Image

ご教示をよろしくお願いします。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板