Tải bản đầy đủ (.pdf) (6 trang)

Tài liệu CÁC KHÁI NIỆM EVENT doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (87.56 KB, 6 trang )

CÁC KHÁI NIỆM


Sự kiện là gì?
Sự kiện (event) là một hành động xác định xảy ra trên hoặc với một đối tượng nào
đó. MS Access có thể đáp lại nhiều sự kiện: nhấn chuột, thay đổi dữ liệu, mở hoặc
đóng form, ... Sự kiện thường là kết quả tạo ra bởi một hành động của người sử
dụng.

Thủ tục là gì?
Thủ tục (procedure) là một đơn vị code của VB. Một thủ tục bao gồm một dãy các
lệnh (statement) hoặc các phương thức (method) để thực thi một hành động hoặc
tính toán một giá trị.

Thủ tục sự kiện là gì?
Thủ tục sự kiện (event procedure) là một thủ tục tự động thực thi để đáp lại một sự
kiện được khởi xướng từ một hành động của người dùng hoặc từ code của chương
trình.
VD: Thủ tục sự kiện sau đây sẽ thực thi một lệnh mở câu thông báo chào
khi form được mở ra:
Private Sub Form_Load()
MsgBox "Xin chào các bạn."
End Sub

MỘT SỐ SỰ KIỆN THƯỜNG GẶP VÀ CÁCH ĐIỀU KHIỂN SỰ
KIỆN


Các sự kiện xảy ra với đối tượng Form:



1. Sự kiện Open:
Sự kiện xảy ra khi form được mở, nhưng trước khi record đầu tiên được hiển thị.
(Ghi chú: ở đối tượng Report cũng có sự kiện Open, trong report sự kện Open xảy ra
trước khi report được preview hoặc được in)

Từ khi gọi form cho đến khi form xuất hiện lần đầu trên màn hình, một loạt các sự
kiện xảy ra, trong đó sự kiện Open là sự kiện được xảy ra đầu tiên. Các sự kiện này
và thời điểm xảy ra của nó được thể hiện bằng chuỗi sau:
Open --> Load --> Resize --> Activate --> Current
Thuộc tính gắn với sự kiện Open có tên là OnOpen. (Các bạn lưu ý: với những thuộc
tính bắt đầu bằng On có nghĩa là sự kiện đó đang diễn tiến,Before là trước khi sự
kiện xảy ra, After là sau khi sự kiện xảy ra).
Thủ tục sự kiện gắn với sự kiện này là Form_Open. Sự kiện có một tham số có tên là
Cancel kiểu Integer (thực chất nó chỉ nhận hai giá trị True và False). Tham số này
các bạn có thể định lại giá trị cho nó.
Nếu định là True, sự kiện sẽ bị hoãn, nghĩa là sự kiện sẽ không hoàn tất, nhưng
không xảy ra lỗi. Mặc nhiên là False.
VD: Bạn muốn rằng khi form A mở ra thì form B sẽ mở ra nếu người sử dụng đồng ý,
bạn có thể code cho thủ tục sự kiện như sau:
Private Sub Form_Open(Cancel As Integer)
If MsgBox("Ban co muon form B mo ra dong th oi luon khong?", vbYesNo) =
vbYes Then
DoCmd.OpenForm "form B"
Else
Cancel = True
End If
End Sub

Ghi chú: Bất kỳ một thủ tục sự kiện nào nó thông số là Cancel, thì sự
kiện tương ứng đều có thể cho ngưng không cho hoàn tất. Trong trường

hợp bạn sử dụng một macro hoặc một phương thức của DoCmd thì nếu hoãn
một sự kiện, sẽ có một error trả về. Để tránh xuất hiện lỗi thì nế dùng
macro, bạn có thể đặt trước macro đó một macro SetWarnings và gán cho
thuộc tính WarningOn là No, dùng DoCmd trong code thì trước đó bạn đặt
câu On Error Resume Next.
2. Sự kiện Load:
Sự kiện Load xảy ra bởi tác động của người dùng như:
- Bắt đầu một ứng dụng.
- Mở một form bằng cách nhắp vào Open trên cửa sổ Database.
- Thực thi một hành động OpenForm trong macro.
- Gọi form bằng DoCmd.OpenForm trong thủ tục.

Thuộc tính sự kiện tương ứng có tên là OnLoad.

Thủ tục sự kiện tương ứng có tên là Form_Load, không có tham số.
Khi điều khiển sự kiện này, bạn có thể thực hiện những công việc sau:
Thiết lập các giá trị mặc định cho các control hoặc thể hiện các giá trị tính toán tùy
thuộc vào dữ liệu có trên form.

