Một vài kỹ thuật cơ bản xử lý TextBox

Liên hệ QC

lethanhnhan

Thành viên chính thức
Tham gia
27/5/07
Bài viết
76
Được thích
249
Chào các bạn,
Tôi nghĩ trên diễn dàn có một vài bài nói về kỹ thuật xử lý dữ liệu nhập vào TextBox. Tôi xin giới thiệu và tổng hợp một số kỹ thuật.

TextBox để làm gì?
Với bản thân tên của Control thì bạn cũng có thể dễ dàng hiểu control này dùng để làm gì. Control này dùng để nhận dữ liệu từ người dùng.
Thuộc tính (Property) mặc định của TextBoxValue
Sự kiện (Even) mặc định của TextBoxChange
Khi dùng TextBox, chúng ta có thể làm cho nó linh động hơn bởi các thuộc tính sau:
Text, MultiLine, WordWrap, AutoSize
_Text: chứa đựng chuổi ký tự được thể hiện trong TextBox.
_MultiLine: TextBox có thể thể hiện nhiều hàng nội dung. Nếu thuộc tính này là False thì chúng ta không thể thể hiện nội dung trên nhiều dòng được.
_WordWrap: tự động xuống hàng nếu nội dung của TextBox dài hơn độ rộng của TextBox.
_AutoSize: Nếu thuộc tính MultiLine là True thì chúng ta mới có thể dùng thuộc tính này.


Các bạn có thể tự tham khảo và thực tập nhiều hơn về các thuộc tính này.
Tôi chỉ xin đưa ra vài ví dụ.
_Dựa vào sự kiện KeyPress để không cho người dùng nhập chữ số:
Mã:
[B][FONT=&quot]Private[/FONT][/B][FONT=&quot] [B]Sub[/B] txtDataEntry_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)[/FONT]
  [FONT=&quot]        Select Case KeyAscii[/FONT]
  [FONT=&quot]        Case Asc("0") To Asc("9")[/FONT]
  [FONT=&quot]            'Chang lam gi ca/Do nothing[/FONT]
  [FONT=&quot]        Case Else[/FONT]
  [FONT=&quot]            KeyAscii = 0[/FONT]
  [FONT=&quot]        End Select[/FONT]
  [B][FONT=&quot]End Sub[/FONT][/B]
_Bạn chú ý trong trường hợp người dùng nhập vào dấu "." hay dấu "-" thì sao:
các bạn có thể thêm một vài đọan code vào như sau:
Mã:
[B][FONT=&quot]Select Case KeyAscii[/FONT][/B]
  [B][FONT=&quot]    Case Asc("0") To Asc("9")[/FONT][/B]
  [B][FONT=&quot]        'Chang lam gi ca[/FONT][/B]
  [B][FONT=&quot]    Case Asc("-")[/FONT][/B]
  [B][FONT=&quot]        If InStr(1, Me.txtSoLuong.Text, "-") > 0 Or Me.txtSoLuong.SelStart > 0 Then[/FONT][/B]
  [B][FONT=&quot]            'Neu dau tru khong nam o dau chuoi thi khong nhap[/FONT][/B]
  [B][FONT=&quot]            KeyAscii = 0[/FONT][/B]
  [B][FONT=&quot]        End If[/FONT][/B]
  [B][FONT=&quot]    Case Asc(".")[/FONT][/B]
  [B][FONT=&quot]        If InStr(1, Me.txtSoLuong.Text, ".") > 0 Then[/FONT][/B]
  [B][FONT=&quot]            'Neu co dau cham thu hai thi khong nhap[/FONT][/B]
  [B][FONT=&quot]            KeyAscii = 0[/FONT][/B]
  [B][FONT=&quot]        End If[/FONT][/B]
  [B][FONT=&quot]    Case Else[/FONT][/B]
  [B][FONT=&quot]        'Cac ky tu khac thi khong cho phep nhap[/FONT][/B]
  [B][FONT=&quot]        KeyAscii = 0[/FONT][/B]
  [B][FONT=&quot]    End Select[/FONT][/B]
_Bây giờ bạn lại muốn chỉ cho người dùng nhập vào tối đa 10 chữ số thì sao? (tôi không đếm ".", "-")
Bạn thêm đọan code này vào đầu:
Mã:
[B][FONT=&quot]If Len() < 10 Then[/FONT][/B]
  [B][FONT=&quot]‘Bạn đặt đọan code ở trên vào đây[/FONT][/B]
  [B][FONT=&quot]Else[/FONT][/B]
  [B][FONT=&quot]   KeyAscii = 0[/FONT][/B]
  [B][FONT=&quot]End If[/FONT][/B]

_Bây giờ bạn lại múôn người dùng nhập ngày vào TextBox.
Các bạn hãy đưa ra giải pháp. Tôi xin cung cấp cho các bạn hàm tính tổng số ngày của một tháng
Mã:
 [B][FONT=&quot]Function DaysInMonth(ByVal serial_number As Date) As Integer[/FONT][/B]
  [B][FONT=&quot]'   Tra ve tong so ngay trong mot thang[/FONT][/B]
  [B][FONT=&quot]    Dim m As Integer, y As Integer[/FONT][/B]
  [B][FONT=&quot]    m = Month(serial_number)[/FONT][/B]
  [B][FONT=&quot]    y = Year(serial_number)[/FONT][/B]
  [B][FONT=&quot]    If m = 12 Then[/FONT][/B]
  [B][FONT=&quot]        m = 1[/FONT][/B]
  [B][FONT=&quot]        y = y + 1[/FONT][/B]
  [B][FONT=&quot]    Else[/FONT][/B]
  [B][FONT=&quot]        m = m + 1[/FONT][/B]
  [B][FONT=&quot]    End If[/FONT][/B]
  [B][FONT=&quot]    DaysInMonth = Day(DateSerial(y, m, 1) - 1)[/FONT][/B]
  [B][FONT=&quot]End Function[/FONT][/B]
_Các bạn lại muốn mỗi lần nhập vào....

Vâng, các bạn hãy cùng nhau chia sẻ các đọan code của mình.

Lê Thanh Nhân
 
Cảm ơn nhiều, đúng là RainBow cho cảm hứng làm việc. Mong có được nhiều bài viết về mấy vần đề nho nhỏ này nhưng ứng dụng lại rất lớn.

Thân!
 
Cám ơn nhe! một bài viết đơn gian nhưng rất hay......! tích cực phát huy nhé bạn
 
hi,
Mã:
Private Sub txt_Month_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 13 Then
    KeyAscii = 0
    SendKeys "{TAB}"
    cmdOK_Click
End If
End Sub
sao cái này nó hôg chịu hành động click nút OK, chỉ nhảy TAB tới thôi àh,
 
Web KT
Back
Top Bottom