1 Mục lục 1 2 Làm quen với visual basic 0 9



tải về 1.69 Mb.
trang19/39
Chuyển đổi dữ liệu09.10.2016
Kích1.69 Mb.
#32631
1   ...   15   16   17   18   19   20   21   22   ...   39

10.2 Biến đối tượng


Cho đến bây giờ, ta chỉ tham chiếu đến điều khiển hay biểu mẫu thông qua tên ta đặt cho chúng lúc thiết kế. Cách làm này chỉ phù hợp đối với các chương tình đơn giản. Đặt đối tượng vào biến và tham chiếu đến nó bằng tên biến cho phép ta sử dụng cùng đoạn chương trình cho vô số các instance khác nhau của một kiểu đối tượng.

Với biến đối tượng ta có thể:



  • Tạo điều khiển mới trong lúc thi hành.

  • Copy điều khiển để sinh ra một instance mới của điêu khiển hiện hành.

  • Tạo bản sao biểu mẫu cùng tên, cùng điều khiển và chương trình; nhưng từng biểu mẫu chứa và xử lý những dữ liệu khác nhau – tương tự nhiều tài liệu trong ứng dụng của Word hay nhiều bảng tính trong Excel.

Biến đối tượng cung cấp khả năng xây dựng các thủ tục tổng quát để xử lý với những điều khiển nhất định. Ví dụ, một thủ tục kiểm tra dữ liệu của hộp văn bản chỉ dùng trong trường hợp tên điều khiển được chỉ ra trong chương tình. Tuy nhiên, để thủ tục trở thành độc lập với điều khiển bất kỳ, ta xem điều khiển như một biến đối tượng.

Dim NewEmployee As New cEmployee


10.2.1Tạo điều khiển lúc thi hành


Cách đơn giản nhất là tạo một mảng điều khiển vào lúc thiết kế, sau đó, mở rộng mảng bằng chương trình lúc thi hành. Nếu ta định thuộc tính Index của điều khiển đầu tiên là 0 lúc thiết kế, ta có thêm điều khiển lúc thi hành. Điều khiển tạo lúc thi hành có cùng tên, kiểu, và thủ tục xử lý sự kiện như điều khiển ban đầu.

Tương tự biến mảng, ta có thể mở rộng hoặc rút gọn mảng điều khiển. Điểm khác nhau là ta không Redim mảng điều khiển như với biến mảng. Thay vào đó, ta phải Load bản instance mới của điều khiển vào mảng. Khi muốn xoá điều khiển, ta Unload chúng.




    Ví dụ mẫu - Tạo điều khiển lúc thi hành

Thử tạo một dãy các nút lệnh trên biểu mẫu. Vẽ một nút lệnh lúc thiết kế và dùng chương trình để tạo phần còn lại.

  1. Tạo đề án mới và vẽ một nút lệnh trên biểu mẫu.

  2. Đổi thuộc tính Index thành 0. Khi ấy một mảng điều khiển có một phần tử được tạo ra.

  3. Đưa đoạn chương tình sau vào thủ tục Click của nút lệnh:

Private Sub Command1_Click(Index As Integer)

Static sNextOperation As String

Dim nIndex As Integer

For nIndex = 1 To 5

If sNextOperation = "UNLOAD" Then

Unload Command1(nIndex)

Else

Load Command1(nIndex)



With Command1(nIndex)

.Top = Command1(nIndex - 1).Top + Command1(nIndex - 1).Height

.Caption = nIndex

.Visible = True

End With

End If


Next

If sNextOperation = "UNLOAD" Then

sNextOperation = "LOAD"

Else


sNextOperation = "UNLOAD"

End If


End Sub

  1. Thi hành đoạn chương trình và nhấn trên nút lệnh vài lần. Mỗi lần nhấn, 5 nút lệnh được tạo hoặc xoá.

  2. Lưu vào đĩa với tên NewCtrl.vbp

Vòng lặp For...Next tạo hoặc xoá nút lệnh này tuỳ theo nội dung biến sNextOperation. Trước hết, nội dung của sNextOperation được kiểm tra để xem cần Load hay Unload các phần tử. Lần đầu, sNextOperation chưa được gán, nó rơi vào phần False, nghĩa là Load.

Bởi mặc định, điều khiển mới tạo lúc thi hành xuất hiện tại cùng vị trí với điều khiển gốc, và không hiển thị. Do đó, ta có thể đổi vị trí và điều chỉnh kích cỡ mà không để người sử dụng thấy. Nó cũng cấm Windows vẽ lại mỗi lần nạp các điều khiển, không những làm chậm chương trình mà còn hiển thị không có trật tự trong khi ta đang di chuyển chúng. Ta chỉ cho chúng hiển thị sau khi đã có vị trí mới.


10.2.2Sự kiện của mảng điều khiển