VD: Trong public module bạn có một biến language. Nếu biến này là "V" thì bạn cho
hiển thị các caption của các Label là tiếng Việt, "E" thì hiển thị là tiếng Anh. Biến này
sẽ tùy thuộc vào việc người ta chọn trong một thủ tục nào đó trước khi form bạn
được gọi vào.
Trước tiên, khi thiết kế form, ở các label, bạn đặt các từ "ính lịt" tương ứng ở
property Tag của nó.
Sau đó bạn thiết kế thủ tục Form_Load như sau:
Private Sub Form_Load ()
Dim ctl As Control
For Each ctl In Detail.Controls ' or FormHeader.Controls,
FormFooter.Controls

If TypeOf ctl Is Label Then
x = ctl.Caption
ctl.Caption = ctl.Tag
ctl.Tag = x
End If
Next
End Sub

3. Sự kiện Resize:
Sự kiện xảy ra khi form được gọi và bất cứ khi nào kích thước của form thay đổi.

Thuộc tính sự kiện tương ứng có tên là OnResize.

Thủ tục sự kiện tương ứng có tên là Form_Resize. Thủ tục này không có tham số.

Khi điều khiển sự kiện này, bạn có thể:
- Di chuyển hoặc định lại kích thước của một control.
- Tính toán lại các biến.
- Reset lại các thuộc tính có liên quan đến kích thước của form.

VD: Khi có sự thay đổi kích thước của form sẽ cho hoàn tất những cập nhật màn hình
còn đang treo hoặc những tính toán chưa thực hiện xong trên các control bằng
phương thức Repaint.
Private Sub Form_Resize()
Me.Repaint
End Sub

4. Sự kiện Activate:
Sự kiện xảy ra khi một form (cũng đúng với report) nhận một focus (cái này không
dám dịch ra tiếng việt, bởi dịch ra thì hổng ai hiểu, còn để nguyên thì ai cũng hiểu !!!

) và trở thành cửa sổ hoạt động.

Thuộc tính sự kiện tương ứng có tên là OnActivate.

Thủ tục sự kiện tương ứng có tên là Form_Activate. Thủ tục không có tham số.

VD: Bây giờ bạn có thiết kế một cái toolbar chỉ dành riêng cho form A. Như vậy nếu
form A được kích hoạt thì mới hiện toolbar này (ví dụ toolbar này có tên là
FormA_Toolbar).
Private Sub Form_Activate()
DoCmd.ShowToolbar "FormA_Toolbar", acToolbarYes
End Sub


5. Sự kiện Current:
Sự kiện xảy ra khi một focus được di chuyển đến một record, làm cho nó trở thành
record hiện hành, hoặc khi form được "làm tươi mát" (refresh) hoặc được gán lại
source (requery).

Thuộc tính sự kiện tương ứng có tên là OnCurrent.

Thủ tục sự kiện tương ứng có tên là Form_Current. Thủ tục này không có tham số.

VD: Bạn có một form hiển thị một số thông tin của một table, trong đó có 3 textbox
ứng với 3 field(tạm là text1, text2, text3) và một checkbox cũng ứng với một field
Yes/No(check1).
Yêu cầu đặt ra là nếu check1 bằng True thì không cho thay đổi nội dung trong 3
textbox.
Private Sub Form_Current ()
text1.Locked = check1

text3.Locked = check1
text3.Locked = check1
End Sub
6. Sự kiện UnLoad:
Sự kiện Unload xảy ra khi:
- Người sử dụng nhấn nút Close trên cửa sổ Form.
- Người sử dụng gọi menu File - Close.
- Gọi một macro Close một cửa sổ có thuộc tính Form.
- Gọi một lệnh DoCmd.Close với kiểu cửa sổ là acForm.
- Đóng Windows trong khi ứng dụng Access đang chạy.

Unload là sự kiện đầu tiên của chuỗi sự kiện sau:
Unload --> DeActivate --> Close

Thuộc tính sự kiện tương ứng là OnUnload.

Thủ tục sự kiện tương ứng là Form_Unload. Thủ tục này có một thuộc tính Cancel.
Như ở bài trước, bạn đã biết nếu Cancel = True thì có nghĩa gì rồi phải không?

VD: Giả sử trong Form bạn có một biến tên là danglam kiểu Boolean. Nếu biến là
True thì có nghĩa bạn đang nhập liệu và đang có thay đổi dữ liệu. Bạn muốn rằng khi
đóng form, nó sẽ hỏi lưu thay đổi không, nếu có thì trước khi đóng, bạn cho lưu.
(Code dưới đây chỉ là dàn ý, bạn phải tùy biến để cho phù hợp với ứng dụng mà bạn
thiết kế).

