2013-03-27 2 views
0

내 문제는 사용자가 "a, b, c 또는 d"만 입력 할 수 있도록하려는 것입니다. 사용자가 문자를 입력 할 수있는 것보다 네 글자 중 하나를 입력하지 않으면 오류가 발생합니다. 난 숫자 데이터 (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 
+0

바보 같은 질문을하지만, 당신이 사용자가 원하는 경우에만 왜 대신 콤보 상자를 사용하지, A, B, C 또는 D를 선택 텍스트 상자? 그렇다면이 모든 검사를 수행 할 필요가 없습니다 ... –

답변

1

이는 Call allowableChar.AddRange(...)뿐만 아니라 목록에 대문자를 추가 트릭을

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 

을 수행해야합니다. 지금은 메소드가 실행될 때마다 새로운 목록을 생성합니다. 이는 약간 낭비입니다.이 코드를 사용하면 허용되는 chars 목록에 클래스 수준 변수를 지정하고 채울 것을 제안합니다. 양식의 생성자에서 한 번.

는 각 유형의 문자 한 번,이 사용할 수 있도록하려면 :

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 
+0

그게 효과가 있습니다 ... 일반적으로 어떤 코드를 사용할 수 있을지는 몰라도, 1 "a"또는 1을 허용하는 것이 가능하다고 생각합니까? "b"등? – Brandon

+0

물론, 그 코드를 포함하도록 코드를 변경했습니다. 실제로 텍스트 상자 대신 체크 상자를 사용할 수는 있지만 그렇게하고 싶습니다. 글자가 입력되는 순서가 중요하지 않은 한 물론입니다. –