2013-03-27 215 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,爲什麼不使用組合框代替文本框?那麼你將不必做所有這些檢查... – 2013-03-27 01:06:42

回答

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(...)增加了大寫字母的名單。就像現在一樣,這會在每次執行方法時生成一個新列表,這有點浪費......如果你使用這段代碼,我建議你將可允許的字符列表作爲一個類級變量並僅填充它一次在你的表單的構造函數中。

要只允許一次每種類型的字符,使用此:

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 2013-03-27 01:21:42

+0

當然,我更改了代碼以包含該代碼,但如果您確實想要這樣做,則可以使用一組複選框而不是文本框。除非輸入字母的順序很重要。 – 2013-03-27 01:26:10