0

私の問題は、ユーザーが「a、b、c、またはd」しか入力できないようにしようとしていることです。ユーザーがこれらの文字を入力することしかできないのではなく、それらの4つの文字のいずれかを入力しなかった場合は、エラーを発生させたいと思います。私は(try catchを使用して)数値データでこれに似た何かをするリソースを見つけることができるだけでした。どんなサイトやヒントも素晴らしいでしょう。

                If String.Compare(TextBox2.Text, "a", True) = 0 AndAlso String.Compare(TextBox21.Text, "a", True) = 0 Then
                'MessageBox.Show("A")
                totCorrect = totCorrect + corAns
            ElseIf String.Compare(TextBox2.Text, "b", True) = 0 AndAlso String.Compare(TextBox21.Text, "b", True) = 0 Then
                'MessageBox.Show("B")
                totCorrect = totCorrect + corAns
            ElseIf String.Compare(TextBox2.Text, "c", True) = 0 AndAlso String.Compare(TextBox21.Text, "c", True) = 0 Then
                'MessageBox.Show("C")
                totCorrect = totCorrect + corAns
            ElseIf String.Compare(TextBox2.Text, "d", True) = 0 AndAlso String.Compare(TextBox21.Text, "d", True) = 0 Then
                'MessageBox.Show("D")
                totCorrect = totCorrect + corAns
            Else
                totWrong = totWrong + wrgAns
                Label13.Visible = True
            End If
4

1 に答える 1

1

これはトリックを行う必要があります

Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress

    Dim allowableChar As New List(Of Char) From {"a"c, "b"c, "c"c, "d"c}

    Call allowableChar.AddRange(allowableChar.Select(Function(c) Convert.ToChar(c.ToString().ToUpper())).ToList())

    If Not (allowableChar.Contains(e.KeyChar) OrElse e.KeyChar = Convert.ToChar(Keys.Delete) OrElse e.KeyChar = Convert.ToChar(Keys.Back)) Then
        e.Handled = True
    End If

End Sub

Call allowableChar.AddRange(...)、大文字もリストに追加します。現在のように、これはメソッドが実行されるたびに新しいリストを生成しますが、これは少し無駄です...このコードを使用する場合は、許容される文字のリストをクラスレベルの変数にして、それだけを入力することをお勧めしますフォームのコンストラクターに1回。

各タイプの文字を1回だけ許可するには、次を使用します。

Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress

    Dim allowableChar As New List(Of Char) From {"a"c, "b"c, "c"c, "d"c}

    Call allowableChar.AddRange(allowableChar.Select(Function(c) Convert.ToChar(c.ToString().ToUpper())).ToList())

    If Not (allowableChar.Contains(e.KeyChar) OrElse e.KeyChar = Convert.ToChar(Keys.Delete) OrElse e.KeyChar = Convert.ToChar(Keys.Back)) Then
        e.Handled = True
    Else
        If Me.TextBox1.Text.Count(Function(c) c = e.KeyChar) >= 1 Then
            e.Handled = True
        End If
    End If

End Sub
于 2013-03-27T01:12:08.297 に答える