繰り返しビープ音
投稿者 まだまだ  (中学生)
投稿日時
2010/1/13 04:12:33
わざわざそのようにたくさんの変数を置かなくても、
Timer1のIntervalを3000にしてBeep()を呼び出せばいいと思います。
Button1,2,Timer1を置いて、作ってみました。
Button1を押すと始まって、Button2を押すと止まります。
Timer1のIntervalを3000にしてBeep()を呼び出せばいいと思います。
Button1,2,Timer1を置いて、作ってみました。
Button1を押すと始まって、Button2を押すと止まります。
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
timer1.start()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Timer1.Stop()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Beep()
End Sub
End Class
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2010/1/13 04:12:51
> オーバーフローになってできません。
実際に動かしてはいませんが、元のコードをざっと眺めてみると、
Tick イベントで、恐らくこういう動きをしているのだと思います。
1. i が 0 の状態でループ開始(10未満なので処理される)
2. keikatime を 0 → 1 に増加
3. nokoritime に 3 - keikatime すなわち 2 をセット
4. nokoritime は 0 ではないので、If 文の中身は処理されない
(音もしないし、変数 i の値も変化しない)
5. i の値が 0 のまま、再度ループ処理を続行
6. keikatime を 1 → 2 に増加
7. nokoritime に 3 - keikatime すなわち 1 をセット
8. nokoritime は 0 ではないので、If 文の中身は処理されない
(音もしないし、変数 i の値も変化しない)
9. i の値が 0 のまま、再々度ループ処理を続行
これを延々と繰り返すうちに、変数 keikatime の値が Integer の管理範囲外の値に
なってしまい、桁溢れ(オーバーフロー)となってしまうのでしょう。
> 3秒毎にビープ音をだすプログラムを作りたいのですが、
こういうことかな?
実際に動かしてはいませんが、元のコードをざっと眺めてみると、
Tick イベントで、恐らくこういう動きをしているのだと思います。
1. i が 0 の状態でループ開始(10未満なので処理される)
2. keikatime を 0 → 1 に増加
3. nokoritime に 3 - keikatime すなわち 2 をセット
4. nokoritime は 0 ではないので、If 文の中身は処理されない
(音もしないし、変数 i の値も変化しない)
5. i の値が 0 のまま、再度ループ処理を続行
6. keikatime を 1 → 2 に増加
7. nokoritime に 3 - keikatime すなわち 1 をセット
8. nokoritime は 0 ではないので、If 文の中身は処理されない
(音もしないし、変数 i の値も変化しない)
9. i の値が 0 のまま、再々度ループ処理を続行
これを延々と繰り返すうちに、変数 keikatime の値が Integer の管理範囲外の値に
なってしまい、桁溢れ(オーバーフロー)となってしまうのでしょう。
> 3秒毎にビープ音をだすプログラムを作りたいのですが、
こういうことかな?
Sub Timer1_Tick(……
Beep()
End Sub
'開始ボタン
Sub Button1_Click(……
Button1.Enabled = False
Timer1.Interval = 3000
Tiemr1.Start()
Button2.Enabled = True
End Sub
'停止ボタン
Sub Button2_Click(……
Button2.Enabled = False
Timer1.Stop()
Button1.Enabled = True
End Sub
投稿者 ママン  (学生)
投稿日時
2010/1/13 19:59:13
>魔界の仮面弁士さん、まだまださん
とてもスマートな解答例ありがとうございます。
おかげで理解でき、プログラムを作動させることができました。
とてもスマートな解答例ありがとうございます。
おかげで理解でき、プログラムを作動させることができました。
スイッチを押したら3秒毎にビープ音をだすプログラムを作りたいのですが、オーバーフローになってできません。
どうしたらよいですか?
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
hajimetime = 3
Timer1.Interval = 1000
keikatime = 0
Timer1.Start()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim nokoritime As Integer
Dim i As Integer
i = 0
While (i < 10)
keikatime = keikatime + 1
nokoritime = hajimetime - keikatime
If nokoritime = 0 Then
Timer1.Stop()
Beep()
i = i + 1
End If
end while
End Sub
End Class