Mặc dù hiển thị khác nhau, 6 phần tử vẫn chia sẻ một thủ tục xử lý sự kiện, vì nhấn vào một nút bất kỳ, chúng đề đáp ứng như nau. Ta có thể xử lý các sự kiện theo từng nút lệnh phân biệt, dựa trên Index của mảng điều khiển.

    Ví dụ mẫu - Xử lý sự kiện với mảng điều khiển

  1. Mở đề án NewCtrl.vbp và chọn sự kiện Click trên nút lệnh.

  2. Thêm đoạn chương trình sau vào:

Private Sub Command1_Click(Index As Integer)

Static sNextOperation As String

Dim nIndex As Integer

Select Case Index

Case 0

For nIndex = 1 To 5

If sNextOperation = "UNLOAD" Then

Unload Command1(nIndex)

Else

Load Command1(nIndex)



With Command1(nIndex)

.Top = Command1(nIndex - 1).Top + Command1(nIndex - 1).Height

.Caption = nIndex

.Visible = True

End With

End If


Next

If sNextOperation = "UNLOAD" Then

sNextOperation = "LOAD"

Else


sNextOperation = "UNLOAD"

End If


Case 1, 2, 3, 4, 5

MsgBox "You pressed Button " & Index

End Select

End Sub


  1. Thi hành chương trình. Nhấn chuột trên từng nút lệnh, một thông điệp xuất hiện cho biết thứ tự nút nhấn.

10.2.3Quản lý điều khiển như biến đối tượng


Không chỉ dùng biến đối tượng như mảng điều khiển, ta còn có thể truyền biến đối tượng và mảng đối tượng vào thủ tục hay hàm.

Ví dụ, ta có khoảng 30 họpp văn bản trên biểu mẫu, từng cái nhận dữ liệu khác nhau. Một số chỉ nhận kiểu số, một số chỉ nhận chữ cái, số khác chấp nhận cả hai, trong khi số còn lại kiểm tra số ký tự nhập vào xem có vượt quá số lượng quy định không? Nếu xử lý riêng rẽ từng điều khiển, ta sẽ tốn rất nhiều đoạn chương tình. Giải pháp là xem hộp văn bản như một đối tượng, và truyền nó đến một thủ tục tổng quát.


10.2.3.1Hàm kiểm tra hộp văn bản


Hàm này sẽ tự động biết kiểu dữ liệu mà mỗi hộp văn bản cũng như chiều dài tối đa của dữ liệu.


    Ví dụ mấu - Kiểm tra hộp văn bản

  1. Tạo đề án mới và vẽ một biểu mẫu gồm các điều khiển như sau:




  1. Thiết lập thuộc tính cho hộp văn bản như sau:

Mô tả

Thuộc tính

Giá trị

Hộp “alphabetic only” (chỉ nhận chữ)

Name

Index


Tag

txtValidate

0

A12



Hộp “Numbers” (chỉ nhận số)

Name

Index


Tag

txtValidate

1

N5



Hộp “Anything” (nhận mọi thứ)

Name

Index


Tag

txtValidate

0

*4



Lưu ý rằng chữ cái trong thuộc tính Tag trong cửa sổ Properties phải là chữ in hoa, nếu không ví dụ không hoạt động.

  1. Phần còn lại là viết chương trình. Mở cửa sổ Code, đưa đoạn chương trình sau vào:

Option Explicit

Private Sub ValidateKeyPress(txtControl As TextBox, nKeyAscii As Integer)

Dim sMaxLength As String

Dim sKey As String * 1

If nKeyAscii < 32 Or nKeyAscii > 126 Then Exit Sub

sMaxLength = Right$(txtControl.Tag, Len(txtControl.Tag) - 1)

If Len(txtControl.Text) >= Val(sMaxLength) Then

Beep


nKeyAscii = 0

Exit Sub


End If

Select Case Left$(txtControl.Tag, 1)

Case "A"

sKey = UCase(Chr$(nKeyAscii))

If Asc(sKey) < 65 Or Asc(sKey) > 90 Then

Beep


nKeyAscii = 0

Exit Sub


End If

Case "N"


If nKeyAscii < 48 Or nKeyAscii > 57 Then

Beep


nKeyAscii = 0

Exit Sub


End If

End Select

End Sub


  1. Thi hành chương trình.

ValidateKeyPress là thủ tục ở mức biểu mẫu và được khai báo trong phần General. nKeyAscii là mã của phím nhấn. Vì từ khoá ByVal không được nêu ra, nên tham số được truyền bằng tham chiếu. Đổi KeyAscii về 0 trong sự kiện KeyPress nghĩa là phím nhấn.

Thuộc tính Tag được dùng như một nhãn riêng đa năng cho các điều khiển. Nó cho biết kiểu dữ liệu được cho phép trong mỗi hộp văn bản. Ký tự đầu tiên định nghĩa kiểu dữ liệu cho phép, ‘A’ nghĩa là chỉ có chữ cái, ‘N’ nghĩa là số, còn lại là các kiểu khác. Con số kế tiếp quy định số ký tự tối đa trong mỗi hộp văn bản.

