H ng d n l p trình VB.NET ẫ ậ ướ ươ ậ ng 11: S d ng m ng và t p ử ụ ả Ch h pợ

Ch

ươ 11: ng

S d ng m ng và t p h p (Collection)

ậ ợ

ử ụ

--------oOo--------

N i dung th o lu n: ả ậ ộ

- T ch c thông tin d li u có chi u dài c đ nh và m ng đ ng ổ ứ ữ ệ ố ị ề ả ộ

i kích th - D tr m ng d li u khi đ nh nghĩa l ữ ệ ự ữ ả ị ạ ướ c m ng ả

- X lý t p h p các đ i t ố ượ ử ậ ợ ng đi u khi n trên form ể ề

- S d ng vòng l p ử ụ ố ặ For Each…Next đ duy t qua danh sách t p h p các đ i ể ệ ậ ợ

ngượ t

- T o t p h p c a riêng b n đ qu n lý d li u chu i ỗ ạ ợ ủ ạ ậ ữ ệ ể ả

Khi ch ng trình tr nên l n và l ng thông tin và d ươ ở ớ ượ ữ li u l n, b n không th ch dùng ệ ớ ể ỉ ạ

t h n đó là m ng. M ng ch a danh bi n mà còn c n đ n m t công c l u tr , x lý t ộ ữ ử ụ ư ế ế ầ ố ơ ứ ả ả

sách tu n t các ph n t ầ ự ầ ử cùng đ nh d ng. ị ạ

Chúng ta cũng có th nhóm các đ i t ng vào thành t p h p đ d qu n lý, dùng vòng ố ượ ể ể ễ ậ ả ợ

c a t p h p. l p For each…Next đ duy t qua các ph n t ể ặ ầ ử ủ ậ ệ ợ

Các tính năng m i trong VB.NET: ớ

- M ng có ch s c s là 0 ỉ ố ơ ở ả

- Hàm Lbound luôn tr v 0 là gi ả ề ớ ạ i h n th p nh t c a m ng. Hàm ấ ủ ấ ả Ubound trả

i h n trên c a m ng. S ph n t Ubound()-1 v gi ề ớ ạ ầ ử ủ c a m ng là ả ủ ả ố

- VB.NET dùng l p ớ System.Collections đ x lý t p h p ợ ể ử ậ

ể - B n có th ch a các đi u khi n trong m ng n u m ng c a b n khai báo ki u ể ứ ủ ạ ề ể ế ạ ả ả

Object

1. Làm vi c v i m ng các bi n ệ ớ ả

ế

M ng giúp qu n lý các d li u l n h t s c d dàng. Vi c truy c p các ph n t ế ứ ữ ệ ớ ầ ử ủ c a ễ ệ ả ả ậ

m ng thông qua ch s . ỉ ố ả

1.1. T o m ng ạ ả

Vi c khai báo m ng t ng t nh khai báo bi n. ng ch a các thông ệ ả ươ ự ế Vi c khai báo th ư ệ ườ ứ

tin nh :ư

- Tên m ng: Tên đ i di n cho m ng, vi c truy c p m t ph n t m ng g m tên ầ ử ả ệ ệ ả ạ ả ậ ộ ồ

m ng và ch s m ng. ỉ ố ả ả

- Ki u d li u: T t c các ph n t ể ữ ệ ấ ả ầ ử trong m ng ph i có cùng ki u. ả ể ả

- Kích th c m ng: Là s chi u c a m ng. ướ ề ủ ả ả ố

Biên so n: Ph m Đ c L p - 1 - Add: cnt-44-dh, ứ ạ ạ ậ VIMARU

H ng d n l p trình VB.NET ẫ ậ ướ ươ ậ ng 11: S d ng m ng và t p ử ụ ả Ch h pợ

- S ph n t c a m ng: S ph n t t ầ ử ủ ầ ử ố ả ố ố i đa c a m ng ủ ả

1.2. Khai báo m ng c đ nh ố ị ả

