Sự kiện của lớp

Một phần của tài liệu Giáo trình Lập trình với Visual Basic (Nghề Lập trình máy tính): Phần 2 - Tổng cục dạy nghề (Trang 32 - 34)

C. SỬ DỤNG CÁC HÀM AP

3. Sự kiện của lớp

Định nghĩa sự kiện cho lớp đã có trong VB5. Nó vẫn hữu dụng với VB6. Chẳng hạn ta muốn mỗi lần hộp được vẽ trên màn hình, sự kiện Draw gây ra hoạt động cập nhật trên màn hình.

Ví dụ - Định nghĩa và kích hoạt sự kiện

1. Định nghĩa sự kiện Draw. Một trong những thông tin cần cập nhật là toạ độ (x,y) của hộp. Mở cửa sổ Code và thêm dòng lệnh sau vào phần General Declarations:

Public Event Draw(X As Integer, Y As Integer)

Tuy nhiên, dòng lệnh này chưa thể hiện lúc nào thì sự kiện được kích hoạt.

2. Ta muốn sự kiện Draw được sinh ra mỗi khi hộp được vẽ trên biểu mẫu. Tìm phương thức DrawBox và thêm dòng lệnh in đậm vào cuối của phương thức này:

Public Sub DrawBox(Canvas As Object, Optional lColor As Long)

If IsMissing(lColor) Then

Canvas.Line (mvarX, mvarY)-(mvarX + mvarWidth, mvarY + _ mvarHeight),, B

Else

Canvas.Line (mvarX, mvarY)-(mvarX + mvarWidth, mvarY + _ mvarHeight), lColor, B

End If

RaiseEvent Draw(mvarX, mvarY) End Sub

3. Tìm thủ tục xử lý sự kiện Click của biểu mẫu. Tìm và xố dịng lệnh tạo đối tượng

A_Box và thêm một dòng vào phần General Declarations:

Private Sub Form_Click() Dim nIndex As Integer With A_Box

.Y = 0

.Width = 1000

.Height = 1000 For nIndex = 0 To 1000 .DrawBox Me, Me.BackColor .X = nIndex

.DrawBox Me Next End With End Sub

4. Thêm một dòng vào sự kiện Form_Load: Private Sub Form_Load()

Set A_Box = New clsBox End Sub

5. Chọn A_Box từ danh sách trong cửa sổ Code. Chọn sự kiện Draw từ danh sách các sự kiện.

6. Trong sự kiện này, ta dùng lệnh Print để in ra toạ độ của hộp trong cửa sổ gỡ rối (hay còn gọi là cửa sổ Immediate)

Private Sub A_Box_Draw(X As Integer, Y As Integer) Debug.Print "The box just got drawn at " & X & ", " & Y End Sub

7. Thi hành chương trình. Nhấn chuột trên biểu mẫu, ta thấy hộp trượt qua màn hình. Đồng thời trong cửa sổ Immediate, ta thấy các dòng văn bản hiển thị toạ độ hiện hành của hộp. Ở đây, ta dùng phương thức RaiseEvent để yêu cầu VB phát ra sự kiện Draw, và truyền 2 giá trị

của 2 biến thuộc tính mvarX và mvarY chứa toạ độ (x, y) của hộp cho sự kiện Draw mới.

Để có thể xử lý các sự kiện của một đối tượng tự tạo, ta cần khai báo đối tượng hơi khác một chút. Trước hết, nó phải được khai báo là Private trong biểu mẫu (hoặc modul), thay vì là Private trong một thủ tục. Sau đó, ta phải dùng từ WithEvents thay vì Dim:

Private WithEvents A_Box As clsBox

Từ khóa WithEvents báo cho VB biết ta đang khai báo một đối tượng có sự kiện, và ta dự định viết chương trình để xử lý những sự kiện này.

Chú ý từ khố New bị loại bỏ trong dịng lệnh WithEvents. Khi ta viết: Dim A_Box As New clsBox

Nghĩa là không chỉ thông báo cho VB rằng ta sắp sử dụng một đối tượng dựa theo lớp clsBox, ta còn yêu cầu VB cấp phát vùng nhớ cho đối tượng và tạo nó. Tuy nhiên, do hạn chế của VB, điều này khơng được thực hiện với từ khoá WithEvents. Thay vào đó, ta phải tạo đối tượng riêng, bằng cách thêm dịng lệnh vào sự kiện Form_Load.

Tóm lại, đối với sự kiện, ta cần nhớ:

o Khai báo sự kiện dùng Public Event.

o Phát sự kiện dùng RaiseEvent

o Tạo đối tượng với Dim WithEvents, không dùng New.

o Tạo đối tượng như sau: Set <đối tượng> = New <lớp>

Một phần của tài liệu Giáo trình Lập trình với Visual Basic (Nghề Lập trình máy tính): Phần 2 - Tổng cục dạy nghề (Trang 32 - 34)

Tải bản đầy đủ (PDF)

(51 trang)