配列を使って
投稿者 neptune  (社会人)
投稿日時
2009/3/25 06:29:21
配列ってのが良くわからんですが、普通こんな書き方もしますって事で。
同じ処理があったのでまとめました。動作確認はしてません。
同じ処理があったのでまとめました。動作確認はしてません。
'1つのプロシージャで複数のコントロールのイベントをハンドルする
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click, Button2.Click, Button3.Click
Select Case sender.name
Case "Button1"
Timer1.Enabled = False
Call Judge(Timer2, Timer3)
Case "Button2"
Timer2.Enabled = False
Call Judge(Timer1, Timer3)
Case "Button3"
Timer3.Enabled = False
Call Judge(Timer1, Timer2)
End Select
End Sub
Private Sub Judge(ByVal pT1 As Windows.Forms.Timer, ByVal pT2 As Windows.Forms.Timer)
If pT1.Enabled = False And pT2.Enabled = False Then
Button4.Enabled = True
If x = y And y = z Then
TextBox1.Text = "的中!"
m = m + 50
TextBox2.Text = m
Else
TextBox1.Text = "残念"
End If
End If
End Sub
'私はこの程度なら此方が好みです。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Timer1.Enabled = False
Call Judge(Timer2, Timer3)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Timer2.Enabled = False
Call Judge(Timer1, Timer3)
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Timer3.Enabled = False
Call Judge(Timer1, Timer2)
End Sub
'この関数は上のと同じもんです。
Private Sub Judge(ByVal pT1 As Windows.Forms.Timer, ByVal pT2 As Windows.Forms.Timer)
If pT1.Enabled = False And pT2.Enabled = False Then
Button4.Enabled = True
If x = y And y = z Then
TextBox1.Text = "的中!"
m = m + 50
TextBox2.Text = m
Else
TextBox1.Text = "残念"
End If
End If
End Sub
投稿者 モウヘイ  (高校生)
投稿日時
2009/3/26 23:56:24
neptuneさん、ありがとうございます。参考にさせていただきます!
投稿者 ハンニャセヨ  (中学生)
投稿日時
2009/3/29 12:20:22
実際に動くように全部コードを書いてみて下さい。
文字上限値オーバーするならしょうがないですが。
文字上限値オーバーするならしょうがないですが。
投稿者 るしぇ  (社会人)
投稿日時
2009/3/29 15:55:37
>実際に動くように全部コードを書いてみて下さい。
?
どっちも書いてあるんじゃないかな?
これ以上のコードは要らないと思います。
その中で同じ処理をどうまとめるかっていう
話だと思いますよ。
?
どっちも書いてあるんじゃないかな?
これ以上のコードは要らないと思います。
その中で同じ処理をどうまとめるかっていう
話だと思いますよ。
投稿者 るしぇ  (社会人)
投稿日時
2009/3/29 16:08:16
少し無駄な処理を増やすと Judge 関数の引数要らなくなるね。
全部のタイマーが止まってたら結果表示すればいいのだから。
その際、Timer を配列に入れておいてループでまわし、動いてる
タイマーを探すという風にしておけば、タイマーが増えたときに
楽かもね。
ただ、もともと配列をわざわざ使うべき場所は無いといってもいいかも。
必要なければ使わなければいい。無理に使うほうが不細工。
スロットの数を10くらいに増やしてみるとか、
ボタンを自動で止めるようなモードを用意したり、
いろいろ改造してみたら?そこまでなってくると
配列を使いたい場所が出てくるかも、出てこないかも。
全部のタイマーが止まってたら結果表示すればいいのだから。
その際、Timer を配列に入れておいてループでまわし、動いてる
タイマーを探すという風にしておけば、タイマーが増えたときに
楽かもね。
ただ、もともと配列をわざわざ使うべき場所は無いといってもいいかも。
必要なければ使わなければいい。無理に使うほうが不細工。
スロットの数を10くらいに増やしてみるとか、
ボタンを自動で止めるようなモードを用意したり、
いろいろ改造してみたら?そこまでなってくると
配列を使いたい場所が出てくるかも、出てこないかも。
投稿者 モウヘイ  (高校生)
投稿日時
2009/3/30 05:21:12
皆様、さまざまなご意見ありがとうございます。少しわからないことがあるので質問します。Private Sub Judge(ByVal pT1 As Windows.Forms.Timer, ByVal pT2 As Windows.Forms.Timer)の「pT1」と「pT2」というのが何かわからないのです。このコードの意味を教えてください。よろしくお願いします!
投稿者 neptune  (社会人)
投稿日時
2009/3/30 07:45:39
>このコードの意味を教えてください。よろしくお願いします!
聞く前にこのサイトには講座を用意して下さっているんですから利用させていただきましょう。
入門講座を一通りやれば、基本的な事はほとんど網羅しているんじゃないでしょうか?
「第11回 メソッドを作る」
ちなみにpT1 とpT2ってのは私が適当に付けた引数名です。
自分の中の規則で、
pは関数の引数に使うようにしてます。ポインタのpのつもり。
Tはもっと適当、Timerと書くのが面倒なだけ。
1,2は2つあるから区別をつけただけ。
です。
クラス外に非公開のJudge(これも処理内容を表す言葉を付けた)という名前を持ち、
Windows.Forms.Timer型の値渡しの引数 pT1
Windows.Forms.Timer型の値渡しの引数 pT2
を持つプロシージャ。
(関数とも呼ばれる。Functionとは値を返すプロシージャ。これも関数と呼ばれる。
メソッドとも呼ばれる。こう見ると呼び名はかなり広範ですね。)
一応説明はしましたが、入門講座はやるべきです。そうした方が間違いなく進歩が早いです。
聞く前にこのサイトには講座を用意して下さっているんですから利用させていただきましょう。
入門講座を一通りやれば、基本的な事はほとんど網羅しているんじゃないでしょうか?
「第11回 メソッドを作る」
ちなみにpT1 とpT2ってのは私が適当に付けた引数名です。
自分の中の規則で、
pは関数の引数に使うようにしてます。ポインタのpのつもり。
Tはもっと適当、Timerと書くのが面倒なだけ。
1,2は2つあるから区別をつけただけ。
です。
クラス外に非公開のJudge(これも処理内容を表す言葉を付けた)という名前を持ち、
Windows.Forms.Timer型の値渡しの引数 pT1
Windows.Forms.Timer型の値渡しの引数 pT2
を持つプロシージャ。
(関数とも呼ばれる。Functionとは値を返すプロシージャ。これも関数と呼ばれる。
メソッドとも呼ばれる。こう見ると呼び名はかなり広範ですね。)
一応説明はしましたが、入門講座はやるべきです。そうした方が間違いなく進歩が早いです。
投稿者 モウヘイ  (高校生)
投稿日時
2009/3/31 01:33:12
neptuneさん、説明ありがとうございます。一通り目を通したつもりだったのですが、甘かったです。もう一度入門講座を見直したいと思います!ありがとうございました。
アドバイスよろしくお願いします(vb2008 express edition)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Timer1.Enabled = False
If Timer2.Enabled = False And Timer3.Enabled = False Then
Button4.Enabled = True
If x = y And y = z Then
TextBox1.Text = "的中!"
m = m + 50
TextBox2.Text = m
Else
TextBox1.Text = "残念"
End If
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Timer2.Enabled = False
If Timer1.Enabled = False And Timer3.Enabled = False Then
Button4.Enabled = True
If x = y And y = z Then
TextBox1.Text = "的中!"
m = m + 50
TextBox2.Text = m
Else
TextBox1.Text = "残念"
End If
End If
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Timer3.Enabled = False
If Timer1.Enabled = False And Timer2.Enabled = False Then
Button4.Enabled = True
If x = y And y = z Then
TextBox1.Text = "的中!"
m = m + 50
TextBox2.Text = m
Else
TextBox1.Text = "残念"
End If
End If
End Sub