- ベストアンサー
VB.NETでキーボード入力の正誤判定を行う方法
- VB.NETでキーボードからの入力を受け取り、Labelに表示されている文字との正誤判定を行うには、Form1_KeyPressイベントを使用します。
- Form1_KeyPressイベントハンドラ内で、Labelに表示されている文字と入力された文字を比較し、一致すれば正解、不一致であれば不正解の処理を行います。
- 具体的には、Mid関数を使用してLabelのテキストを1文字ずつ取得し、入力された文字と比較します。一致すれば次の文字に進み、不一致であれば不正解の処理を行います。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
イメージはタイピング練習ソフトですか...? > If Mid(Label2.Text, a, 1) = "入力したのと同じ" Then "入力したのと同じ" --> e.KeyChar 「こんな感じにしたいのかな?」と推測しながらコードを書きました。 とりあえず、新規プロジェクトで、フォームに Label1 を配置し、以下の コードを貼り付けて動作確認してみて下さい。 # コードを掲載するときは、面倒でもイベントプロシージャの引数部も # ちゃんと書き込みましょう。 ' 問題の文字列を保管しておくモジュールレベルの配列 Private Odai() As String ' 問題番号を保管しておくモジュールレベル変数 Private iOdaiNum As Integer = 0 Private Sub Form1_Load( _ ByVal sender As Object, _ ByVal e As System.EventArgs _ ) Handles Me.Load ' 問題を準備します ReDim Odai(2) Odai(0) = "oshiete goo" Odai(1) = "visual basic" Odai(2) = "sample string" ' 1 問目の表示 Label1.Text = Odai(iOdaiNum) End Sub Private Sub Form1_KeyPress( _ ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyPressEventArgs _ ) Handles Me.KeyPress ' 大文字・小文字を区別しない場合は、テキスト比較で入力文字の正誤比較を行うか、 ' 大文字・小文字のどちらかに統一してから比較する If StrComp(Mid(Label1.Text, 1, 1), e.KeyChar, CompareMethod.Text) = 0 Then ' 入力文字が正解なら1文字削る Label1.Text = Mid(Label1.Text, 2) Else ' 失敗時の処理 MsgBox("ミス") End If ' 全ての入力が正しければ、次の問題へ If Len(Label1.Text) = 0 Then ' 次の問題表示のため、問題番号を加算します iOdaiNum = iOdaiNum + 1 ' 用意した問題数を超えないようにします If iOdaiNum > UBound(Odai) Then iOdaiNum = 0 End If ' 次の問題をラベルに表示 Label1.Text = Odai(iOdaiNum) End If End Sub
その他の回答 (1)
- KenKen_SP
- ベストアンサー率62% (785/1258)
> "e.KeyChar"の"e"が宣言されていないと出るんです。 > ただ、宣言すればいいだけなのでしょうか? いいえ、違います。 > Private Sub Form1_KeyPress() この部分を Private Sub Form1_KeyPress( _ ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyPressEventArgs _ ) Handles Me.KeyPress に差し替えてみて下さい。
お礼
出来ました!それだけで良かったんですね(汗) 教えていただいたことを参考にし、続きに取り組みたいと思います。 ありがとうございました。
補足
わざわざプログラムを組んでくださってありがとうございます。 タイピングソフトです。 参考にして、再び挑戦してみたのですが、"e.KeyChar"の"e"が 宣言されていないと出るんです。ただ、宣言すればいいだけなので しょうか?