Private Sub Form_Unload (Cancel As Integer)
If danglam Then
If MsgBox ("Du lieu da co thay doi. Co muon luu truoc khi dong khong?",
vbYesNo) = vbYes then
DoCmd.SaveRecord

Else
DoCmd.Undo
End If
End Sub


7. Sự kiện DeActivate:
Sự kiện xảy ra khi bạn rời focus ra khỏi form (hoặc report). Nó cũng xảy ra sau khi
form (report) được Unload.

Thuộc tính sự kiện tương ứng có tên OnDeactivate.

Thủ tục sự kiện tương ứng có tên Form_Deactivate. Không có tham số.

VD: Tiếp theo ví dụ của mục 4 phía trên (bài trước), khi chuyển focus ra khỏi form A,
bạn cho ẩn tool box đi.

Private Sub Form_Deactivate()
DoCmd.ShowToolbar "FormA_Toolbar", acToolbarNo
End Sub


8. Sự kiện Close:
Sự kiện xảy ra khi form đã thực sự được đóng lại nhưng chưa rời hỏi màn hình. Về cơ
bản xem như nó đã được đóng lại, nhưng nếu bạn có "lưu luyến" gì với người dùng,
bạn có thể gửi một thông điệp gì đó ở đây đại loại như ... xem ví dụ bên dưới.

Tên thuộc tính sự kiện tương ứng là OnClose.

Tên thủ tục sự kiện là Form_Close. Không có tham số.


VD: Gửi một thông điệp "lưu luyến"

Private Sub Form_Close ()
MsgBox "See you soon."
End Sub
9. Sự kiện BeforeInsert:
Sự kiện này xảy ra khi người sử dụng gõ vào ký tự đầu tiên trong record mới, nhưng
trước khi record ấy thực sự được tạo.

Sự kiện này bắt đầu một dãy sự kiện sau đây:
BeforeInsert --> BeforeUpdate --> AfterUpdate --> AfterInsert

Thuộc tính sự kiện có tên là BeforeInsert.

Thủ tục sự kiện có tên là Form_BeforeInsert. Có một tham số quen thuộc là Cancel.

VD: Giả sử bạn là người rất cẩn thận. Bạn muốn rằng khi một người sử dụng gõ một
ký tự bất kỳ vào record mới, bạn sẽ lưu ý họ liền, sợ rằng họ vô tình nhấn phím mà
thôi. Bạn có thể code nhẹ nhàng như sau:

Private Sub Form_BeforeInsert(Cancel As Integer)
If MsgBox("Them record moi ha ban?", vbOKCancel) = vbCancel Then
MsgBox "Lan sau nho can than khi su dung ban phim nghen !!!"
Cancel = True
End If
End Sub


10. Sự kiện BeforeUpdate:

Sự kiện xảy ra khi có một sự thay đổi dữ liệu trong một control thuộc form hoặc khi
record được cập nhật (update).
Đúng ra đây đang liệt kê các sự kiện của Form, nhưng sự kiện này cũng ảnh hưởng
đến một control, vậy có nên nói luôn ở đây không ta? Thôi chơi luôn há?

Đối với form, sự kiện này sẽ xảy ra khi bạn dời focus từ record hiện hành sang một
record khác nhưng chưa dời thật sự, hoặc bạn đã gọi lệnh Save Record trong menu
Records, hoặc bạn gọi macro SaveRecord hoặc bạn dùng lệnh DoCmd.RunCommand
acCmdSaveRecord.
Đối với control, sự kiện này sẽ xảy ra khi bạn dời focus từ control đó sang một
control khác mà ở control hiện hành bạn có thay đổi dữ liệu.
Sự kiện BeforeUpdate của form xảy ra sau sự kiện BeforeUpdate của control. Bạn
nên chú ý điều này để việc điều khiển bằng thủ tục sự kiện cho phù hợp.

Thuộc tính sự kiện có tên là BeforeUpdate.

Thủ tục sự kiện có tên là:
Form_BeforeUpdate đối với form
controlname_BeforeUpdate đối với một control

Cả hai đều có tham số quen thuộc Cancel. Với form, khi Cancel = True, nó sẽ không
cho bạn rời khỏi record đó, trừ khi bạn nhấn ESC để hủy thay đổi (hoặc một macro
hay lệnh tương ứng) hay nhập liệu cho chính xác với yêu cầu.
Đối với control, khi Cancel = True, nó sẽ không cho bạn rời khỏi control đó trừ khi
bạn cũng nhấn ESC để hủy bỏ thay đổi (hoặc nhập dữ liệu phù hợp).

VD: Giả sử bạn nhập dữ liệu điểm thi 3 môn học A, B, C cho các thí sinh. Trong đó

×