tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルテキストデータの誤字判定
記事No3950
投稿日: 2006/07/10(Mon) 11:43
投稿者大火
用意しておいたテキストデータをtextbox2に表示させ、textbox1にtextbox2と同じ文章を時間内にど
れだけ打てるか。みたいなことをしたいんですが、textbox1にtextbox2と違う文字が打たれてたら、
それを誤字と判定し、カウントしたいんですが、自分で作ったプログラムでは動きませんでした。
    Dim bFlag As Boolean
        Dim cflag As Integer
        Dim n As Integer
        bFlag = False
        If TextBox2.TextLength >= TextBox1.TextLength Then
            For n = 0 To TextBox2.Text.Length - 1
                If TextBox2.Text.Chars(n) <> TextBox1.Text.Chars(n) Then
                    bFlag = True
                    cflag = cflag + 1
                    Exit For
                End If
            Next
            If bFlag Then
                Label1.Text = (n.ToString & "文字目が違います")
            End If
        End If
こういう感じのプログラムを作りました。よければご指導お願いします。

[ツリー表示へ]
タイトルRe: テキストデータの誤字判定
記事No3952
投稿日: 2006/07/10(Mon) 13:32
投稿者なおこ(・∀・)
お世話になります。

> textbox1にtextbox2と違う文字が打たれてたら、
> それを誤字と判定し、カウントしたいんですが、
いつ、判定処理が走るのかが書かれていないのですが、
とりあえず、TextBox2 の Leave 時 で判定すると仮定するとこんな感じでしょうか。
Public Class Form1
  Private m_errorCount As Integer

  Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles
Me.Load
    Me.TextBox1.ReadOnly = True
    Me.TextBox1.Text = DateTime.Now.ToString("yyMMddHHmmss") ' 最初の問題
    Me.TextBox2.Text = ""
    Me.Label1.Text = ""
    Me.Label2.Text = ""
    Me.m_errorCount = 0
  End Sub

  Private Sub TextBox2_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles
TextBox2.Leave
    Dim txt As String = Me.TextBox2.Text

    If Me.TextBox1.Text <> txt Then
      ' エラーのカウントアップ
      Me.m_errorCount += 1
      Me.Label2.Text = "エラー数:" + Me.m_errorCount.ToString() + "回"

      If txt = "" Then
        Me.Label1.Text += Environment.NewLine + _
                  "入力されていません"
      Else
        Dim masterChars As Char() = Me.TextBox1.Text.ToCharArray()
        Dim chars As Char() = txt.ToCharArray()
        If masterChars.Length <> chars.Length Then
          Me.Label1.Text += Environment.NewLine + _
                    "文字の長さが一致していません"
        Else
          For i As Integer = 0 To chars.Length - 1
            If masterChars(i) <> chars(i) Then
              Me.Label1.Text += Environment.NewLine + _
                        "位置:" + (i + 1).ToString() + "の誤り"
              Exit For
            End If
          Next
        End If
      End If
    End If

    ' 次の問題
    Me.TextBox1.Text = DateTime.Now.ToString("yyMMddHHmmss")
    Me.TextBox2.Text = ""
  End Sub
End Class

> 時間内に
というのは、実装していません。 Timer コントロールを使ってやればできると思います。
[タイマにより一定時間間隔で処理を行うには?(Windowsタイマ編) − @IT]
http://www.atmarkit.co.jp/fdotnet/dotnettips/372formstimer/formstimer.html

[ツリー表示へ]