Ta có thể đổi kiểu dữ liệu của mỗi hộp văn bản bằng cách đổi thuộc tính Tag trong cửa sổ Properties.

Giai đoạn đầu tiên, chương tình kiểm tra nKeyAscii cho các ký tự đặc biệt. Nếu chúng được nhấn, phím đó sẽ được bỏ qua.

If nKeyAscii < 32 Or nKeyAscii > 126 Then Exit Sub

Dòng lệnh kế lấy giá trị từ thuộc tính Tag đưa vào biến sMaxLength.

Sau đó, kiểm tra chiều dài tối đa:

If Len(txtControl.Text) >= Val(sMaxLength) Then

Beep

nKeyAscii = 0



Exit Sub

End If


Select Case so sánh phím ký tự với kiểu dữ liệu quy định trong thuộc tính Tag. Hàm Chr$ chuyển mã ký tự nKeyAscii thành chuỗi ký tự tương ứng. Hàm Asc làm ngược lại và trả về mã ký tự ASCII của một ký tự.

10.2.4Khai báo biến đối tượng


Ta có thể khai báo một biến đối tượng một cách tường minh như khai báo biến thông thường bằng cách cung cấp một kiểu dữ liệu mà VB nhận ra.

Dim txtControl As TextBox

Chương trình sẽ hiệu quả, dễ gỡ rối và chạy nhanh hơn khi khai báo biến đối tượng tường minh. Tuy nhiên, VB cũng cho phép khai báo một biến đối tượng “ẩn”:

Dim cltControl As Control

Tham số hàm và thủ tục có thể khai báo kiểu này. Nó cho phép ta truyền một điều khiển bất kỳ. Sau đó, dùng dòng lệnh TypeOf để kiểm tra kiểu điều khiển liên quan đến một đối tượng.

Nếu khai báo tường minh, VB kiểm tra thuộc tính của đối tượng ngay lúc biên dịch. Nếu khai báo ẩn, VB chỉ kiểm tra thuộc tính lúc thi hành.


10.2.4.1Kiểu của biến đối tượng


Sau đây là danh sách các kiểu đối tượng tường minh mà VB có thể nhận ra:


CheckBox

ComboBox

CommandButton

MDIForm

Data

DirListBox

DriveListBox

FileListBox

Grid

Frame

HscrollBar

Image

Label

Line

ListBox

menu

OptionButton

OLE

PictureBox

Shape

TextBox

Timer

VscrollBar

Form

Đây là những đối tượng chuẩn. Chúng là những tên lớp và được đặt kế bên tên điều khiển trong cửa sổ Properties.




    Ví dụ mẫu – So sánh khai báo tường minh và ẩn

  1. Tạo đề án mới. Vẽ biểu mẫu như sau:




  1. Đặt tên điều khiển nhãn trống là lblTime, nút lệnh là cmdExplicitcmdImplicit.

  2. Mở cửa sổ Code, đưa đoạn chương trình sau vào:

Private Sub cmdExplicit_Click()

Dim varTime As Variant

Dim nIndex As Integer

varTime = Now

For nIndex = 1 To 15000

Time_Explicit cmdExplicit, nIndex

Next

cmdExplicit.Caption = "&Explicit"



lblTime.Caption = Minute(Now - varTime) & " Mins, " & _

Second(Now - varTime) & " Secs"

End Sub
Private Sub cmdImplicit_Click()

Dim varTime As Variant

Dim nIndex As Integer

varTime = Now

For nIndex = 1 To 15000

Time_Implicit cmdImplicit, nIndex

Next

cmdImplicit.Caption = "&Implicit"



lblTime.Caption = Minute(Now - varTime) & " Mins, " & _

Second(Now - varTime) & " Secs"

End Sub
Đưa 2 thủ tục sau vào phần (General)

Private Sub Time_Explicit(cmdCommand As CommandButton, nNumber As Integer)

cmdCommand.Caption = nNumber

End Sub
Private Sub Time_Implicit(cmdCommand As Control, nNumber As Integer)

cmdCommand.Caption = nNumber

End Sub



  1. Thi hành ứng dụng bằng cách nhấn F5.

  2. Khi biểu mẫu xuất hiện, nhấn nút Explicit. Chương trình báo thời gian hiển thị liên tục 15000 tiêu đề khác nhau trên nút lệnh. Nút lệnh là một biến đối tượng được khai báo tường minh.

  3. Nhấn chuột trên nút Implicit. Mọi việc xảy ra tương tự, nhưng lần này nút lệnh là một biến đối tượng được khai báo ẩn.

Để ý bạn sẽ thấy nhấn trên Implicit chậm hơn nhấn trên Explicit khoảng 10%.


tải về 1.69 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   15   16   17   18   19   20   21   22   ...   39




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương