Đánh giá chủ đề:
  • 1 Votes - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Hướng dẫn] Hàm kiểm tra các Textbox Null, Highlight textbox và Custom Calendar
#1
Hôm nay rảnh rỗi post lên cái Form Demo có một số thiết kế cơ bản và bẫy lỗi null của Textbox trước khi Lưu như sau:

1. Thông thường trước khi lưu một form nhập liệu nào đó, bạn phải kiểm tra các trường (Field) cần thiết có nhập dữ liệu hay chưa rồi mới cho lưu, để tránh việc sai, lỗi dữ liệu. Demo này sẽ dùng hàm CheckNullEmpty() để check tất cả các Control trên Form mà bạn yêu cầu phải check (Control.Tag = “required”). Nếu Textbox nào Null thì nó sẽ được đánh dấu màu xanh.

2. Thêm một tính năng làm đẹp cũng như hỗ trợ người dùng dễ tập trung khi nhập liệu là Highlight Textbox. Mỗi khi con trỏ trỏ tới textbox nào thì nó sẽ làm nổi bật đường viền của textbox đó màu cam.

3. Tạo lịch chọn ngày tháng, không sử dụng lịch (Date picker) của chương trình Access. Lịch này sẽ có tính năng tùy chọn tháng, năm riêng biệt tiện lợi hơn lịch của hệ thống (mỗi lần di chuyển là 1 tháng). 

Hình minh họa:

[/url][url=https://flic.kr/p/27s7tDn][Hình: 42302325715_dd6f2b4aeb_b.jpg]

[Hình: 35979175766_a91c0dcc2b_b.jpg]

Copy các đoạn code sau vào Module.
- Code cho hàm Highligh Textbox:
Mã PHP:
Option Compare Database
Option Explicit

Public Function SetFocusHandlers(ByRef frm As Form)
   Dim ctl As Control
   On Error 
GoTo 0
   For Each ctl In frm
       If ctl
.Tag "HighlightOnFocus" Then
           ctl
.OnGotFocus "=HandleFocus([" ctl.Name "], True)"
           ctl.OnLostFocus "=HandleFocus([" ctl.Name "], False)"
       End If
   Next
End 
Function


Public Function 
HandleFocus(ByRef ctl As ControlByVal blnFocus As Boolean)

   If blnFocus True Then
       
'ctl.BackColor = RGB(200, 237, 248) 'RGB(222239229)
       ctl.BorderColor RGB(&HF9, &HCB, &H8E)
       ctl.BorderWidth 2
   Else
       
'ctl.BackColor = RGB(255, 255, 255)
       ctl.BorderColor = RGB(&H98, &HBD, &HE0)
       ctl.BorderWidth = 1
   End If

End Function 

- Code kiểm tra các textbox có Null hoặc Empty hay không. Muốn textbox nào cần kiểm tra, bạn vào Property của textbox đó, mục Other -> kiếm menu Tag (ở cuối cùng) và thêm đoạn text "required".

[Hình: 36021077615_1c56014800_z.jpg]

Mã PHP:
Option Compare Database
Option Explicit

Public str As String
Public colCtlName As New Collection

Function IsNullOrEmpty(tbx As Control) As Boolean
   If IsNull
(tbx.Value) Or _
      Len
(Nz(tbxvbNullString)) = Or _
      Len
(Nz(tbx vbNullString)) = 0 Then
       IsNullOrEmpty 
True
   Else
       IsNullOrEmpty 
False
   End 
If
End Function

Function 
CheckNullEmpty(frm As Form) As Boolean
   Dim ctl 
As Control
   str 
= Empty

   For Each ctl In frm.Controls
       If ctl
.ControlType acTextBox Or ctl.ControlType acComboBox Or ctl.ControlType acCheckBox Then
           If Right
(ctl.Tag8) = "required" Then
               If IsNullOrEmpty
(ctlThen
                   
'Debug.Print IsNullOrEmpty(ctl) & " - " & ctl.Name'
                   colCtlName.Add ctl.Name  'De setFocus vao control dau tien trong danh sách collection'
                   ctl.BackColor RGB(255255153)
                   str str "- " ctl.Controls(0) vbNewLine
               End 
If
           End If
       End If
   Next

   If Len
(str) = 0 Then
       CheckNullEmpty 
False
   Else
       CheckNullEmpty 
True
   End 
If

End Function

Function 
ClearControlFormatting(ctl As Control)
   ctl.BackColor vbWhite
End 
Function 

- Khi chạy phần Calendar tự tạo, tránh việc cái lịch mặc định của Access cùng hiển thị đè lên cái icon lịch của bạn khi bạn để con trỏ vào Textbox có định dạng DateTime, bạn phải chạy 1 cái thủ tục để vô hiệu hóa cái lịch mặc định của Access. Cái Sub DisableDatePicker () này tôi lấy trên mạng của Daniel Pineault.
Bạn chỉ cần chạy hàm này 1 lần (ở cửa số Immediate) khi khởi động ứng dụng là được rồi.

[Hình: 36004508596_6fc04d90c3_z.jpg] 


File làm trên Access 2010.
Link file demo: http://www.mediafire.com/file/htm252v7af...tbox.accdb
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn cpucloi , tranthanhan1962 , DooHoaangPhuuc , huuduy.duy , Che_Guevara
#2
Bổ sung điểm khiếm khuyết bài trên.
Khi hàm CheckNullEmpty() chạy thì nó chỉ đánh dấu đổi màu nền Control (textbox) nào không có dữ liệu (Null hoặc Empty) nhưng không tự động chuyển con trỏ đến control đầu tiên bị Null (SetFocus) như các cách làm thủ công từng textbox.
- Để biết Control nào là control đầu tiên bị Null để sau đó SetFocus thì tôi chỉ mới nghĩ ra cách dùng Collection thôi (nó tiện hơn dùng Array trong trường hợp này).
- Khi vòng lập For…Next phát hiện control (ctl) đầu tiên Null, nó sẽ Add ctl.Name vào Collection (biến colCtlName) và cứ tuần hết vòng lặp. Vậy cái Collection này sẽ chứa tất cả ctl.Name bị Null (Tôi chưa biết cách chỉ Add mỗi cái ctl.Name đầu tiên thôi rồi thoát ra). Lưu cái Collection này vào biến toàn cục sau đó chỉ cần sử dụng cái phần tử (element) đầu tiên của Collection thôi - colCtlName(1).
- Sau đó ở sự kiện bấm nút [Lưu] sẽ chạy hàm kiểm tra nếu phát hiện textbox Null (CheckNullEmpty = True) thì sẽ lấy phần từ đầu tiên trong Collection để SetFocus.

Mã PHP:
Controls(colCtlName(1)).SetFocus

Set colCtlName 
Nothing
Exit Sub 

- Mình dùng Set colCtlName = Nothing để xóa nội dung biến để Collection có thể bắt đầu thêm các phần từ ctl.Name vào lại vị trí đầu tiên khi bạn bấm nút Lưu lần 2, 3... Cách này nhanh hơn thay vì dùng đúng bài là Collection.Remove (i).  007

Đã cập nhật lại file .accdb.
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn huuduy.duy , thanhtruong , tvn_hut
#3
Cái này mình học được 1 cái rồi
Khi con trỏ đến đâu thì viền màu vàng sẽ chạy theo đó,
Còn 2 cái kia mình sẽ ngâm cứu tiếp, hay ghê thật, cảm ơn Anh đã chia sẻ.
Chữ ký của thanhtruong Xin chào, mình là thanhtruong, Tham gia http://thuthuataccess.com/forum từ ngày 23-06 -14.
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Chức năng calendar cannguyen 2 208 28-09-18, 09:43 AM
Bài mới nhất: cannguyen
  Tìm kiếm Record ngay khi gõ trong Combobox - Class ongke0711 9 651 25-09-18, 12:00 PM
Bài mới nhất: ledangvan
  [Help] Form tìm kiếm lớn hơn nhỏ hơn NguyenDungAnh 17 842 24-08-18, 08:31 PM
Bài mới nhất: NguyenDungAnh
Lightbulb Hướng Dẫn Tạo form tìm kiếm theo nhiều tiêu chí khác nhau khanhduycsgt 19 13,419 11-08-18, 07:46 PM
Bài mới nhất: NguyenDungAnh
  [Help] Highlight current record with continousform mrsiro 10 524 11-08-18, 12:09 PM
Bài mới nhất: mrsiro

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ| PMA Nha Trang| Gỗ Acrylic Không Đường Line