Cú pháp chung khai báo m ng có kích th c là: ả ướ

Dim ArrayName(Dim1Index, Dim2Index) As DataType

Trong đó:

- ArrayName: tên m ngả

- Dim1Index và Dim2Index: là hai chi u c a m ng ề ủ ả

- Datatype: ki u d li u c a m ng. Khi ch a xác đ nh ki u c th , có th dùng ể ụ ể ữ ệ ủ ư ể ể ả ị

ki u Object. ể

Ví d :ụ

có tên ầ ử ứ ề ả ộ Khai báo Dim Employee(4) As String khai báo m ng m t chi u ch a 5 ph n t

là Employee có ki u String. ể

khóa Public B n cũng có th khai báo m ng m t cách toàn c c trong module b ng t ộ ụ ể ạ ả ằ ừ

nh sau: ư

Public Employee(4) As String.

M ng m t chi u có d ng: ề ả ạ ộ

Employee

0

1

2

3

4

Đ khai báo m ng hai chi u mang tên ScoreBoard b n có th khai báo nh sau: ư ể ề ể ả ạ

Dim ScoreBoard(1, 4) As Short

M ng này g m 2*5 = 10 ph n t ng ng v i 10 ô vuông g m hai dòng và 5 c t t ầ ử ươ ứ ộ đánh ả ồ ớ ồ

0. s t ố ừ

trong m ng 1.3. Làm vi c v i các ph n t ệ ớ ầ ử ả

Sau khi khai báo, b n có th s d ng m ng. Vi c truy c p vào m t ph n t ể ử ụ ầ ử ủ ả c a m ng ệ ạ ả ậ ộ

nh tên m ng và ch s c a m ng đ t trong ngo c đ n, ch s là s nguyên ặ ỉ ố ủ ỉ ố ả ả ặ ờ ơ ố , là bi nế

nguyên hay bi u th c có giá tr . Đ duy t qua t t c các ph n t trong m ng, dùng vòng ứ ể ể ệ ị ấ ả ầ ử ả

l p For…Next. Ví d : ụ ặ

Biên so n: Ph m Đ c L p - 2 - Add: cnt-44-dh, ứ ạ ạ ậ VIMARU

H ng d n l p trình VB.NET ẫ ậ ướ ươ ậ ng 11: S d ng m ng và t p ử ụ ả Ch h pợ

employee(3) = "Thanh Van"

Phát bi u trên gán cho ph n t i ô th 4) tên là “Thanh Van”. ầ ử ể có ch s th 3 (t ỉ ố ứ ạ ứ

ScoreBoard(0, 2) = 12

Phát bi u trên gán cho ph n t dòng 0, c t 2 giá tr là 12. ầ ử ở ể ộ ị

1.4. T o và s d ng m ng có kích th c c đ nh ử ụ ả ạ ướ ố ị

Bây gi ta t o ví d nhietdo đ ghi l ờ ụ MyFixedArray s d ng m ng m t chi u có tên ử ụ ề ạ ả ộ ể ạ i

t đ cao th p hàng ngày trong tu n. M ng này đ c khai báo đ u form và giá tr nhi ị ệ ộ ấ ầ ả ượ ở ầ

đ c gán giá tr b ng hàm ượ ị ằ ủ InputBox nh vòng l p For…Next. Toàn b n i dung c a ộ ộ ặ ờ

m ng sau đó l i vào m t textbox cũng nh vòng l p For…Next. ả i đ ạ ượ c hi n th l ể ị ạ ặ ộ ờ

Thi t k giao di n: ế ế ệ

i pháp và thêm vào m t d án có cùng tên là MyFixedArray. Thi T o m i m t gi ớ ạ ộ ả ộ ự t kế ế

giao di n nh hình: ư ệ

Trong đó: nút button1 có text là “Đi n nhi t đ ”, button2 là “Hi n th nhi t đ ”, button3 ề ệ ộ ể ị ệ ộ

là “Thoát”.

Vi t mã: ế

Tr c h t ta khai báo m ng nhietdo ngay d i dòng ướ ế ả ở ướ ư

Public Class Form1 nh sau:

Dim nhietdo(6) As Single

Khai báo nh th này nghĩa là t ư ế ấ ả ả t c các th t c, các hàm đ u có th s d ng m ng ể ử ụ ủ ụ ề

này.

Biên so n: Ph m Đ c L p - 3 - Add: cnt-44-dh, ứ ạ ạ ậ VIMARU

H ng d n l p trình VB.NET ẫ ậ ướ ươ ậ ng 11: S d ng m ng và t p ử ụ ả Ch h pợ

Ti p theo ta t o ra s ki n nh p vào các giá tr nhi t đ trong tu n b ng cách t o th ự ệ ế ạ ậ ị ệ ộ ầ ằ ạ ủ

ư ậ t c ụ Button1_Click và nh p mã nh sau:

ộ ủ

Private Sub Button1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim Prompt, tieude As String Dim i As Short Prompt = "Đi n vào nhi t đ c a ngày." For i = 0 To UBound(nhietdo) tieude = "Ngày " & (i + 1) nhietdo(i) = CInt(InputBox(Prompt, tieude)) Next End Sub

Trong đó, hàm Ubound(nhietdo) là hàm l y v ch s trên c a m ng nhietdo, trong ỉ ố ủ ề ấ ả

tr ng h p này là 6. ườ ợ

Sau đó ta cho hi n th các giá tr nhi t đ trong b y ngày trong tu n cũng nh giá tr ể ị ị ệ ộ ư ả ầ ị

nhi t đ trung bình b ng th t c i dùng click vào nút “Hi n th ệ ộ ằ ườ ể ị ủ ụ Button2_Click khi ng

nhi t đ ” nh sau: ệ ộ ư

ộ ủ

Private Sub Button2_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim ketqua As String Dim i As Short Dim tong As Single = 0 ketqua = "Nhi t đ c a tu n: "

& vbCrLf & vbCrLf

For i = 0 To UBound(nhietdo) ketqua = ketqua & "Ngày " & (i + 1) & _ vbTab & nhietdo(i) & vbCrLf tong = tong + nhietdo(i) Next

& _

ketqua = ketqua & vbCrLf & _ "Nhi t đ trung bình: " Format(tong / 7, "0.0")

TextBox1.Text = ketqua End Sub

Th t c này l i s d ng vòng l p For…Next đ duy t l i các ph n t ủ ụ ạ ử ụ ệ ạ ể ặ ầ ử trong m ng sau ả

khi đã đ c gán giá tr th t c button1_Click. ượ ị ở ủ ụ Bi n ế ketqua đ ượ ỗ c dùng đ làm chu i ể

k t xu t g p các giá tr ph n t ế ấ ộ ầ ử ả m ng. Sau m i l n g p ta s d ng h ng s ộ ử ụ ỗ ầ ố vbCrLf để ằ ị

khi n d u ng t dòng và d u v đ u dòng (t ng đ ng v i hai hàm Chr(13) và ề ầ ế ấ ắ ấ ươ ươ ớ

vbTab đ phân cách gi a ph n ghi ngày và ghi nhi Chr(10)). H ng ằ ữ ể ầ t đ . ệ ộ

B n t o th th c Button3_Click và nh p phát bi u End đ k t thúc ch ng trình. ủ ụ ạ ạ ể ế ể ậ ươ

ng trình: Ch y ch ạ ươ

B n ch y ch t đ 7 ngày r i cho hi n th giá tr đó lên ạ ạ ươ ng trình và nh p đ giá tr nhi ậ ủ ị ệ ộ ể ồ ị ị

xem sao.

Biên so n: Ph m Đ c L p - 4 - Add: cnt-44-dh, ứ ạ ạ ậ VIMARU

H ng d n l p trình VB.NET ẫ ậ ướ ươ ậ ng 11: S d ng m ng và t p ử ụ ả Ch h pợ

1.5. T o m ng đ ng ộ ạ ả

Vi c dùng m ng là r t thu n ti n. Tuy nhiên khi b n ch a bi t chính xác s ph n t ư ệ ệ ả ấ ậ ạ ế ầ ử ố

i dùng nh p vào bao nhiêu c a m ng là bao nhiêu thì sao? Ví d khi b n mu n đ ng ủ ụ ể ả ạ ố ườ ậ

nhi ệ ộ t đ tùy thích, nh p càng nhi u thì đ chính xác càng cao. ề ậ ộ

VB gi Kích th ả i quy t vi c này b ng m ng đ ng. ằ ế ệ ả ộ ướ c m ng đ ng ch đ ộ ỉ ượ ả c ch đ nh khi ị ỉ

ch ng trình th c thi ch không đ nh trong lúc vi t mã. Vi c khai báo tr c kích th ươ ự ứ ị ế ệ ướ ướ c

m ng là không c n thi ả ầ ế t nh ng cũng c n dành ch tr ầ ỗ ướ ư c cho m ng đó. ả

Các b ướ ạ c t o m ng đ ng: ả ộ

- Ch đ nh tên và ki u cho m ng khi thi t k form, ví d ị ể ả ế ế ụ Dim nhietdo() As

ỉ Single

- Thêm mã xác đ nh kích th c m ng khi ch ng trình th c thi. Ví d khi ị ướ ả ươ ự ụ

ch ươ ng trình ch y b n h i xem ng ạ ạ ỏ ườ i dùng mu n nh p bao nhiêu ngày ậ ố , ví d :ụ

Dim songay As Integer

songay = InputBox("Ban muon nhap bao nhieu ngay?", "Tao mang dong")

- Dùng bi n songay đ đ nh l i kích th c m ng (tr đi 1 vì m ng tính t 0). Ví ể ị ế ạ ướ ừ ả ả ừ

d ụ

If songay > 0 Then ReDim nhietdo(songay - 1)

- Ti p theo ta dùng hàm Ubound(nhietdo) đ xác đ nh s ph n t c a m ng. ầ ử ủ ế ể ả ố ị

Bây gi chúng ta s làm l ờ ẽ ạ i ví d trên s d ng m ng đ ử ụ ụ ả ng:ộ

- Tr c h t, b n khai báo l i m ng đ ng và khai báo bi n songay ch a s ngày ướ ế ạ ạ ứ ố ế ả ộ

ng i dòng khai báo l p form1: ườ i dùng mu n nh p b ng đo n mã ngay d ằ ậ ạ ố ướ ớ

Dim nhietdo() As Single Dim songay As Integer

- Sau đó s a l i mã c a th t c Button1_Click nh sau: ử ạ ủ ụ ủ ư

Dim Prompt, tieude As String

ộ ủ

Dim i As Short Prompt = "Đi n vào nhi t đ c a ngày."

'Nhap so ngay muon ghi nhiet do songay = InputBox("Ban muon nhap bao nhieu ngay?", "Tao mang dong") If songay > 0 Then ReDim nhietdo(songay - 1)

For i = 0 To UBound(nhietdo) tieude = "Ngày " & (i + 1) nhietdo(i) = CInt(InputBox(Prompt, tieude))

Next

- Ti p theo thay s 7 trong th t c Button2_Click b ng bi n ủ ụ ế songay: ế ằ ố

ketqua = ketqua & vbCrLf & _ & _

"Nhi t đ trung bình: "

Biên so n: Ph m Đ c L p - 5 - Add: cnt-44-dh, ứ ạ ạ ậ VIMARU

H ng d n l p trình VB.NET ẫ ậ ướ ươ ậ ng 11: S d ng m ng và t p ử ụ ả Ch h pợ

Format(tong / songay, "0.0")

- B n có th dùng phát bi u i n u ng i dùng nh p vào ể Try…Catch đ b t l ể ắ ỗ ế ể ạ ườ ậ

m t s nh h n 0. ộ ố ỏ ơ

- Ch y l i ch ng trình và k t qu rõ ràng linh đ ng h n. ạ ạ ươ ế ả ộ ơ

2. D tr s n m ng b ng phát bi u REDIM ằ

ự ữ ẵ

Trong ví d trên, chúng ta đã đ nh l i kích th c b ng t khóa REDIM. i kích ụ ị ạ ướ ằ ừ Khi đ nh l ị ạ

th c nh th thì d li u cũ c a m ng s m t h t. Các ph n t s có giá tr là 0 hay ướ ẽ ấ ế ư ế ữ ệ ầ ử ẽ ủ ả ị

NULL.

Đ gi nguyên giá tr các ph n t cũ, b n có th dùng t khóa ể ữ ầ ử ị ể ạ ừ Preserve đi kèm phát bi uể

Redim. Ví d :ụ

If songay > 0 Then ReDim Preserve nhietdo(songay - 1)

V i phát bi u này thì các ph n t ầ ử ớ m i nh n giá tr là 0 hay NULL. ị ể ậ ớ

Ví d ta đ nh nghĩa m ng đ ng: Dim mangdong() As string ụ ả ộ ị

Sau đó tái đ nh nghĩa kích th c m ng là 200: ị ướ ả

Redim mangdong(200) As String

mangdong(200) = 200

Gi ta m r ng m ng này v i câu l nh Preserve: ờ ở ộ ệ ả ớ

Redim Preserve mangdong(300)

Khi đó giá tr c a ph n t ầ ử ị ủ ề mangdong(200) v n là 200. Vi c tái đ nh nghĩa m ng đa chi u ệ ẫ ả ị

cũng t ng t ươ . ự

3. Làm vi c v i t p h p đ i t

ng Collection

ệ ớ ậ ợ ố ượ

Ti p theo chúng ta s làm quen v i t p h p. T p h p cũng t ng t ớ ậ ế ẽ ậ ợ ợ ươ ự ư nh m ng nh ng ư ả

nó dùng đ x lý các ph n t ki u đ i t ng, có kh i l ng và kích th ể ử ầ ử ể ố ượ ố ượ ướ ớ ơ c l n h n.

Trong VB, các đi u khi n trong form cũng đ c nhóm thành t p h p g i là Controls ề ể ượ ậ ợ ọ

Collection – t p h p các đi u khi n. M i thành ph n đi u khi n khi b n cho vào form ề ể ề ể ậ ầ ạ ợ ỗ

c đ a vào trong t p h p đi u khi n. M i t p h p trong ch ng trình đ u có đ u đ ề ượ ỗ ậ ư ề ể ậ ợ ợ ươ ề

ậ m t tên riêng đ ta tham chi u đ n nó. B n có th dùng Object Browser đ xem các t p ể ế ế ể ể ạ ộ

ng c a h th ng, đi u này s đ c h ng d n c th trong ch ng 13. h p đ i t ợ ố ượ ủ ệ ố ẽ ượ ướ ề ẫ ụ ể ươ

ng trong t p h p 3.1. Tham chi u đ n đ i t ế ế ố ượ ậ ợ

B n có th tham chi u đ n m t đ i t ng trong t p h p thông qua ch s nh m ng. ộ ố ượ ể ế ế ạ ỉ ố ư ở ả ậ ợ

Trong VB thì các đ i t ng đ c đ a vào t p h p theo th t đ o ng ố ượ ượ ư ứ ự ả ậ ợ ượ ầ c, t c là ph n ứ

đ a vào s m nh t có ch s cao nh t và ng i, ph n t đ a vào sau cùng có ch t ử ư ỉ ố ấ ấ ớ c l ượ ạ ầ ử ư ỉ

Biên so n: Ph m Đ c L p - 6 - Add: cnt-44-dh, ứ ạ ạ ậ VIMARU

H ng d n l p trình VB.NET ẫ ậ ướ ươ ậ ng 11: S d ng m ng và t p ử ụ ả Ch h pợ

ng ph n t sau cùng s nh nh t là 0. Ví d , đ truy c p thu c tính Text c a đ i t ố ụ ể ố ượ ủ ấ ậ ỏ ộ ầ ử

trên form b n s d ng ch s th t là 0 nh sau: ạ ử ụ ỉ ố ứ ự ư

Controls(0).Text="ph n t cu i cùng"

khác trên form, b n s d ng ch s khác nh 0, 1,… Mu n truy c p các ph n t ậ ầ ử ố ạ ử ụ ỉ ố ư Ví dụ

ng trên form: vòng l p for…next sau s in ra tiêu đ c a 4 đ i t ẽ ề ủ ố ượ ặ

For i = 0 To 3

ketqua &= Controls(i).Text & vbCrLf Next

ấ ạ B n có th dùng vòng l p For…Next nh trên, tuy nhiên hi u qu và d hi u nh t b n ễ ể ư ể ệ ạ ặ ả

nên dùng vòng l p For Each…Next. ặ

3.2. S d ng vòng l p For Each…Next ặ ử ụ

M c dù b n có th tham chi u đ n các ph n t trong t p h p riêng l nh ng h u nh ầ ử ể ế ế ặ ạ ậ ợ ẻ ư ầ ư

các thao tác trên t p h p đ u duy t t ậ ệ ừ ầ đ u đ n cu i t p h p b ng vòng l p For Each… ằ ố ậ ề ế ặ ợ ợ

Next.

Các thao tác th di chuy n các đ i t ng, s p x p, đ i tên hay thay đ i l ườ ng g p là: ặ ố ượ ể ổ ạ i ế ắ ổ

kích th c c a toàn b t p h p. Cú pháp c a vòng l p nh sau: ướ ủ ộ ậ ủ ư ặ ợ

ng trong t p h p

Dim CtrlVar As Control ... For Each CtrlVar in controls ượ ệ Kh i l nh x lý đ i t Next

Ví d sau ta s d ng t p h p đ i t ng trên form, ví ử ụ ố ượ ụ ậ ợ ng Controls đ x lý các đ i t ể ử ố ượ

d ụ MyControlsCollection.

Tìm hi u ch ng trình: ể ươ

Ch ng trình có m t form chính. Trên form chính có ba nút nh n. Khi ng ươ ấ ộ ườ ấ i dùng nh n

ấ vào nút th nh t có text “Đ i tên” thì nút nh n này đ i text thành “Đã đ i tên”, nút nh n ấ ứ ấ ổ ổ ổ

th hai s di chuy n sang trái 40 đ n v và đ i text t “Di chuy n” thành “Đã di ứ ẽ ể ơ ổ ị ừ ể

chuy n”, nút nh n th ba có text “Đ ng yên” khi ng i dùng click vào đây thì nút này ứ ứ ể ấ ườ

đ i text thành “Đây đ ng yên” còn các nút khác di chuy n sang trái 40. ổ ứ ể

Thi t k form: ế ế

Form có giao di n nh sau: ư ệ

Biên so n: Ph m Đ c L p - 7 - Add: cnt-44-dh, ứ ạ ạ ậ VIMARU

H ng d n l p trình VB.NET ẫ ậ ướ ươ ậ ng 11: S d ng m ng và t p ử ụ ả Ch h pợ

Các b n t o m i m t gi ạ ạ ớ ộ ả i pháp và thêm vào m t d án có cùng tên ộ ự

MyControlsCollection r i thi t k form nh hình. ồ ế ế ư

Vi t mã: ế

Khai báo m t bi n ế Ctrl ngay d ộ ướ i dòng khai báo l p form1 nh sau: ớ ư

Dim ctrl As Control

T o th t c ạ ậ ấ ở ổ ộ ủ ụ btndoiten_Click và nh p mã nh sau ( đây nút nh n “Đ i tên” có thu c ư

tính Name là “btndoiten”):

Private Sub btndoiten_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btndoiten.Click For Each ctrl In Controls If ctrl.Name = "btndoiten" Then ctrl.Text = "Đã đ i tên" End If Next End Sub

Trong đo n mã trên ta s d ng vòng l p for each … next đ duy t qua các ph n t trong ử ụ ầ ử ể ệ ạ ặ

ữ t p h p các đi u khi n controls c a form. Ta cũng dùng phát bi u if đ l c ra nh ng ậ ể ọ ủ ề ể ể ợ

đi u khi n có thu c tính Name là “btndoiten” đ thao tác. ể ề ể ộ

T ng t b n t o th t c ươ ự ạ ạ ư ậ ấ ủ ụ btnmove_Click và nh p mã nh sau (nút nh n có text “Di

chuy n” có thu c tính Name là “btnmove”): ể ộ

Private Sub btnmove_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnmove.Click For Each ctrl In Controls If ctrl.Name = "btnmove" Then ctrl.Text = "Đã di chuy n"ể ctrl.Left = ctrl.Left + 40 End If

Biên so n: Ph m Đ c L p - 8 - Add: cnt-44-dh, ứ ậ ạ ạ VIMARU

H ng d n l p trình VB.NET ẫ ậ ướ ươ ậ ng 11: S d ng m ng và t p ử ụ ả Ch h pợ

Next End Sub

Th t c ủ ứ ủ ụ btnstatic_Click (btnstatic là tên c a nút “Đ ng yên”):

Private Sub btnstatic_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles btnstatic.Click For Each ctrl In Controls If ctrl.Name = "btnstatic" Then ctrl.Text = "Đây đ ng yên" Else ctrl.Left = ctrl.Left + 40 End If Next End Sub

ng trình: Ch y ch ạ ươ

Công vi c c a b n gi là n F5 đ ch y ch ng trình xem thành qu chúng ta đã làm. ệ ủ ạ ờ ể ạ ấ ươ ả

i dùng

4. T t o t p h p c a ng ự ạ ậ ợ ủ

ườ

VB cho phép t o m t t p h p c a ng ợ ủ ộ ậ ạ ườ i dùng đ l u tr t ể ư ữ ừ ể các thành ph n đi u khi n ầ ề

nh nút nh n, nhãn,… đ n các ki u đ n gi n nh chu i, s nguyên và các ki u c s ơ ở ư ư ế ể ể ả ấ ỗ ố ơ

khác t ng t nh m ng. ươ ự ư ả

Cú pháp khai báo:

Dim MyCollection As New Collection()

Trong đó MyCollection là tên c a t p h p, ph ủ ậ ợ ươ ậ ng th c New kh i t o vùng nh cho t p ở ạ ứ ớ

ng th c h p. Sau khi t o t p h p b n có th dùng ph ợ ợ ạ ậ ể ạ ươ ứ add đ thêm ph n t ầ ử ể ậ dl vào t p

t. h p. Đ duy t t p h p b n dùng vòng l p ợ ợ ệ ậ ặ for each next nh đã bi ư ể ạ ế

Trong ví d sau đây chúng ta s làm quen v i cách s d ng t p h p gi a danh sách các ớ ử ụ ữ ụ ẽ ậ ợ

đ c ng đ a ch Internet ỉ ị ượ ườ ạ i dùng s d ng g n đây nh t. Đ g i trình duy t IE, b n ấ ử ụ ể ọ ệ ầ

dùng ph ng th c ươ ứ System.Dyagnostics.Process.Start.

Tìm hi u ch ng trình: ể ươ

Ch ng trình có m t form chính g m m t textbox và hai nút nh n. Ô textbox cho phép ươ ấ ộ ộ ồ

nh p vào đ a ch website, nút nh n th nh t đ ng i dùng click vào duy t trang web có ấ ể ứ ậ ấ ị ỉ ườ ệ

t kê t t c nh ng trang web ng i dùng đ a ch ghi trong ô textbox, ô nh n th hai đ li ị ể ệ ứ ấ ỉ ấ ả ữ ườ

đã duy t b ng cách nh p đ a ch URL vào trong ô textbox. ệ ằ ậ ỉ ị

Thi t k giao di n: ế ế ệ

B n t o m t gi i pháp và thêm m t d án m i cùng tên là MyURLCollection và thi ạ ạ ộ ả ộ ự ớ t kế ế

giao di n nh sau: ư ệ

Biên so n: Ph m Đ c L p - 9 - Add: cnt-44-dh, ứ ạ ạ ậ VIMARU

H ng d n l p trình VB.NET ẫ ậ ướ ươ ậ ng 11: S d ng m ng và t p ử ụ ả Ch h pợ

Vi t mã: ế

Tr ướ ế c h t ta t o m t t p h p đ ch a các tên đ a ch web mà ng ể ứ ộ ậ ạ ợ ỉ ị ườ ằ i dùng đã thăm b ng

phát bi u sau đ t ngay d i dòng khai báo l p form1: ể ặ ướ ớ

Dim URLsVisited As New Collection()

t c các th t c trong form đ u có th truy c p đ n t p h p này. V i phát bi u này thì t ể ớ ấ ả ế ậ ủ ụ ể ề ậ ợ

Ti p theo t o th t c Button1_Click và nh p mã nh sau: ủ ụ ư ế ạ ậ

Private Sub Button1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Button1.Click URLsVisited.Add(TextBox1.Text) System.Diagnostics.Process.Start(TextBox1.Text) End Sub

Ph có n i dung là ươ ng th c Add(TextBox1.Text) s thêm vào t p h p m t ph n t ẽ ầ ử ứ ậ ợ ộ ộ

thu c tính text c a ô textbox1. ủ ộ

Sau đó ta cũng t o th t c Button2_Click cho phép ng i dùng li t kê t t c các trang ủ ụ ạ ườ ệ ấ ả

web đã duy t b i ng i dùng (các ph n t ệ ở ườ ầ ử trong t p h p): ậ ợ

Private Sub Button2_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim URLname, AllURLVisited As String For Each URLname In URLsVisited AllURLVisited = AllURLVisited & URLname & vbCrLf Next MsgBox(AllURLVisited, MsgBoxStyle.Information, _ "Websites Visited") End Sub

ng trình: Ch y ch ạ ươ

n F5 ch y ch Ấ ạ ươ ế ng trình. B n có th nh p các đ a ch khác đ a ch c a localhost n u ỉ ủ ể ậ ạ ị ỉ ị

b n có k t n i Internet. ế ố ạ

Biên so n: Ph m Đ c L p - 10 - Add: cnt-44-dh, ứ ạ ạ ậ VIMARU

H ng d n l p trình VB.NET ẫ ậ ướ ươ ậ ng 11: S d ng m ng và t p ử ụ ả Ch h pợ

5. T p h p COLLECTION trong ng d ng VBA

ậ ợ

B n có th vi ể ế ạ t các ng d ng macro cho ng d ng văn phòng b ng ngôn ng VBA ụ ụ ứ ữ ứ ằ

(Visual Basic for Application). Trong các ng d ng này thì t p h p đóng vai trò r t quan ứ ụ ấ ậ ợ

tr ngọ . Có th tham kh o thêm trong các quy n sách c a trang Appress.Com. ủ ể ể ả

6. T ng k t ch

ng

ế

ươ

ng nh ng gì đã h c. Làm b ng t ng k t ch ổ ế ả ươ ọ Đ ng th i dùng t p h p thay th cho bài ậ ữ ế ồ ờ ợ

ng tr c. t p v m ng trong ch ậ ề ả ươ ướ

Biên so n: Ph m Đ c L p - 11 - Add: cnt-44-dh, ứ ậ ạ ạ VIMARU