2012-10-21 33 views
5

Im new to visual basic và im không chắc chắn về cách vô hiệu hóa các ký tự chữ cái và ký tự đặc biệt.Tắt chữ cái và chữ cái đặc biệt trong Visual Basic.NET

Tôi chỉ muốn người dùng có thể nhập số.

Im sử dụng mã im này biết có một cách dễ dàng hơn để làm điều đó và tất cả help is appreciated

tôi nhận được hộp thông báo khi tôi nhập vào ký tự chữ và khi tôi số đầu vào. tôi không muốn nhận được hộp tin nhắn khi tôi nhập số.

Private Sub txtCustom_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtCustom.KeyDown 

    If (e.KeyCode = Keys.Enter) Then 

     e.SuppressKeyPress = True 

     If (e.KeyCode = Keys.A Or Keys.B Or Keys.C Or Keys.D Or Keys.E Or Keys.F Or Keys.G Or Keys.H Or Keys.I Or Keys.J Or Keys.K Or Keys.L Or Keys.M Or Keys.N Or Keys.O Or Keys.P Or Keys.Q Or Keys.R Or Keys.S Or Keys.T Or Keys.U Or Keys.V Or Keys.W Or Keys.X Or Keys.Y Or Keys.Z) Then 

      Beep() 
      MsgBox("Please Input A Numerical Value") 
      txtCustom.Text = "" 

     Else 

      RandNumAllow = txtCustom.Text 

     End If 

    End If 

End Sub 
+1

Mã này dường như chỉ làm việc khi bạn gõ phím Enter và trong trường hợp đó các char không thể là một chữ cái. Bạn có chắc đã đăng đúng mã không? – Steve

+1

Không có gì khó chịu hơn là một chương trình trừng phạt người dùng như thế. Nó giống như áp dụng một cú sốc điện nhỏ, người dùng của bạn sẽ nhanh chóng bị chán với nó. Thay vào đó, hãy sử dụng sự kiện Xác thực và, ví dụ: Decimal.TryParse() để kiểm tra đầu vào. Và ErrorProvider cung cấp một dấu hiệu lỗi tinh tế. –

Trả lời

7

Hãy thử sử dụng sự kiện KeyPress thay vì:

Private Sub TextBox1_KeyPress(sender As Object, _ 
           e As KeyPressEventArgs) Handles TextBox1.KeyPress 
    e.Handled = Not Char.IsNumber(e.KeyChar) 
End Sub 

Nhưng điều này sẽ không ngăn người khác sử dụng clipboard. Nó có lẽ tốt hơn để sử dụng điều khiển MaskedTextBox thay thế.

+0

Tôi quyết định sử dụng một hộp văn bản đeo mặt nạ, nhờ sự giúp đỡ, nó không hoàn toàn như thế nào tôi muốn nó nhưng nhờ nó nhanh hơn rất nhiều –

+0

Điều này không chặn (Áo + một số) ký tự đặc biệt. – jcaruso

+0

Điều này cũng sẽ vô hiệu hóa xóa và quay lại không gian làm thế nào chúng có thể được kích hoạt? –

1

Xin lỗi vì trả lời trễ mã này sẽ giải quyết tất cả các vấn đề, sao chép từ clipboard và shift + số cho các ký tự đặc biệt vì nó sử dụng sự kiện TextChanged dùng thử.

Dim charactersAllowed As String = "1234567890" 
     Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged 
    Dim theText As String = TextBox1.Text 
    Dim Letter As String 
    Dim SelectionIndex As Integer = TextBox1.SelectionStart 
    Dim Change As Integer 
    For x As Integer = 0 To TextBox1.Text.Length - 1 
     Letter = TextBox1.Text.Substring(x, 1) 
     If charactersAllowed.Contains(Letter) = False Then 
      SystemSounds.Beep.Play() 
      theText = theText.Replace(Letter, String.Empty) 
      Change = 1 
     End If 
    Next 
    TextBox1.Text = theText 
    TextBox1.Select(SelectionIndex - Change, 0) 
End Sub 

Bạn có thể thay thế các giá trị của charractersAllowed với bất cứ ký tự mà bạn muốn cho phép

Các vấn đề liên quan