Trang 1 trên 1

[VB.NET] Chỉ cho nhập số trong Textbox

Đã gửi: T.Ba 09/02/2010 10:34 pm
gửi bởi PhapSuXeko
Thủ thuật: Chỉ cho nhập số vào Textbox
Tác giả: PhapSuXeko
Mô tả: quá rõ rồi


Sau đây là code em mới nghiên cứu và thử nghiệm thành công, nếu anh em nào có code hay hơn thì cho em học hỏi
  1. 'bỏ code trong sự kiện KeyPress
  2. Try
  3. If e.KeyChar = Chr(8) Then Exit Sub 'cho phép phím BackSpace hoạt động
  4. Dim s As String = e.KeyChar
  5. Dim f As Short = s / 1 'tạo lỗi
  6. Catch ex As Exception
  7. e.KeyChar = ""
  8. End Try
  9.  

Re: [VB.NET] Chỉ cho nhập số trong Textbox

Đã gửi: T.Tư 10/02/2010 12:07 am
gửi bởi Superman
cho nhập số với phím backspace
  1.         Function TrapKey(ByVal KCode As String) As Boolean
  2.             If (KCode >= 48 And KCode <= 57) Or KCode = 8 Then
  3.                 TrapKey = False
  4.             Else
  5.                 TrapKey = True
  6.             End If
  7.         End Function

