質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

Q&A

解決済

1回答

2674閲覧

VB タイマー機能 切り替え

IkumiFukiishi

総合スコア13

VB

VB(ビジュアルベーシック)はマイクロソフトによってつくられたオブジェクト指向プログラミング言語のひとつで、同社のQuickBASICが拡張されたものです。VB6の進化版といわれています。

0グッド

0クリップ

投稿2016/01/18 01:56

VBでストループカラーワードテストを作成したいです.
上に問題(例:「あか」という文字が青色で書かれている)下に答え(例:あか)
上と問題に対して下の答えがあっていれば右クリック,間違っていれば左クリックを押します.右もしくは左クリックされるか,問題が表示されてから2秒立つか,すると次の問題と答えが表示されるというものを作ろうとしています.
現在,問題をランダムな文字と色の組み合わせで表示させること,下の答えをランダムな文字で表示させること,これらの文字を2秒毎に表示させることが下記のコードでできています.
しかし,クリックを押してから2秒後というのがうまくいきません.現在のコードではクリックを押して2秒立たなくても問題が変わってしまいます.
おそらくタイマーイベントの2秒後というのが動き続けているのかなと思うのですが,どのように変えればよいでしょうか.アドバイスをお願いします.

以下現在のコードです.

Public Class Form1
Private Sub colorword1()
Dim a() As String = New String() {"あか", "あお", "みどり"}
Randomize()
Label1.Text = a(Math.Floor(3 * Rnd()))
RichTextBox1.Text = a(Math.Floor(3 * Rnd()))
RichTextBox1.SelectionAlignment = HorizontalAlignment.Center
End Sub
Private Sub colorword2()
Dim rnd As New System.Random()
' 0 以上 2 未満の乱数を取得する(0,1,2がランダムに判定される)
Dim iResult As Integer = rnd.Next(2)
If iResult = 0 Then
RichTextBox1.ForeColor = Color.Red '0の時は赤
ElseIf iResult = 1 Then
RichTextBox1.ForeColor = Color.Blue '1の時は青
ElseIf iResult = 2 Then
RichTextBox1.ForeColor = Color.Green '2の時は緑
End If
End Sub

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick Me.Timer1.Interval = 1000 * 2 Call colorword1() Call colorword2() End Sub Private Sub Form1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick Select Case e.Button Case Windows.Forms.MouseButtons.Left Call colorword1() Call colorword2() Case Windows.Forms.MouseButtons.Right Call colorword1() Call colorword2() End Select End Sub Private Function RGB(p1 As Integer) As Color Throw New NotImplementedException End Function Private Function RGB(p1 As Integer, p2 As Integer, p3 As Integer) As Color Throw New NotImplementedException End Function

End Class

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

マウスクリックされると、いままで経過した時間を破棄してさらに2秒待つ、ということでしたら、Form1_MouseClickハンドラ内で一旦Me.Timer1をStopメソッドで停止して再度Startメソッドで起動すると、さらに2秒後Tickイベントが発生するはずです。

参考:Timer.Stop メソッド

投稿2016/01/18 02:28

編集2016/01/18 02:29
KoichiSugiyama

総合スコア3041

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

IkumiFukiishi

2016/01/18 02:35

できました! Private Sub Form1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseClick Select Case e.Button Case Windows.Forms.MouseButtons.Left Me.Timer1.Stop() Call colorword1() Call colorword2() Me.Timer1.Interval = 2000 Me.Timer1.Start() Case Windows.Forms.MouseButtons.Right Call colorword1() Call colorword2() Me.Timer1.Interval = 2000 Me.Timer1.Start() End Select End Sub
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問