Trong phần này mô tả một số kỹ thuật tự động sử dụng các forms. Đặc biệt, nó minh họa cách liệt kê các form và các điều khiển, những kỹ thuật lập trình để giấu và hiện form hoặc những phương pháp để liệt kê form trong một để án khác.
Liệt Kê Form Và Điều Khiển
Tap hop AllForms thuộc đối tượng CurrentProject, chứa một mục cho mỗi form trong một để án. Một ứng dụng có thể liệt kê các đối tượng AccessObjeet trong tập hợp AliForms để tìm tất cả các form trong dé án. Các thuộc tính Name của đối tượng AccessObject và Isioaded là đặc biệt thích hợp: thuộc tính Name miêu tả tên của mỗi form trong một đề dn va thudc tinh IsLoaded chi ra form cé md hay khéng.
Thủ tục dưới đây sử dụng thuộc tính Coun‡ của tập hợp AllForms để xác định có bao nhiêu form nằm trong để án hiện hành. Sau đó in tên và trạng thái nạp của mỗi form trong đề án.
(Tập hợp Al/Forms được sắp xếp chỉ mục bắt đầu từ 0; vì thế, vòng lặp For chạy từ 0 đến một số bé hơn một số là tổng của form trong đề án).
Sub ListAllForms() Dim inti As Integer
‘In số các form trong đề án.
Debug.Print CurrentP roject.AllForms.Count Debug.Print
Liệt kê từng form trong đề án.
For int1 = 0 To CurrentProject.AllForms.Count - 1 Debug.Print CurrentProject.AllForms.Item(int1).Name Debug.Print CurrentProject.AllForms.Item(int1 ).lsLoaded Debug.Print
363
sence
Next int?
End Sub
Tập hợp Forms chứa các form mở trong một dé án và tập hợp các điều khiển của một form. Ứng dụng của bạn có thể sử dụng các tập hợp này để tìm kiếm một form xác định và một điểu khiển riêng biệt trên form đó.
Thủ tục dưới đây liệt kê tất cả các form mở trong một để án, Với mỗi form mở, nó liệt kê các điều khiển theo tên và loại của form đó. Thuộc tính ControlType của đối tugng Control chi ra loai của điều khiển. Bạn có thể sử dụng từ khóa TypeOƒf_ trong trường hợp tương tự.
Sub ListControlsOnOpenForms() Dim frmi As Form, ctl1 As Control Liệt kê tất cả các torm mé.
For Each frm1 In Forms Debug.Print frm1.Name
tiệt kê từng điều khiển trên một form mở chỉ định.
For Each ctl1 In frm4.Controls Debug-Print” AT" *&ctli.Name & _
Hf(ctI1.ControiType = 100, "label", "not label") Next ctlt
Next frm1 End Sub
Lưu ý rằng thủ tục giải mã giá trị của thuộc tính ControlType.
Khi giá trị này là 100, điều khiển là một nhãn. Trong một bài tập giải mã thực hành, bạn thích sử dụng câu lénh Select Case nhiều hơn thay vì sử dụng hàm Immediate If trong vi du trước. Tuy nhiên ham Immediate If lam viéc đầy đủ cho việc giải mã một giá trị.
Chương 5: XÂY DỰNG GIAO DIEN NGUGI DUNG BANG FORM
(bạn có thể sử dung Object Browser để tìm những giá trị của ControlT ype).
Che Giốu Và Hién Form
Bạn có thể sử dụng VBA và tập hợp Ai/Forms cùng với một số những đối tượng khác để tạo các form không thể trông thấy trong cửa sổ Database. Nếu bạn cũng muốn tạo form không thấy được trong ứng dụng của bạn, người sử dụng nghĩ rằng bạn đã gỡ bỏ _ form. Giấu các form có thể vẫn biểu lộ những giá trị để sử dụng cho
những đối tượng khác trong một ứng dụng.
Hai thủ tục dưới đây thực hiện việc giấu và không giấu form cua Access:
Sub HideAForm(frmName As String)
'Đóng form nếu nó mỗ để có thể che dấu.
If CurrentProject.AllForms(frmName).|sLoaded = True Then DoCmd.Close acForm, frmName
End If
'Thiết lập thuộc tính Hidden của form và không trình bày các đối tượng che dấu trong cửa sổ Database.
Application.SetHiddenAttribute acForm, frmName, True Application.SetOption “Show Hidden Objects”, False End Sub
Sub UnhideAForm(frmName As String)
Nếu form bị che dấu, thiết lập thuộc tính che dấu của form !4 False
'để mở form. ;
if Application.GetHiddenAttribute(acForm, frmName) = True Then Application.SetHiddenAttribute acForm, frmName, False DoCmd.OpenForm frmName
365
End If End Sub
Phương pháp SetHiddenAttribute thiết lập hoặc xóa thuộc tính Hidden từ cửa sổ Database cho những đối tượng cơ sở dữ liệu, như các form, report và query. Phương pháp này nhận hai đối số:
Một là đối tượng AccessObject va một là thông số Boolean để xác định đối tượng có bị che dấu hay không. Gọi phương pháp này với một đối tượng và giá trị True giống như việc thiết lập thuộc tính Hidden của đối tượng trong cửa sổ Database.
Thủ tục SetHiddenAttribufe tự nó tô màu xám cho đối tượng;
người dùng vẫn có thể chọn và sử dụng chúng. Để che giấu những đối tượng để người dùng không nhìn thấy, chọn mục Options trong menu Tools, click Hidden Objects rồi click nút OK,
Trước khi thực hiện thủ tục SetHiddenAttribute, bạn nên kiểm tra thuéc tinh IsLoaded của đối tượng AccessObject. Nếu đối tượng đã được nạp, bạn nên đóng nó trước khi thực hiện thủ tục SeiHiddenAttribute, Việc gọi phương pháp này với một đối tượng đang mở sẽ gây ra lỗi.
Liệt Kê Form Trong Dé án Khúc
VBA không hạn chế bạn làm việc với những đối tượng cơ sở dữ liệu trong để án hiện hành. Ví dụ, bạn có thể kiểm tra sự tôn tại của những form trong một trường hợp khác của một ứng dụng Access. Một bước cân thiết trong việc xử lý này là so sánh thuộc tính Name của các thành phần trong AllForms với tên của form đích. Có nhiều kỹ xảo để học: Bạn mở một trường hợp mới của một form Application ciia Access véi co sé dit liệu đích nằm trong do và bạn sử dung để án hiện hành của trường hợp đó như là nguồn cho tập hợp AllForms. Phương pháp tỉnh vi này cho phép bạn xử lý những đối tượng cơ sở dữ liệu trong file cơ sở dữ liệu khác.
@ chuong 5: XAY DUNG GIAO DIEN NGUOI DUNG BANG FORM
Hai thủ tục dưới đây thực hiện điều này bang VBA. Thủ tục FormToLookFor thiết lập đường dẫn cơ sở đữ liệu đến một file cơ sở dữ liệu khác và lấy tên của form đích. Thủ tục thứ hai, FormExistsInDB, tìm kiếm một form đích. Bạn gọi form thứ hai từ
form thứ nhất. ,
Sub FormToLookFor() Dim strDB As String
Dim strFormName As String
'Tìm kiếm cho các form trong cơ sở đữ liệu Northwind.
strDB = "C:\Program Files\Microsoft " & _
*Office\Office\Samples\Northwind.mdb"
'Nhận tên của form để tìm kiếm từ người sử dụng.
strFormName = InputBox("Enter the name of the form to search for: *, _
*Programming Mfcrosoft Access 2000")
'Gọi thủ tục FormExistsinDB để kiểm tra form có lồn tại không.
FormExistsInDB strDB, strFormName End Sub
Sub FormExistsinDB(strDB As String, strFormName As String) Dim appAccess As Access.Application, int As Integer
"Tham chiếu trở lại cho Microsoft Access Application.
Set appAccess = New Access.Application 'Mở một cơ sở dữ liệu trong ứng dụng khác.
appAccess.OpenCurrentDatabase strDB 'Kiểm tra xem form có tồn tại hay không.
For int1 = 0 To (appAccess.CurrentProject.AliForms.Count - 1) If (appAccess.CurrentProject.AllForms. Item(intt).Name =_
strFormName) Then
MsgBox “Form * & strFormName & * exists in the.", _
367
& strDB & " database.", _
vbInformation, “Programming Microsoft Access 2000"
GoTo FormExistsExit End If
Next inti
Đáo cáo rằng form không tổn tại.
MsgBox "Form " & strFormName & " does not exist in the.", _
& strDB & * database."
'Đóng ứng dụng khác của Access.
FormExistsExit:
appAccess.CloseCurrentDatabase Set appAccess = Nothing
End Sub
Thủ tục đầu tiên thiết lập giá trị của bién strDB là đường dẫn của cơ sở dữ liệu Northwind. Nếu bạn có bản sao của cơ sở dữ liệu Northwind ở đâu đó, bạn nên sử dụng đường dẫn này. Hàm lnputBox nhắc nhở người dùng nhập tên của form để tìm kiếm và thủ tục thứ nhất gọi thủ tục thứ hai.
Thủ tục thứ hai thiết lập và mở một tham chiếu cho một trường hợp mới của ứng dụng Access vào vòng lặp để kiểm tra có form nào trong co sé dit liệu mới giống với tên form cần tìm không.
Thủ tục báo cáo có tìm thấy form hay không và giải phóng tài nguyên của nó trước khi chạy trở lại.