để sử dụng quăng vô sự kiện KeyPress của textbox cần kiểm tra là xong :D
  1.     Private Sub txSoLuong_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txSoLuong.KeyPress
  2.         e.Handled = TrapKey(Asc(e.KeyChar)
  3.     End Sub

Re: [VB.NET] Chỉ cho nhập số trong Textbox

Đã gửi: T.Tư 10/02/2010 8:29 am
gửi bởi PhapSuXeko
Superman đã viết:cho nhập số với phím backspace
  1.         Function TrapKey(ByVal KCode As String) As Boolean
  2.             If (KCode >= 48 And KCode <= 57) Or KCode = 8 Then
  3.                 TrapKey = False
  4.             Else
  5.                 TrapKey = True
  6.             End If
  7.         End Function



Phải vầy chớ

  1.         Function TrapKey(ByVal KCode As Integer) As Boolean
  2.             If (KCode >= 48 And KCode <= 57) Or KCode = 8 Then
  3.                 TrapKey = False
  4.             Else
  5.                 TrapKey = True
  6.             End If
  7.         End Function

Re: [VB.NET] Chỉ cho nhập số trong Textbox

Đã gửi: T.Tư 10/02/2010 8:51 am
gửi bởi xuanquy_th
  1. Private Sub txSoLuong_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txSoLuong.KeyPress
  2. Dim mK As Integer = Asc(e.KeyChar)
  3.         e.Handled = Not (( mK >= 48 And mK <= 57) Or mK = 8 Or mK = 46)
  4.     End Sub

Re: [VB.NET] Chỉ cho nhập số trong Textbox

Đã gửi: T.Năm 22/09/2011 8:41 am
gửi bởi KIDLINUX
Đây là code của mình
  1. Try
  2.             txtTien.Text = Convert.ToDecimal(txtTien.Text)
  3.             txtTien.SelectionStart = Len(txtTien.Text)
  4.         Catch
  5.             MsgBox("Dữ liệu không hợp lệ!!!", MsgBoxStyle.Information, "Thông báo...")
  6.             txtTien.SelectionStart = Len(txtTien.Text) - 1
  7.             txtTien.SelectionLength = 1
  8.         End Try


Mình sử dụng hàm có sẵn của VB.NET, nếu chuỗi không thể chuyển sang số thì báo lỗi

Re: [VB.NET] Chỉ cho nhập số trong Textbox

Đã gửi: CN 13/11/2011 7:17 pm
gửi bởi the_jupiter2
Dùng sự kiện nhấn phím:
  1. Private Sub TextBox3_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox3.KeyPress
  2.         If Not (Char.IsDigit(e.KeyChar) Orelse Char.IsControl(e.KeyChar)) Then Beep() : e.Handled = True ' nếu phím nhấn không phải là số hoặc phím     'control (nhấn "Backspace" để xóa số) -> thì beep cảnh báo và hủy sự kiện (không có phím được nhấn)
  3. End Sub
  4.  

Re: [VB.NET] Chỉ cho nhập số trong Textbox

Đã gửi: T.Năm 01/12/2011 2:20 pm
gửi bởi kysudat
Thanks,

Re: [VB.NET] Chỉ cho nhập số trong Textbox

Đã gửi: T.Ba 11/09/2012 1:21 am
gửi bởi phuocru91
Bạn nào có thể giúp mình hàm nhập vào textbox tối đa 5 kí tự kiểu string.
Mình xin cảm ơn!

Re: [VB.NET] Chỉ cho nhập số trong Textbox

Đã gửi: T.Ba 11/09/2012 11:07 am
gửi bởi akira
phuocru91 đã viết:Bạn nào có thể giúp mình hàm nhập vào textbox tối đa 5 kí tự kiểu string.
Mình xin cảm ơn!

set thuộc tính length của textbox là 5 thì đc rồi :-B

Re: [VB.NET] Chỉ cho nhập số trong Textbox

Đã gửi: T.Hai 12/11/2012 2:07 pm
gửi bởi QUANITGROBEST
đây là cách tớ dùng, ngắn gọn chính xác tuyệt đối:
  1.  Private Sub txtNumber_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtNumber.KeyPress
  2.         If Not (IsNumeric(e.KeyChar)) Then
  3.             e.Handled = True
  4.         End If
  5.  

Re: [VB.NET] Chỉ cho nhập số trong Textbox

Đã gửi: T.Sáu 16/11/2012 9:47 am
gửi bởi Romeo8x
Nếu chỉ nhập số nguyên (không có thập phân) thì có thể dùng MaskedTextbox có sẵn trong vb.net. MaskedTextbox khá hữu tiện lợi vì nó không chỉ giới hạn số không.
sau khi Insert bạn set thuộc tính Mask cho nó là xong

Re: [VB.NET] Chỉ cho nhập số trong Textbox

Đã gửi: T.Tư 08/05/2013 3:38 pm
gửi bởi thedevil211992
mình đang cần mà tìm mãi mới ra, thanks các pro nhé

Re: [VB.NET] Chỉ cho nhập số trong Textbox

Đã gửi: T.Tư 08/05/2013 10:57 pm
gửi bởi bocapit
QUANITGROBEST đã viết:đây là cách tớ dùng, ngắn gọn chính xác tuyệt đối:
  1.  Private Sub txtNumber_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtNumber.KeyPress
  2.         If Not (IsNumeric(e.KeyChar)) Then
  3.             e.Handled = True
  4.         End If
  5.  


Thế copy vào thì sao?

Re: [VB.NET] Chỉ cho nhập số trong Textbox

Đã gửi: T.Ba 14/05/2013 8:41 am
gửi bởi QUANITGROBEST
oh...mình chưa thử t/h copy. nếu copy ok thì cách này ko ổn nhỉ

Re: [VB.NET] Chỉ cho nhập số trong Textbox

Đã gửi: T.Tư 22/05/2013 4:53 pm
gửi bởi thuanchinapro07
Tất cả các trường hợp trên đều chết với copy pase (dùng chuột)
event "KeyPress" được run khi bạn thao tác với bàn phím. Với chuột thì chết !
p/s: có thể dùng " Regular-Expressions" - Biểu thức quy tắc để xử lý cùng or độc lập

Re: [VB.NET] Chỉ cho nhập số trong Textbox

Đã gửi: T.Tư 01/01/2014 4:18 pm
gửi bởi phantronghiep07
Mình dùng Visual Studio 2010, tìm không thấy thằng e.Handled, mình tìm ra cách này, có thể có ích cho một số bạn:
  1. Private Sub Txt_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Txt.TextChanged
  2.         Dim s As String, i As Integer, vtri As Integer
  3.  
  4.         If Txt.Text = "" Then Exit Sub
  5.  
  6.         s = Txt.Text
  7.         If Len(s) = 1 And IsNumeric(s) = False Then
  8.             Txt.Text = ""
  9.             Exit Sub
  10.         End If
  11.  
  12.         vtri = Txt.SelectionStart
  13.         For i = 1 To Len(s)
  14.             If IsNumeric((Mid(s, i, 1))) = False Then
  15.                 Txt.Text = Mid(s, 1, i - 1) & Mid(s, i + 1, Len(s) - i)
  16.                 Txt.SelectionStart = vtri - 1
  17.                 Exit Sub
  18.             End If
  19.         Next i
  20.     End Sub