Một hành động đơn lẻ, chẳng hạn như di chuyển từ một điều khiển trên một đối tượng đến một điều khiển khác, có thể kích hoạt một số sự kiện khác nhau xảy ra theo một trình tự cụ thể. Việc biết rõ thời điểm và trình tự xảy ra sự kiện là rất quan trọng vì điều đó có thể ảnh hưởng đến cách thức và thời điểm macro của bạn hoặc quy trình sự kiện hoạt động. Ví dụ: nếu có hai quy trình sự kiện chạy theo một trình tự nhất định, bạn muốn đảm bảo rằng các sự kiện liên kết sẽ xảy ra theo cùng một trình tự đó.
Trong bài viết này
Trình tự của sự kiện đối với các điều khiển trên biểu mẫu
Sự kiện xảy ra đối với các điều khiển trên biểu mẫu khi bạn di chuyển tiêu điểm tới điều khiển và khi bạn thay đổi, cũng như cập nhật dữ liệu trong điều khiển.
Lưu ý: Microsoft Office Access hiển thị tên sự kiện trong Trình soạn thảo Visual Basic hơi khác so với trong trang thuộc tính và Bộ dựng Macro. Ví dụ: sự kiện có tên là On Got Focus trong trang thuộc tính của biểu mẫu và trong Bộ dựng Macro có tên là GotFocus trong Trình soạn thảo Visual Basic. Các ví dụ trong bài viết này sử dụng định dạng Visual Basic for Applications (VBA) cho tên sự kiện.
Di chuyển tiêu điểm đến một điều khiển
Khi bạn di chuyển tiêu điểm đến một điều khiển trên biểu mẫu (ví dụ: bằng cách mở biểu mẫu có chứa một hoặc nhiều điều khiển hiện hoạt hoặc bằng cách di chuyển tiêu điểm đến một điều khiển khác trên cùng một biểu mẫu), các sự kiện Enter và GotFocus diễn ra theo trình tự này:
Nhập GotFocus
Khi bạn mở một biểu mẫu, các sự kiện Enter và GotFocus sẽ xảy ra sau các sự kiện liên kết với việc mở biểu mẫu (chẳng hạn như Open, Activate và Current), như sau:
Open (biểu mẫu) Activate (biểu mẫu) Current (biểu mẫu) Enter (điều khiển) GotFocus (điều khiển)
Khi tiêu điểm rời khỏi một điều khiển trên biểu mẫu (ví dụ: khi bạn đóng biểu mẫu có chứa một hoặc nhiều điều khiển hiện hoạt hoặc khi bạn di chuyển đến một điều khiển khác trên cùng một biểu mẫu), các sự kiện Exit và LostFocus diễn ra theo trình tự này:
Thoát khỏi LostFocus
Khi bạn đóng một biểu mẫu, các sự kiện Exit và LostFocus sẽ xảy ra trước các sự kiện liên kết với việc đóng biểu mẫu (chẳng hạn như Unload, Deactivate và Close), như sau:
Exit (điều khiển) LostFocus (điều khiển) Unload (biểu mẫu) deactivate (biểu mẫu) Close (biểu mẫu)
Thay đổi và cập nhật dữ liệu trong điều khiển
Khi bạn nhập hoặc thay đổi dữ liệu trong điều khiển trên biểu mẫu, rồi di chuyển tiêu điểm đến một điều khiển khác, sự kiện BeforeUpdate và AfterUpdate sẽ xảy ra:
BeforeUpdate Afte rUpdate
Các sự kiện Exit và LostFocus cho một điều khiển có giá trị thay đổi xảy ra sau sự kiện BeforeUpdate và AfterUpdate:
BeforeUpdate AfterUpdate Exit LostFocus
Khi bạn thay đổi văn bản trong hộp văn bản hoặc trong phần hộp văn bản của hộp tổ hợp, sự kiện Change sẽ xảy ra. Sự kiện này xảy ra mỗi khi nội dung của điều khiển thay đổi nhưng trước khi bạn di chuyển tiêu điểm đến một điều khiển hoặc bản ghi khác (và do đó, trước khi các sự kiện BeforeUpdate và AfterUpdate xảy ra). Chuỗi sự kiện sau đây sẽ xảy ra đối với từng khóa được bạn nhấn trong hộp văn bản hoặc trong phần hộp văn bản của hộp tổ hợp là như sau:
KeyDown KeyPress Dirty change KeyUp
Sự kiện NotInList sẽ xảy ra sau khi bạn nhập giá trị vào hộp tổ hợp không tìm thấy trong danh sách hộp tổ hợp, rồi cố gắng di chuyển tiêu điểm đến điều khiển hoặc bản ghi khác. Sự kiện NotInList xảy ra sau các sự kiện của bàn phím và sự kiện Change cho hộp tổ hợp nhưng trước các sự kiện cho mọi điều khiển hoặc biểu mẫu khác. Nếu thuộc tính LimitToList của hộp tổ hợp được đặt thành Có thì sự kiện Error cho biểu mẫu sẽ xảy ra ngay lập tức sau sự kiện NotInList:
KeyDown KeyPress Dirty change KeyUp NotInList 0 Error
Trình tự của sự kiện cho các bản ghi trên biểu mẫu
Sự kiện xảy ra đối với các bản ghi trên biểu mẫu khi bạn di chuyển tiêu điểm vào bản ghi khác, cập nhật dữ liệu trong một bản ghi, xóa bản ghi hoặc các bản ghi hiện có hay tạo một bản ghi mới.
Di chuyển tiêu điểm đến bản ghi và cập nhật dữ liệu trong bản ghi
Khi bạn di chuyển tiêu điểm đến một bản ghi hiện có trên biểu mẫu, nhập hoặc thay đổi dữ liệu trong bản ghi, rồi di chuyển tiêu điểm đến một bản ghi khác, chuỗi sự kiện sau đây sẽ xảy ra đối với biểu mẫu:
Current (biểu mẫu) BeforeUpdate (biểu mẫu) AfterUpdate (biểu mẫu) Current (biểu mẫu)
Khi bạn rời khỏi bản ghi đã thay đổi dữ liệu nhưng trước khi bạn nhập bản ghi kế tiếp, các sự kiện Exit và LostFocus xảy ra đối với điều khiển có tiêu điểm. Những sự kiện này xảy ra sau các sự kiện BeforeUpdate và AfterUpdate đối với biểu mẫu, như sau:
BeforeUpdate (biểu mẫu) AfterUpdate (biểu mẫu) Exit (điều khiển) LostFocus (điều khiển) Current (biểu mẫu)
Khi bạn di chuyển tiêu điểm giữa các điều khiển trên biểu mẫu, các sự kiện sẽ xảy ra đối với từng điều khiển. Ví dụ: chuỗi sự kiện sau đây sẽ xảy ra khi bạn thao tác như sau:
-
Mở biểu mẫu và thay đổi dữ liệu trong điều khiển:
Current (biểu mẫu) Enter (điều khiển) GotFocus (điều khiển) BeforeUpdate (điều khiển) AfterUpdate (điều khiển)
-
Di chuyển tiêu điểm đến điều khiển khác:
Exit (điều khiển 1) LostFocus (điều khiển 1) Enter (điều khiển 2) GotFocus (điều khiển 2)
-
Di chuyển tiêu điểm đến bản ghi khác:
BeforeUpdate (biểu mẫu) AfterUpdate (biểu mẫu) Exit (điều khiển 2) LostFocus (điều khiển 2) Current (biểu mẫu)
Xóa bản ghi
Khi bạn xóa bản ghi, các sự kiện sau đây sẽ xảy ra đối với biểu mẫu và Microsoft Office Access sẽ hiển thị hộp thoại yêu cầu bạn xác nhận xóa:
Xóa BeforeDelConfirm AfterDelConfirm
Nếu bạn hủy bỏ sự kiện Delete, các sự kiện BeforeDelConfirm và AfterDelConfirm sẽ xảy ra và hộp thoại sẽ không hiển thị.
Tạo bản ghi mới
Khi bạn di chuyển tiêu điểm đến một bản ghi (trống) mới trên biểu mẫu, rồi tạo một bản ghi mới bằng cách nhập dữ liệu vào điều khiển, chuỗi sự kiện sau đây sẽ xảy ra:
Current (biểu mẫu) Enter (điều khiển) GotFocus (điều khiển) BeforeInsert (biểu mẫu) AfterInsert (biểu mẫu)
Sự kiện BeforeInsert (biểu mẫu) sẽ kích hoạt ngay khi bạn bắt đầu nhập vào điều khiển. Sự kiện AfterInsert (biểu mẫu) kích hoạt sau khi bạn rời khỏi bản ghi.
Các sự kiện BeforeUpdate và AfterUpdate cho các điều khiển trên biểu mẫu và cho bản ghi mới sẽ xảy ra sau sự kiện BeforeInsert và trước sự kiện AfterInsert.
Trình tự của sự kiện cho các biểu mẫu và biểu mẫu con
Sự kiện sẽ xảy ra đối với các biểu mẫu khi bạn mở hoặc đóng biểu mẫu, di chuyển giữa các biểu mẫu hoặc làm việc với dữ liệu trên biểu mẫu hay biểu mẫu con.
Mở và đóng một biểu mẫu
Khi bạn mở biểu mẫu, trình sự kiện sau đây sẽ xảy ra đối với biểu mẫu:
Mở Đổi kích kích hiện hiện tại
Nếu không có điều khiển hiện hoạt trên biểu mẫu, sự kiện GotFocus sẽ xảy ra đối với biểu mẫu sau sự kiện Activate nhưng trước sự kiện Current.
Khi bạn đóng biểu mẫu, chuỗi sự kiện sau đây sẽ xảy ra đối với biểu mẫu:
Bỏ tải kích hoạt Đóng
Nếu không có điều khiển hiện hoạt trên biểu mẫu, sự kiện LostFocus sẽ xảy ra đối với biểu mẫu sau sự kiện Unload nhưng trước sự kiện Deactivate.
Di chuyển giữa các biểu mẫu
Khi bạn chuyển đổi giữa hai biểu mẫu đang mở, sự kiện Deactivate sẽ xảy ra đối với biểu mẫu đầu tiên và sự kiện Activate xảy ra đối với biểu mẫu thứ hai:
Hủy kích hoạt (biểu mẫu 1) Activate (biểu mẫu 2)
Sự kiện Deactivate đối với biểu mẫu cũng sẽ xảy ra khi bạn chuyển đổi từ biểu mẫu sang một tab đối tượng khác trong Access. Tuy nhiên, sự kiện Deactivate sẽ xảy ra khi bạn chuyển sang một hộp thoại, sang biểu mẫu có thuộc tính PopUp được đặt thành Có hoặc sang một cửa sổ trong chương trình khác.
Lưu ý: Sự kiện Open sẽ không xảy ra nếu bạn di chuyển tiêu điểm đến một biểu mẫu đã mở, ngay cả khi bạn đã di chuyển tiêu điểm đến biểu mẫu đó bằng cách thực hiện hành động OpenForm.
Làm việc với dữ liệu trên biểu mẫu
Sự kiện đối với biểu mẫu và điều khiển sẽ xảy ra khi bạn di chuyển giữa các bản ghi trong biểu mẫu và thay đổi dữ liệu. Ví dụ: Khi bạn mở biểu mẫu lần đầu tiên, chuỗi sự kiện sau đây sẽ xảy ra:
Open (biểu mẫu) Load (biểu mẫu) Đổi kích cỡ (biểu mẫu) Activate (biểu mẫu) Current (biểu mẫu) Enter (điều khiển)0 GotFocus (điều khiển)
Tương tự, khi bạn đóng biểu mẫu, chuỗi sự kiện sau sẽ xảy ra:
Exit (điều khiển) LostFocus (điều khiển) Unload (biểu mẫu) deactivate (biểu mẫu) Close (biểu mẫu)
Nếu bạn đã thay đổi dữ liệu trong điều khiển, các sự kiện BeforeUpdate và AfterUpdate cho điều khiển và biểu mẫu sẽ xảy ra trước sự kiện Exit đối với điều khiển.
Làm việc với biểu mẫu con
Khi bạn mở biểu mẫu có chứa biểu mẫu con, biểu mẫu con và các bản ghi sẽ được tải trước biểu mẫu chính. Do đó, các sự kiện đối với biểu mẫu con và điều khiển của biểu mẫu con (chẳng hạn như Open, Current, Enter và GotFocus) sẽ xảy ra trước các sự kiện đối với biểu mẫu. Tuy nhiên, sự kiện Activate sẽ không xảy ra đối với biểu mẫu con. Do đó, việc mở một biểu mẫu chính sẽ chỉ kích hoạt sự kiện Activate đối với biểu mẫu chính.
Tương tự, khi bạn đóng biểu mẫu có chứa biểu mẫu con, biểu mẫu con và các bản ghi của biểu mẫu con sẽ bỏ tải sau biểu mẫu. Sự kiện Deactivate sẽ không xảy ra đối với biểu mẫu con. Do đó, việc đóng một biểu mẫu chính sẽ chỉ kích hoạt sự kiện Deactivate đối với biểu mẫu chính. Các sự kiện đối với điều khiển, biểu mẫu và biểu mẫu con xảy ra theo trình tự sau:
-
Các sự kiện đối với điều khiển của biểu mẫu con (chẳng hạn như Exit và LostFocus)
-
Các sự kiện cho điều khiển biểu mẫu (bao gồm điều khiển biểu mẫu con)
-
Các sự kiện đối với biểu mẫu (chẳng hạn như Deactivate và Close)
-
Các sự kiện đối với biểu mẫu con
Lưu ý: Vì các sự kiện đối với biểu mẫu con xảy ra sau khi đóng biểu mẫu chính, những sự kiện nhất định, chẳng hạn như hủy đóng biểu mẫu chính từ một sự kiện trong biểu mẫu con, sẽ không xảy ra. Bạn có thể cần phải di chuyển các kiểu kiểm tra xác thực vào một sự kiện trên biểu mẫu chính.
Trình tự của sự kiện đối với các lần nhấn phím và bấm chuột
Các sự kiện về bàn phím xảy ra đối với biểu mẫu và điều khiển khi bạn nhấn phím hoặc gửi tổ hợp phím trong khi biểu mẫu hoặc điều khiển có tiêu điểm. Sự kiện về chuột xảy ra đối với biểu mẫu, các mục biểu mẫu và điều khiển trên biểu mẫu khi bạn bấm nút chuột trong khi con trỏ chuột nằm trên biểu mẫu, mục hoặc điều khiển. Sự kiện về chuột cũng xảy ra khi bạn di chuyển con trỏ chuột trên biểu mẫu, mục hoặc điều khiển.
Sự kiện về bàn phím
Khi bạn nhấn và thả một phím trong khi điều khiển trên biểu mẫu có tiêu điểm (hoặc sử dụng hành động SendKeys hoặc câu lệnh để gửi tổ hợp phím), chuỗi sự kiện sau sẽ xảy ra:
KeyDown KeyPress KeyUp
Khi bạn nhấn và thả một phím hoặc gửi tổ hợp phím trong Tập ký tự ANSI, tất cả các sự kiện KeyDown, KeyPress và KeyUp sẽ xảy ra. Nếu bạn nhấn và giữ phím ANSI, các sự kiện KeyDown và KeyPress sẽ thay nhau lặp đi lặp lại (KeyDown, KeyPress, KeyDown, KeyPress, v.v.) cho đến khi bạn thả phím; sau đó sự kiện KeyUp sẽ xảy ra.
Nếu bạn nhấn và thả phím không phải ANSI, các sự kiện KeyDown và KeyUp sẽ xảy ra. Nếu bạn nhấn và giữ phím không phải ANSI, sự kiện KeyDown sẽ xảy ra lặp đi lặp lại cho đến khi bạn thả phím, sau đó, sự kiện KeyUp sẽ xảy ra.
Nếu việc nhấn phím kích hoạt một sự kiện khác đối với điều khiển, sự kiện đó sẽ xảy ra sau sự kiện KeyPress nhưng trước sự kiện KeyUp. Ví dụ: nếu tổ hợp phím làm thay đổi văn bản trong văn bản hộp, mà việc này làm kích hoạt sự kiện Change, chuỗi sự kiện sau đây sẽ xảy ra:
KeyDown KeyPress Change KeyUp
Nếu tổ hợp phím khiến tiêu điểm di chuyển từ một điều khiển tới điều khiển khác, sự kiện KeyDown sẽ xảy ra đối với điều khiển đầu tiên, còn sự kiện KeyPress và KeyUp sẽ xảy ra đối với điều khiển thứ hai. Ví dụ: nếu bạn thay đổi dữ liệu trong điều khiển, rồi nhấn phím TAB để di chuyển tới điều khiển tiếp theo, chuỗi sự kiện sau sẽ xảy ra:
-
Điều khiển thứ nhất:
KeyDown BeforeUpdate AfterUpdate Exit LostFocus
-
Điều khiển thứ hai:
Nhập GotFocus KeyPress KeyUp
Sự kiện về chuột
Khi bạn bấm và thả nút chuột trong khi con trỏ nằm trên điều khiển ở biểu mẫu, chuỗi sự kiện sau đây sẽ xảy ra đối với điều khiển:
Di chuột chuột lên bấm chuột
Nếu điều khiển có tiêu điểm và bạn bấm điều khiển khác để di chuyển tiêu điểm đến điều khiển thứ hai này, chuỗi sự kiện sau đây sẽ xảy ra:
-
Điều khiển thứ nhất:
Thoát khỏi LostFocus
-
Điều khiển thứ hai:
Nhập GotFocus MouseDown MouseUp và bấm chuột
Nếu bạn di chuyển đến một bản ghi khác, rồi bấm điều khiển, sự kiện Current đối với biểu mẫu cũng sẽ xảy ra trước sự kiện Enter đối với điều khiển.
Việc bấm đúp vào điều khiển sẽ khiến cho cả hai sự kiện Click và DblClick xảy ra. Ví dụ: khi bạn bấm đúp vào điều khiển không phải là nút lệnh, chuỗi sự kiện sau đây sẽ xảy ra đối với điều khiển:
MouseD của riêng MouseUp bấm vào DblClick MouseUp
Khi bạn bấm đúp vào nút lệnh, chuỗi sự kiện trước đó sẽ xảy ra, theo sau bởi sự kiện Click thứ hai.
Sự kiện MouseMove đối với biểu mẫu, mục hoặc điều khiển sẽ xảy ra khi bạn di chuyển con trỏ chuột trên biểu mẫu, mục hoặc điều khiển. Sự kiện này độc lập với các sự kiện về chuột khác.
Trình tự của sự kiện đối với báo cáo và các mục báo cáo
Các sự kiện sẽ xảy ra đối với báo cáo và mục báo cáo khi bạn mở báo cáo để in hoặc xem trước hoặc đóng báo cáo.
Các sự kiện đối với báo cáo
Khi bạn mở báo cáo để in hoặc xem trước, rồi đóng báo cáo hoặc di chuyển đến tab đối tượng khác trong Access, chuỗi sự kiện sau đây sẽ xảy ra đối với báo cáo:
Mở Kích Đóng kích hoạt
Khi bạn chuyển đổi giữa hai báo cáo đang mở, sự kiện Deactivate sẽ xảy ra đối với báo cáo đầu tiên và sự kiện Activate xảy ra đối với báo cáo thứ hai:
Hủy kích hoạt (báo cáo 1) Kích hoạt (báo cáo 2)
Sự kiện Deactivate đối với báo cáo cũng sẽ xảy ra khi bạn chuyển đổi từ báo cáo sang một tab đối tượng khác trong Access. Tuy nhiên, sự kiện Deactivate sẽ xảy ra khi bạn chuyển sang một hộp thoại, sang biểu mẫu có thuộc tính PopUp được đặt thành Có hoặc sang một cửa sổ trong chương trình khác.
Khi bạn mở báo cáo dựa trên truy vấn, Access sẽ kích hoạt sự kiện Open đối với báo cáo trước khi chạy truy vấn cơ sở. Do đó, bạn có thể đặt các tiêu chí cho báo cáo bằng macro hoặc quy trình sự kiện phản hồi sự kiện Open. Ví dụ: macro hoặc quy trình sự kiện có thể mở hộp thoại tùy chỉnh mà bạn nhập tiêu chí báo cáo.
Các sự kiện đối với mục báo cáo
Khi bạn in hoặc xem trước báo cáo, sự kiện Format và Print sẽ xảy ra đối với các mục báo cáo sau sự kiện Open và Activate đối với báo cáo và trước các sự kiện Close hoặc Deactivate của báo cáo:
Open (report) Activate (report) Format (report section) Print (report section) Close (report) Deactivate (report)
Bảo mật Bạn có thể sử dụng Dạng xem Báo cáo để cho phép người dùng lọc báo cáo. Nhưng không giống như Xem trước khi In, các sựkiện Định dạng và In trong bất kỳ mục nào không xảy ra ở Dạng xem Báo cáo. Điều này cũng áp dụng cho kết quả hàm VBA và quy trình do người dùng xác định hiển thị trong điều khiển (chẳng hạn như chú thích nhãn, trạng thái hiển thị, định dạng có điều kiện, đổi kích cỡ điều khiển, v.v.) trong các sự kiện đó. Do đó, không sử dụng mã trong trường hợp này để định dạng, ẩn hoặc in dữ liệu bí mật, có thể bị lộ. Chúng tôi khuyên bạn nên lọc trước dữ liệu hoặc tắt Xem trước Báo cáo bằng cách đặt thuộc tính AllowReportView thành No.
Ngoài ra, các sự kiện sau đây có thể xảy ra trong hoặc sau khi định dạng nhưng trước sự kiện Print:
-
Sự kiện Retreat xảy ra khi Access quay lại mục trước đó trong quá trình định dạng báo cáo.
-
Sự kiện NoData xảy ra nếu không có bản ghi nào hiển thị theo báo cáo.
-
Sự kiện Page xảy ra sau khi định dạng nhưng trước khi in. Bạn có thể sử dụng sự kiện này để tùy chỉnh giao diện của báo cáo được in.