1. Trang chủ
  2. » Công Nghệ Thông Tin

Ebook kỹ thuật và thủ thuật lập trình visual basic 2010 2011 tập 2 phần 1 xuân thịnh, nam thuận

139 343 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 139
Dung lượng 2,65 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Kiểu dữ liệu Kiểu dữ liệu mà bạn sẽ lưu trữ trong mảng.. Bạn có th ể xác định một trong các kiểu dữ liệu cơ bản hoặr nếu bạn chưa chắc chắn kiểu dữ liệu nào sẽ dược lưu trữ trong m ảng h

Trang 1

Th.S: XUÂN THỊNH - NAM THUẬN

nhóm Un học thực dụng

Kỹ thuật và thủ thuật

lập trình VISUAL BASIC 2010 - 2011

các trường Cao Đẳng và Đ ại Học

♦ M icrosoít V isuaJ B asic 2010-2011 là b ả n n âiig cấp và cải liế n qxian trọ n g ciia ngôn n g ữ lậ p tr in h lâ ê m trìn h

b iê n d ịc h V lsu al B asic p h o b iế n , m ộ t công Iighệ điíỢc

r ắ t n h iề u các n h à lậ p tr ìn li Id iắ p th ế giớ i tin cậy sử diuig

♦ V ớ i cách bố cụ c c h ặ t c h ẽ th e o từ n g c h ủ đ ề chitơng và

rá t Iihiều bài tập thực Ì i ằ i ử ì từng bước và chương trùửi

m ăii, b a n s ẽ n h a n h chóĩig học đ ư ợ c c á c h tạ o các ííng dụncị V isuai Basic

♦ C ác tín h n ăn g m ới n h á t c ủ a Visi.ial B asic s ẽ giiip b ạ n

lậ p tr ìn h n h a n li hơn v à (ĩạ t h iệ u qiiâ cao hơn, n h ấ t là

k h i b ạ n tliíc h s ử d ụiig v à tíc h h ợ p th ô n g tlii từ các cơ

sở d ữ liệ u , các p h ư ơ n g tiệ n g iả i trí» các tra n g W eb và Wcb slte Hy vọng saii k h i học xong các birôc và t h ủ

th u ậ t lậ p tr ìn h tro n g q u y ể n s á c h n ày với V isiial B asic

New Edition

NHÀ XU ẤT BẢN HỒNG ĐỨC

Trang 2

L ỜI NỐI ĐẦU

M ic ro so ft V isu a l B a sic 8010-8011 l à b ả n n â n g c ấ p và cả i

t i ế n q u a ii tr ọ n g c ủ a n g ò n Iigữ lậ p t r ì n h ld.êm trìrứ i b iê n d ịc h

V is tia l B a sic p h ổ b iế n , m ộ t công n g h ệ đưỢc r ắ t lủ iiề u cá c n h à

lậ p tr ìiử i Ichắp ứ iế g iớ i ti n cậy s ử d ụ n g V is u a l B a sic 2 0 1 0 -

b ạ n s ẽ n h a n h c h ó n g h ọ c đư ợ c c á c h tạ o cá c ứ n g d tư ig V istial

B a sic 2 0 1 0 -2 0 1 1 c h ấ t lư ợ ng c h u y ê n n g h iệ p d à n h c h o h ệ đ iề u

h à n h W ữ id o w s và n h iề u b ộ t i ì n h d u y ệ t W eb C ác t í n h n ă n g

m ớ i n h ắ t c ủ a V is u a l B asic s ẽ g iú p b ạ n lậ p t r ù ứ i n h a iứ i h ơ n

v à đ ạ t h i ệ u q u ả cao h ơ n , n liấ t là k lii b ạ n tliic h s ử d ự n g v à

t í c h h ợ p th ô iig t i n t ừ cá c cơ sở d ữ liệ u , cá c p h ư ơ n g t i ệ n g iả i

t r í , cá c tr a n g W cb v à W cb sitc

H y v ọ n g s a u k h i h ọ c x o ĩ i g c á c b ư ớ c v à t h ủ t h u ậ t lậ p trìiứ i tro n g q u y ể n sá c li n à y với V isu a l B asic v à V is u a l S tu d io In te -

Trang 3

C h ư ơ n g 11: S ử d ụ n g c á c m ảng đ ể quản lý dữ liệu s ố và chuỗi

Lộp trình nâng coo và thiết kế

giao diện người dùng

Chương I I : S ử d ụ n g c á c m ả n g đ ể q u ả n lý

d ừ liệu s ố v à ch u ỗi ChtMĩig 12: Làm v iệ c v ớ i c á c tậ p hợp Chướng 13: K h ả o s ấ t c á c File T e x t v à x ử

lý ch u ỗi Chương 14: Q uản lý c á c ịo r tn Windou)s và

c á c cơntroỉ v à o th ờ i g ia n c h ạ y Chương 15: T bêm đ ồ h ọ a v à c á c h iệ u ứìig

h o ạ t h ìn h

Chươĩtg 16: Thừa k ế c á c f o r m v à tạ o c á c

c la s s c ơ s ở Chương 1 7: Làm v iệ c v ớ i c á c m á y in

Trang 4

K G iữ g ìn d ữ liệu m ảng kh i bạn tá i định chiềíi các m ảng.

a S ứ d ụ n g các phĩccmg tbữc Hort và Keverse trong class A rray d ể sáp

M ột phường p h áp n h a n h để quản lý dữ liệu tro n g các chương tr ìn h là lưu trữ và tru y tìm th ô n g tin tro n g các íĩle te x t phụ n h ư b ạ n sẽ th ấ y trong chương 13 Tuy n h iê n , phưcmg p háp to à n diện n h ấ t là lưu tr ữ v à tru y tìm

th ô n g tin b ằn g việc sử dụng các cơ sở dữ liệu v à b ạ n sẽ b ắ t đầu học cách tích hợp các chương tr ìn h với các cơ sd dữ liệu tro n g chương 18-

Trang 5

T ro n g chưcmg này, b ạ n sẽ học cách tổ chức các biến và th ô n g tin khác

th à n h các k h u n g chứa hữu dụng được gọi là các m ản g (array) B ạ n sẽ học cách hợp lý h ó a nhữ ng tác vụ quản lý dữ liệu b ằn g các m ản g có kích cỡ cố

đ ịn h v à các m ản g động và cách sử dụng các m ản g tro n g m ã để quản lý các lượng lớn dữ liệu B ạn sẽ học cách tá i đ ịn h chiều các m ản g v à gìn giữ dữ liệu tro n g các m ả n g k h i b ạ n quyết đ ịn h th a y đổi kích cỡ của m ộ t m ảng Để

m in h h ọ a các m ản g lớn có th ể xử lý n hư thê' nào, b ạ n sẽ sử dụng các phương thức S o rt v à R everse tro n g class A rray của M icrosoft NET F ram ew ork để

sắ p xếp lạ i th ứ tự m ột m ản g chứa các giá trị số nguyên 6 chữ sô’ ngầu nhiên Sau cùng, b ạ n sẽ học sử dụng control P ro g ressB ar để cho người dùng biết

m ộ t tiế n tr ì n h (liên quan đến m ảng hoặc nào dó) m ấ t th ờ i gian bao lâu

N hữ ng kỹ th u ậ t m à b ạ n sẽ học m ang lạ i m ột bước khởi đầu làm quen vững chắc với n h ữ n g kỹ th u ậ t lậ p trìn h cơ sở dữ liệu m à b ạn sẽ k h ai th á c sau đó tro n g sách

Làm việc với các mảng của các biến

Trong p h ầ n n ày b ạn sẽ học về các m ản g (array), m ột phương p h áp hữu dụng để lưu trữ h ầu n hư b ấ t kỳ lượng dữ liệu tro n g quá tr in h thực th i chương tr ìn h Các m ản g là m ột cơ cấu m ạ n h và được th ử ng h iệm qua thời

g ia n để lưu tr ữ các giá trị liên quan m ột cách logic tro n g m ột chương trìn h

N hữ ng người p h á t tr iể n r a BASIC, P ascal, c , và nhữ ng ngôn ngữ lập trìn h phổ b iế n k h á c k ế t n h ậ p các m ảng vào các p h iê n b ả n sớm n h ấ t của những

sả n p h ẩ m n à y để th a m chiếu đến m ột nhóm giá tr ị b ă n g việc sử dụng một

tê n và đ ể xử lý nhữ ng giá t n đó m ột cách riê n g lẻ hoặc chung

Các m ả n g có th ể giúp b ạn theo dõi m ột tậ p hợp nh ỏ các giá trị bằng

n h ữ n g cách k h ô n g thực tiễ n sử dụng những biến tru y ền thống Ví dụ, hãy tưởng tượng tạ o m ột b ản g điểm bóng chày chín lượt chơi tro n g m ộ t chương trìn h Đ ể lưu v à gọi lạ i các số điểm cho mỗi ỉược chơi của tr ậ n đấu, có th ể

b ạ n r ấ t m uôn tạo h ai nhóm gồm 9 biến {tổng cộng 18 biến) tro n g chương trìn h Có lẽ b ạ n sẽ đ ặ t cho chúng m ột tê n nào dó n h ư In n in g lH o m eT eam , InninglV istingT eam để làm cho chúng rõ ràn g L àm việc riên g lẻ với

n h ữ n g b iế n n à y đòi hỏi thờ i gian v à không gian đ án g k ể tro n g chưcmg trìn h T h ậ t m ay th a y , với Visual Basic, b ạn có th ể tổ chức các nhóm gồm các biến tương tự th à n h m ột m ản g có m ột tê n chung v à m ột index dễ sử dụng Ví dụ, b ạ n có th ể tạo m ột m ảng hai chiều (cao h a i đơn vị v à rộng 9 đơn vị) được đ ậ t tê n là Scoreboard để chứa các số điểm cho tr ậ n đấu bóng chày H ãy xem diều n ày làm việc n hư th ế nào

C h ư ớ n g 11: s ử dụng các m ảng để quản lý dữ liệu s ố và chuỗi 9

Trang 6

Tạo m ột mảng

B ạn tạ o hoặc k h a i báo các m ản g tro n g m â chương tr ìn h tương tự như

b ạn k h ai báo các biến dơn giản N hư thường lệ, vị trí m à b ạ n k h a i báo biến tro n g đó quyết đ ịn h nơi nó có th ể được sử dụng hoặc p h ạm vi (scope) của nó

^ N ếu bạn khai báo m ột m ảng m ột cách pttbỉíc trong m ộtpỉiblỉc, bạn có

t h ể s ủ dụng nó ờ bất cứ ncH nào trong proịecỉ.

K hi b ạ n k h ai báo m ột biến, b ạn thường bao h àm th ô n g tin được trìn h bày tro n g b ả n g 11.1 tro n g câu lện h k h ai báo

Bảng 11.1 Các phẩn tử cú pháp cho một phẩn khai báo m ảng

Các p h ầ n tử cú pháp Mô tà tro n g k h a i b áo m àng

trong chương trình Nói chung, các tên mảng tuân theo các quy tắc y như các tên biến, (Xem chương 5, để biết thêm thông tin về các biến)

Kiểu dữ liệu Kiểu dữ liệu mà bạn sẽ lưu trữ trong mảng

Trong hầu hết các trường hợp tấ t cả biến trong inộL mảug là cùng một kiểu Bạn có

th ể xác định một trong các kiểu dữ liệu cơ bản hoặr nếu bạn chưa chắc chắn kiểu dữ liệu nào sẽ dược lưu trữ trong m ảng hoặc bạn sẽ sử đụng nhiều kiểu hay không, bạn

có thể xác định kiểu Object

là một chiều (raột danh sách các giá trị) hoặc hai chiều (một bảng các giá trị), nhưng bạn

có thể xác định các chiều bổ sung nếu bạn làm việc với một mô hình toán học phức lạp chẳng hạn như một hình dạng ba chiều Số chiều trong một mảng đôi khi được gọi là hạng (rank) của mảng

Trang 7

C h ư ơ n g 1 1 : S ử d ụ n g c á c m ả n g đ ể q u ả n !ý d ữ liệ u s ố v à c h u ỗ i 11

• • • • • • •

Thủ thuật

Các mảng chứa một số phần tử được xác lập được gọi các mảng có kích cỡ cố

th ể m ở rộ n g tro n g quá trìn h thự c th i chương trìn h ) được gọi là các m ảng động (d y n a tĩiic array).

Khai báo m ột m ảng có kích cỡ cố định

Cú p h á p cơ b ản cho m ột m ảng có kích cỡ cô' đ ịn h public là

Dim ArrayNam e(Dim 1lndex, Dim2lndex, ) As DataType

Các đối sô’ sau đây quan trọng:

a D im là từ khóa khai báo mảng, s ứ dụng Public thay ỉ’ì n ếu bạn đặi

m ả n g trong m ột modnỉe.

m A rrayN am e là tên biển của mảng.

p h ầ n tứ trt'c cho 1.

a D im 2 ỉn d e x là giới hạn trên của chiền thứ h a i của m ảng, đ â y là số p h ầ n

tứ tn c cho 1 (Các chiều bổ sung có th ề được đìCa vào n ếu chúng được tách biệt bàng các ảấn phẩy).

M D ataType là m ột tì( khóa ticơng ứng t>ới kiểu d ũ liệu m à sẽ được đìCa vào

m ảng.

Ví dụ để k h a i báo m ột m ảng chuỗi m ột chiều có tê n là Em ployees có chồ

d à n h cho 10 tê n n h â n viên (dược đ án h số từ 0 đ ến 9), b ạn có th ể gõ nh ập dòng m ả sau đây tro n g m ột th ủ tục sự kiện;

Dim Employees{9) As string

T ro n g m ộ t module, p h ần k h ai báo m ảng này trô n g như sau:

Public Employees(9) As string

B ạn cùng có th ể xác đ ịn h m ột cách tường m inh giới h ạ n dưới của m ảng

là zero b ằ n g việc sử dụng m ã tro n g m ột th ủ tục sự kiện:

Dim Employees(0 To 9) As string

Cú p h á p "0 to 9" n ày được đưa vào để làm cho m ã dễ đọc hơn - những nểười m ới đ ế n chương tr ìn h của b ạn sẽ hiểu ngay r a rằ n g m ản g Employees

có 10 p h ầ n tử được đ á n h số từ 0 đến 9 Tuy n h iên , giới h ạ n dưới của m ảng

Trang 8

12 C h ư ơ n g 11: S ử d ụ n g các m ảng đ ể q u ả n lý dư liệ u s ố và chuỗi

p h ải luôn là zero B ạ n không th ể sử dụng cú p háp n à y để tạ o m ộ t giới h ạn dưới khác cho mảng-

Oành riêng bộ nhớ

K hi b ạn tạo m ột m ảng, Visual Basic d ành riên g chỗ trố n g cho nó tro n g

bộ nhớ Ả nh chụp m à n h ìn h sau đây m inh họa về k h á i n iệm m ả n g Employ- ees 10 p h ần tử được tổ chức n h ư th ế nào Các p h ầ n tử được đ á n h sô' từ 0 đến

9 th a y vì từ 1 đến 10 bdi vì các index m ảng luôn b ắ t đầu với 0

E m p lo y e e s

Đ ể k h a i báo m ột m ản g 2 chiều public có tê n là Scoreboard có chỗ trố n g

đ à n h cho hai h à n g và chín cột dữ Uệu số nguyên S h o rt, b ạn có th ể gõ n h ập

câu lệ n h sau đây tro n g m ột th ủ tục sự kiện hoặc ở p h ầ n trê n cùng của form:

Dim Scoreboard(1, 8) As Short

Sử dụng cú p háp n h ấ n m ạ n h giới h ạ n dưới (zero), b ạn cũng có th ể khai báo m ản g n h ư sau:

Dim Scoreboard(0 To 1, 0 To 8) As Short

Sau k h i b ạn k h a i báo m ột m ả n g hai chiều n hư vậy v à V isual B asic d àn h riê n g chỗ trố n g cho nó tro n g bộ nhớ, bạn có th ể sử dụng m ả n g tro n g chưcmg tr ìn h n h ư th ể nó là m ộ t b ản g các giá tr ị n h ư được m in h h ọ a tro n g

ả n h chụp m à n h ìn h dưới đây (Trong trường hợp n ày các p h ầ n tử m ảng được đ ánh sô' từ 0 đến 1 v à từ 0 dến 8)

Trang 9

C h ư ớ n g 11: S ử d ụ n g các m ảng để quản iý dừ liệ u s ố và ch u ỗ i 13

Để th a m chiếu đ ến m ột p h ần tử của m ột m ảng, b ạ n có th ể sử dụng tên

m ảng v à m ột in d ex m ản g được đ ặ t tro n g các dấu ngoặc đơn Index sẽ là m ột

số nguyên hoặc m ột biểu thức vốn tạo n ên m ột số nguyên, Ví dụ, index có

th ể là m ộ t b iế n số nguyên chẳng h ạ n như num , hoặc m ộ t biểu thức chẳng

h ạ n n h ư num -1 (B iến bộ đếm cho m ột vòng lặ p For N ex t thư ờng được sử dụng) Ví dụ, câu lệ n h sau đây gán giá trị "Leslie" vào p h ầ n tử có m ột index

là 5 tro n g ví dụ m ả n g Em ployees tro n g p h ần trưức:

Trang 10

Khai báo m ột m ảng và gán cho nó các giá t r ị ban đầu

C ũng có th ể k h a i báo m ột m ả n g và g án cho nó các g iá t r ị b a n đầu cùng

m ộ t lúc Cú p h á p câu lệ n h n à y đôi k h i tư ơ ng đương với n h ữ n g gì b ạ n đã học về việc g á n m ộ t g iá tr ị b an đầu vào m ộ t b iế n t ạ i th ờ i đ iể m k h a i báo

và hừu dụng k h i b ạ n b iế t trước m ộ t m ả n g c ầ n lớ n bao n h iê u v à n ộ i dung của nó là gì

Để tạo m ột m ản g b ằ n g cách này, bạn sử dụng n h ữ n g gì được gọi là một trực kiện m ản g (a rra y liberal) M ột trực kiện m ả n g gồm m ộ t d an h sá c h các giá tr ị dược p h â n cách b ằn g dấu ph ẩy được đ ặ t tro n g các dấu ngoặc (II) Khi

b ạ n sử dụng cú p h áp này, b ạn có th ể cung cấp kiểu m ả n g hoặc đ ể Visual

B asic sử dụng sự suy lu ậ n kiểu (type inference) đ ể quyết đ ịn h m ả n g n ê n có kiểu nào Ví dụ, để k h a i báo m ột m ảng m ột chiều có tê n là W a ite rs có kiểu

S trin g v à điền vào nó 7 tê n , b ạn sử dụng cú p h áp sau đây:

Dim W aiters() As strin g = {"Ben", "Sue", "Lee", "Kim-, "Pat", "Eve", “S a i")

Chú ý rằ n g kích cỡ của m ản g này được tự động q u y ết đ ịn h bởi Visual

B asic k h i W a ite rs được k h ai báo Ngoài ra , nếu b ạn k h ô n g biểu th ị m ột kiểu m ảng, V isual B asic sẽ sử dụng sự suy luận kiểu đ ể q u y ết đ ịn h đúng kiểu dữ liệu m ản g cho bạn Rõ ràng, nếu t ấ t cả dữ liệu có cùng m ột kiểu, trìn h biên dịch sẽ b iế t rõ kiểu dữ liệu nào n ê n được sử dụng cho m ảng

N hưng nếu có m ột hồn hợp các kiểu chẳng h ạ n n h ư n h iề u sô' nguyên, sô' có

độ ch ín h xác đơn v à sô' có độ ch ín h xác kép, M icrosoĩt V isual Studio sẽ chọn

m ột kiểu dữ liệu cho m ả n g đủ lớn để chứa t ấ t cả giá trị T ro n g n h iề u trường hợp, đây sẽ là kiểu dữ liệu Object bởi vì các biến (và các m ản g ) O bject được

th iế t k ế đậc b iệ t để chứa b ấ t kỳ kiểu dữ liệu

Câu lệ n h sau đây k h ai báo m ột m ảng có tê n là In v e s tm e n ts v à sử dụng

m ột trực k iệ n m ả n g d ể th ê m bốn giá trị vào m ả n g k h i nó được tạo Vì kiểu

Trang 11

C h ư d n g 1 1 : S ử d ụ n g c á c m ả n g đ ể q u ầ n lý d ữ liệ u s ổ v à c h u ò i _ 15

không được xác định, Visual B asic đ ánh giá các p h ầ n tử m ản g và quyết

đ ịn h rằ n g tro n g trường hợp này kiểu Object th ì th íc h hợp n h ấ t

Dim investm entsO = (5000, 20350, 499.99, 10000}

-Nếu xác lập Option Infer của trình biên dịch được xác lập sang On, kiểu Double sẽ đưỢc xác định khi câu lệnh ở ưên đưỢc thực thi, Xem chương 1 đ ể ^ ^ t r Ợ ^ ú p đ i ề u chỉnh xác lập nàỵ^

M ột m ả n g đ a chiều cũng có th ể được k h a i báo b ằ n g cách n ày m ặc dù bạn cần cẩn t h ậ n liệ t kê các ph ần tử tro n g th ứ tự phù hợp (nghĩa là h à n g 0 trước tiê n rồi đ ến h à n g 1 h àn g 2 ), Ví dụ, câu lệ n h sau đây k h a i báo m ột

m ản g h a i chiều có tê n là Rectangle v à gán bốn giá tr ị sa n g m ảng;

Dim Rectangle = ({10, 20}, {50, 60})

M ảng n à y có h a i h à n g và hai cột P h ầ n tử m ản g (0,0 - đó là h à n g 0 cột 0) b ây giờ chứa m ột giá trị 10 và p h ầ n tử (0,1 ' đó là h à n g 0 cột 1) bây giờ chứa m ột g iá trị 20 C ũng chú ý rằ n g có b a tậ p hợp dấu ngoặc được sử dụng tro n g p h ầ n k h a i báo; những dâu ngoặc n ày làm rõ các p h ần tử nào đang được gán v à giữ chúng tro n g th ứ tự phù hợp

Ả nh chụp m à n h ìn h dưới đây m in h họa V isual Studio Code E d ito r với ba

ví dụ về các p h ầ n k h ai báo trực k iệ n m ảng đâ được tr ìn h bày tro n g ph ần

này Chú ý rằ n g Code E d ito r à c h ế độ debugging (hoặc b re a k m ode) và cửa

sổ W atch x u ấ t h iệ n và h iể n th ị nội dung của m ản g W aiters (C h ế độ Debug- ging mode v à cửa sổ W atch đã được giới th iệu tro n g chưcmg 8) M ột vòng lặp For N ex t cũng đan g được sử dụng để h iể n th ị nội dung của m ảng

W aiters tro n g m ộ t hộp thông báo m ặc dù b ạ n k h ô n g th ể th ấ y k ế t quả của

vòng lập n à y tr ê n m à n h ìn h này Các vòng lặp F o r N e x t là n h ữ n g công

cụ h o àn h ảo để xử lý các m ảng n hư bạn sẽ th ấ y tro n g p h ầ n tiế p theo

Trang 12

1 6 C h ư ớ n g 11: s ử d ụ n g các m ảng đ ể quản lý d ữ liệ u s ố và chuôi

Tạo m ột m ảng có kích cỡ cố đ ịn h đ ể chứa các n h iệ t độ

B ài tậ p sau đây sử dụng m ột m ả n g m ột chiều có tê n là T em p e ra tu re s để ghi chép các n h iệ t độ cao h à n g ng ày cho m ột tu ầ n lễ 7 ngày Chương trìn h

m inh họa b ạ n có th ể sử dụng m ột m ản g n h ư t h ế nào để lưu tr ữ v à xử lý m ột nhóm các giá tr ị liên q uan tr ê n m ột form B iến m ản g T e m p e ra tu re s được

k h ai báo ở p h ầ n tr ê n cùng của form và sau đó các n h iệ t độ được g án sang

m ả n g b ằn g việc sử dụng m ộ t h à m InputBox và m ột vòng lặ p F or N ex t m à

b ạn đ ã học ở chương 7 Bộ đếm vòng lặp (loop counter) được sử dụng để

th a m chiếu m ỗi p h ầ n tử tro n g m ảng Sau đó các nội dung m ả n g được hiển

th ị tr ê n form b ằn g việc sử dụng m ộ t vòng lặ p For N ext v à m ộ t đô'i tượng hộp tex t N h iệ t độ cao tru n g b ìn h cũng được tín h v à được h iể n th ị

Các hàm UBound và LBound

Đ ể đ ơ n g iả n h ó a v iệ c làm v iệ c v ớ i m ả n g , c h ư ơ n g trìn h F ỉx e d A r r a y sử

đ ụ n g hàm U B o u n d đ ể k iể m tra tìm g iớ i h ạ n tré n h o ặ c giá trị in đ e x c a o n h ấ t

c ủ a m ả n g V ớ i U B o u n d b ạ n c ó th ể x ử lý c á c m ả n g m à th a m c h iế u đ ế n c á c

c â u lệ n h k h a i b á o đ ã đ ịn h n g h ĩa c h ín h x á c b a o n h iê u giá trị m à m ả n g sẽ

c h ứ a H à m L B o u n d c ó m ố i iiê n h ệ c h ặ t c h ẽ x á c n h ậ n g iá trị in d e x d ư ớ i

h o ặ c g iớ i h ạ n d ư ớ i c ủ a m ộ t m ả n g , c ũ n g c ó s ẵ n c h o bạn d ư ớ i d ạ n g m ộ t tính

n ă n g c ủ a c á c p h iê n b ả n irư ớ c đ ó c ủ a V is u a l B a s ic T u y n h iê n , b ở i v l bây

g iờ tấ t c ả m ả n g V is u a l B a s ic c ó m ộ t g iớ i h ạ n d ư ớ i là z e ro (0 ), h à m c h ỉ v iệ c trả v é m ộ t g iá trị là 0 C á c hàm U B o u n d v à L B o u n d c ó cú p h á p

L B o u n d (A rra y N a m e )

U B o u n d (A rra y N a m e )

T ro n g đ ó A rra y N a m e là tê n c ủ a m ộ t m ả n g đ ã đ ư ợ c khai b á o tro n g p ro je c t.

Trang 13

C h ư ớ n g 1 1 : S ử d ụ n g c á c m à n g đ ể q u ả n lý dữ liệ u số' v à c h u ỗ i _ 1 7

S ử đụng một mảng có kích cỡ c ố định

1 K hởi động V isuaỉ Studio, và tạo m ột project Visual Basic Windows

F o rm s A pplication mới có tê n là M y F ix e d A r r a y

2 Vẽ m ột đối tượng hộp te x t tr ê n form

3 Xác lập thuộc tín h M ultilìne của đối tượng T extB oxl sa n g T rue sao cho b ạ n có th ể đ ịn h lại kích cỡ đối tượng

4 Đ ịn h lại kích cỡ đô'i tượng hộp te x t sao cho nó lấ p đầy p h ầ n lớn form

5 Vẽ h ai đô'i tượng n ú t rộng trê n form bên dưới đô'i tượng hộp te x t được đ ịn h hướng cái này b ên cạnh cái kia

6 Xác lậ p các thuộc tín h sau đây cho form và các đô'i tượng của nó;

Đ ô i tưỢng T huộc tín h Xác lập

F o rm trô n g giống như form được m inh họa tro n g ả n h chụp m àn

h ìn h dưới đây:

P b ttd A rĩíy T e m p ỉ Ị ' o 1 l r? 1 9 ^ ^

Ertìei Tem;iỉ ỉ D iỉựạyTem ci” ]

7 T ro n g Solution Explorer, n h ấp n ú t View Code để h iể n th ị Code

E ditor,

8 Cuộn đến p h ầ n tr ê n cùng của m ã chương tr ìn h của form , và ngay bên dưới câu lệ n h Public C lass F o rm l, gõ n h ậ p p h ần k h a i báo m ảng sau đây:

Trang 14

1 8 C h ư ơ n g 11: s ử d ụ n g c á c m ả n g đ ể q u ả n lý d ữ liệ u s ố v à c h u ỗ i

Dim Teperatijres(0 To 6) As Single

Câu lệ n h n ày tạ o m ột m ản g có tê n là T em p e ra tu re s (có kiểu Single) chứa bảy p h ầ n tử dược đ án h số từ 0 đến 6 Bdi vì m ả n g đ ã được k h a i

báo ở p h ầ n tr ê n cùng của form, nó có sẵ n tro n g t ấ t cả th ủ tục sự k iệ n

Vòng lặ p For N ext sử dụng b iế n bộ đ ếm số nguyên s h o r t i là m ột index m ản g để tả i các n h iệ t dộ vào các p h ầ n tử m ả n g 0 d ến 6 T hay

vì sử dụng cú p h áp vòng lặ p F or được đơn g iả n hóa:

For i * 0 to 6

Để xử lý m ảng, m ột cú p h áp hơi phức tạ p được chọn đòi hỏi h àm ƯBound để đ ạ t được sự lin h h o ạt tro n g tưcmg lai Cấu trú c vòng lặp For:

For 1 a 0 To UBound(Temperatures)

Q uyết đ ịn h giới h ạ n trê n của m ảng bằng việc sử dụng cấu trú c Ubounđ

Kỹ th u ậ t này lin h h o ạ t h ơ n bởi vì nếu m ản g được m ở rộ n g hoặc được giảm sau đó, vòng lặp For tự động tự diều ch ỉn h s a n g kích cỡ m ảng mới

Để đ iề n các n h iệ t độ vào m ảng, th ủ tục sự k iệ n sử dụng m ộ t h àm InputB ox, để h iể n th ị ngày h iệ n h à n h b ằn g việc sử dụng bộ đếm vòng lặp For

11 H iển th ị lạ i form , v à sau đó n h ấ p đôi n ú t D isplay T em ps (Button2)

Trang 15

12 Gõ n h ậ p các câu lện h sau đây trong th ủ tục sự k iệ n Button2_Click;

Dim Result As string

Dim i As Short

Dim Total As Single = 0

Result = "High temperatures for the week:” & vbCrLí & v b C rư

Result = Result & vbCrLt & _

"Average temperature; “ & Format(Total / 7, “ 0.0")

T e xtB oxl.T ext = Result

C h ư ớ n g 11: S ử d ụ n g các m ảng để quản lý dữ liệu sô' v à chuỗi 19

T hủ tục sự kiện n ày sử dụng vòng lặp For N ext để xoay vòng theo chu k ỳ qua các p h ầ n tữ trong m ảng và nó th ê m m ỗi p h ầ n tữ tro n g

m ả n g vào m ột biến chuỗi có tê n là Resưlt được k h a i báo ở p h ầ n trê n cùng của th ủ tục sự kiện M ột scT chuỗi trực k iệ n , h ằ n g v à to á n tử

g hép chuỗi (&) đã được sử dụng để đệm và đ ịn h d ạn g chuồi b ằn g việc

sử dụng các ký tự tr ở về đầu dòng {vbCrLf), ký tự ta b (vbTab), và các tiê u đề ch ín h (heading).H ằng vbCrLf, được sử dụng ở đây lẩ n đầu tiê n chứa ký tự trở về d ầ u dòng v à ký tự chuyển dòng và là m ột cách hiệu quả để tạo các dòng mới H ằng vbTab của việc sử dụng ở đây

lầ n đầu tiê n để đ ặ t m ột sô' khoảng cách nào đó giữa các giá trị ngày

v à n h iệ t độ tro n g chuỗi Result ở cuối th ủ tục lưu trữ , m ộ t giá trị tru n g b ìn h cho các n h iệ t dộ được quyết đ ịn h và chuỗi sau cùng được

g á n vào thuộc tín h T ext của đô'i tượng hộp tex t, n h ư được m in h họa tro n g câu lệ n h này:

T e xtB oxl.T ext = Result

13 N h ấ p n ú t Save All trê n th a n h công cụ S ta n d a rd đ ể lưu project: Xác

Trang 16

14 N h ấp n ú t S ta r t D e b u g g in g trên th a n h công cụ S ta n d a rd đ ể chạy

chương trìn h

15 N h ấp n ú t E n t e r T e m p s , và khi được n h ắc bởi h à m InputB ox, gõ

n h ậ p 7 n h iệ t độ khác nhau

H ộp th o ạ i h à m InputBox trông như sau:

2 0 C h ư ờ n g 11: sử d ụ n(j các m ảng đ ể quản lý d ữ liệ u s ố v à chuỗi

Diyl

Eníet íhe dôy's \'I*QỲỈ lempeta^uie

1 0< í Canceỉ 1

16 Sau k h i b ạ n go n h ập các n h iệt độ, n h ấ p n ú t D i s p l a y T e m p s

Sử dụng m ảng, Visual Basic hiển th ị từng n h iệ t độ tro n g hộp te x t và

in m ột giá trị tru n g bình ỏ cuối M àn h ìn h trô n g tư ơ ng tự n h ư sau:

^ Enieí T cmps i 0 isplây T esTịs

17 N h ấp n ú t C lo s e trê n fortn để k ết th ú c chương trìn h

Visual B asic g iải quyết vấn dề này m ột cách hiệu quả b ằ n g m ột khung chứa co g iã n đặc b iệ t được gọi là một m ản g động (dynam ic array) Các

Trang 17

m ảng động được đ ịn h chiều vào thờ i gian chạy khi người dùng xác đ ịn h của

m ảng hoặc k h i logic m à b ạn th êm vào chương trìn h quyết đ ịn h m ột kích cỡ

m ảng dựa vào các điều kiện cụ thể Đ ịnh chiều cho m ộ t m ản g động đòi hỏi

m ột sô’ bước bởi vì m ặc dù kích cỡ của m ảng không được xác đ ịn h cho đến

kh i chương tr ìn h chạy, b ạn cần "giữ chỗ trước" cho m ản g vào thờ i gian

th iế t kế Đ ể tạo m ột m ản g động, b ạn làm theo n h ữ n g bước cơ b ả n sau đây:

1 Xác đ ịn h tê n v à kiểu của m ản g trong chương tr ìn h vào thờ i gian

th iế t kế, bỏ qua sô' p h ần tử tro n g mảng Ví dụ, để tạo m ột m ảng động có tê n là T em peratures, bạn gỗ nhập:

Dim Temperatures{) As Single

2 T h êm m â để quyết định số p h ầ n tử m à sẽ n ằ m tro n g m ản g vào thời

g ia n chạy B ạn có th ể nhắc nhở người dùng b ằ n g việc sử dụng m ột

h à m InputB ox hoặc m ột đối tượng hộp text, hoặc b ạ n có th ể tín h các

n h u cầu lưu tr ữ của chương trìn h bằng việc sử dụng các thuộc tín h hoặc logic khác Ví dụ, các câu lệnh sau đây n h ậ n được kích cỡ m ảng

từ người dùng và gán nó sa n g biến Days có kiểu Short:

Dim Days As Short

Days = lnputBox("How many days?'', "Create Array")

3 Sử d ụng biến tro n g m ột câu lệ n h ReDim để d ịn h chiều cho m ảng, trừ

đi 1 bởi vì các m ảng dựa vào zero Ví dụ, câu lệ n h sau đây xác lập kích cỡ của m ản g T em peratures vào thời gian chạy b ằn g việc sử dụng biến Days:

ReDim Temperatures{Days - 1)

C h ư ớ n g 11: Sử d ụ n g c á c m ảng để quản lý dữ liệu sổ v à chuỗi 21_

Q U A N T R Ọ N G

Vổí ReDim, bọn khỗng nễn cấ thay đổi (ố chiều irong mỗÍ mâng mâ bqn đđ khai báo irước dó

4 Sử dụng h àm UBound dể quyết định giới h ạ n tr ê n m ột vòng lặp For N ext v à xử lý các p h ầ n tử m ảng k h i cần th iế t n hư được m inh

h ọ a ở đây:

For i = 0 to Ubound(Temperatures)

Temperatures(i) = lnputBox(Prompt, Title) Next

Trang 18

T rong bài tậ p tiế p th eo b ạn sẽ sử dụng các bước n à y để ch ỉn h sửa chương tr ìn h Fixed A rray sao cho nó có th ể xử lý b ấ t kỳ số n h iệ t độ

Dim Days As Integer

B iến số nguyên D ays sẽ được sử dụng để n h ậ n dữ liệu đầu vào từ người dùng v à để đ ịn h chiều cho m ản g động vào th ờ i gian chạy

5 C uộn xuô'ng tr o n g Code E d ito r đ ể h iể n t h ị th ủ tụ c sự k iệ n

B u tto n l_ C lick và ch ỉn h sửa m ã sao cho nó trô n g giống n h ư sau đây, (Các p h ầ n tử th a y đổi hoặc dược th ê m vào sẽ được tô bóng)

Dim Prompt, Title As strin g

Dim i As Short

Prom pt = "E n te rth e day’s high temperature."

Days = lnputBox("How many days?” , “ Create Array” )

lí Days > 0 Then ReDim Temperatures(Days - 1 )

For i = 0 To UBoiJnd{Temperatures)

Title = “ Day “ & (i + 1) Temperatures(i) = lnpưtBox(Prompt, Title) Next

D òng th ứ tư v à dòng th ứ năm nhắc nhở người dùng về số n h iệ t độ

m à người dùng m uôn lưu v à sau đó dữ liệu đầu vào của người dùng được sử d ụng để đ ịn h chiều cho m ột m ản g động Câu trúc quyết định

2 2 C h ư d n g 11; S ũ dụng c á c m ả ng để quàn íý dO liệ u sò' và chuỗi

Trang 19

If T hen dược sử dụng để xác n h ận rằ n g số ngày lớn hơn zero (Đ ịnh chiều tro n g m ột m ảng với m ột số nhỏ h ơ n zero hoặc bằn g zero

sẽ tạ o ra m ột lỗi) Bởi vì index 0 của m ản g được sử dụng để lưu trữ

n h iệ t dộ cho ngày đầu tiên , biến Days được giảm xuống 1 k h i định chiều cho m ảng B iến Days không được cần đến để quyết đ ịn h giới

h ạ n tr ê n của vòng lặ p For N ext - n h ư tro n g ví dụ trước, h àm Ubound được sử dụng th a y vào đó

6 C uộn xuống tr o n g Code E d ito r đ ể h iể n t h ị th ủ tụ c sự k iệ n Button2_Click C hỉnh sửa m ã sao -cho nó trô n g giống n h ư thường

tr ìn h dưới đây (Các p h ần tử được th ay đổi sẽ được tô bóng)

Dim Result As string

Dim i As Short

Dim ĩo ta l As Single = 0

Result = “ High temperatures:” & vbCrLí & vbCrLí

For i = 0 To UBound(Temperatures)

Temperatures(i) & vbCrLí Total = Total + Temperatures(i) Next

Result = Resiilt & vbCrLí & _

“ Average temperature: “ & Format{Total / Days, “ 0.0” )

T e x tB o x U e x t a Result

B iến Days th a y th ế số 7 tro n g phép tín h n h iệ t độ tru n g b ìn h ở cuối

th ủ tục sự kiện Tiêu đề "High tem peratures" m à sẽ h iể n th ị tro n g hộp te x t cũng đã được biên tập

7 H iển th ị form

8 T hay đổi thuộc tín h T ext của F o rm l th à n h "Dynam ic Array",

9 Lưu các th a y đổi sang đĩa

Trang 20

b ìn h của chúng M àn h ìn h trô n g tưcmg tự n h ư ả n h chụp m à n h ìn h dưới đây;

« ? D y n a m i e A r r a y ' '

Ki^ ỉempeíâỉưes

O ò ọ \ 72 74

0 ^ 3 71 69

D ^ 5 70

A v e t â g e ( e m p 6 t d t u e 71 2

I Dgpặ^Tgmp!

15 N h ấp n ú t C lo s e trê n form để k ế t thúc chương trìn h

B ạn đ ã thực h iệ n sử dụng h a i loại m ản g phổ b iế n tro n g lậ p trìn h Visual Basic K hi b ạn v iết các chương tr ìn h riê n g của m ìn h chảng bao lâu b ạn sẽ sử dụng các m ản g lớn hơn n h iều n h ư n g n h ữ n g khái niệm th ì y n h ư n h au và b ạn sẽ ngạc n h iê n k h i th â y V isual B asic có

th ể h o àn th à n h các p hép tín h liên quan đến m ả n g n h a n h n h ư th ế nào

Giữ gìn nội dung mảng bằng việc sử dụng ReDim Pre- serve

T rong bài tậ p trước, bạn đã sử dụng câu lệ n h ReDim đ ể xác đ ịn h kích cỡ của m ột m ản g động vào thờ i gian chạy Tuy n h iên , m ộ t k h u y ế t điểm tiềm

Trang 21

ẩ n k ế t hợp với câu lệ n h ReDim là nếu bạn tá i đ ịn h chiều tro n g m ột m ảng

đ ã có dữ liệu tro n g đó, tấ t cả dữ liệu h iệ n có bị m ấ t không th ể tru y tìm lại được Sau k h i câu lệ n h ReDim được thực th i, nội đung của m ột m ản g động được xác lập sang giá trị m ặc định của chúng, ch ẳ n g h ạ n như zero hoặc null P hụ thuộc vào quan điểm của bạn, dây có th ể được xem là m ột tín h

n ăn g hữu dụng để làm rỗng nội dung của các m ản g hoặc nó có th ể là một tín h n ă n g gây khó chịu đòi hỏi m ột giải pháp

T h ậ t m ay th ay , Visual B asic cung cấp từ k hóa P re serv e m à b ạn có th ể sử dụng để giừ g ìn dữ liệu tro n g m ộ t m ảng k h i b ạ n th a y đổi các chiều của nó

Cú p háp cho từ khóa P reserv e n hư sau:

ReDim Preserve Arrayname{Dim1Elements, Dim2Elements, .)

T rong m ộ t câu lệnh ReDim như vậy, m ản g p h ải tiế p tục có cùng số chiều

v à chứa cùng m ột kiểu dữ liệu Ngoài ra, có m ộ t diều k iệ n là b ạ n chỉ có th ể định lạ i k íc h cỡ chiều m ảng sau cùng Ví dụ, nếu m ản g có h a i hoặc nhiều chiều, b ạn có th ể th a y đổi kích cỡ của chỉ chiều cuối cùng và vẫn giữ p n nội dung của m ảng (Các m ảng m ột chiều tự động vượt qua cuộc te s t này, do đó

b ạn có th ể tự do mở rộng kích cỡ của m ản g động b ằn g cách sử đụng từ khóa Preserve)

Các ví dụ sau đây m inh h ọ a cách b ạn có th ể sử dụng P re serv e để tà n g kích cỡ của chiều sau cùng tro n g m ột m ản g động m à k h ô n g xóa b ấ t kỳ dữ liệu h iệ n có chứa tro n g mảng

Nếu lúc đầu b ạn đã kh ai báo m ột m ảng chuỗi dộng có tê n là Philoso-

p h ers b ằ n g việc sử dụng cú pháp;

Dim PtìilosophersO As strin g

B ạn có th ể tá i định chiều cho m ảng và th ê m dữ liệu vào nó b ằng việc sử dụng m ã tương tự hư sau:

ReDim Philosophers(200)

Philosophers(200) = 'David P robsr

B ạn có th ể mở rộng kích cỡ của m ảng P hilosophers th à n h 301 p h ầ n tử (0-300), và giữ gìn nội dung h iệ n có b ằng việc sử dụng cú p h áp sau đây:

DeDim Preserve Philosophers(300)

C h ư ơ n g 11: S ử dụng c á c m ảng dể quản lý đữ liệu số v à chuỗi 25

Trang 22

2 6 _ C h ư d n g 1 1 : S ử d ụ n g cá c m ả n g đ ể q u ằ n lý d ữ liệ u s6' và c h u ỗ i

Sử dụng ReDim cho các mảng ba chiều

M ột ví dụ phức tạ p hơn đòi hỏi một m ản g b a chiều sử dụng m ột cú p háp tương tự H ãy tưởng tượng rằ n g bạn muôn sử dụng m ột m ả n g ba chiều, có

độ ch ín h xác đơn, dấu động có tê n là myCube tro n g chương trìn h B ạn có

th ể k h ai báo m ản g m yCube b ằng việc sử dụng cú p h á p sau đây:

Dim myCube( ) As Single

Sau đó b ạ n có th ể tá i đ ịn h chiều cho m ản g và th ê m dữ liệu vào nó b ằng việc sử dụng m ã sau đây:

ReDim myCube(25, 25, 25)

myCube{10, 1 , 1 ) = 150.46

m à sau đó b ạn có th ể mở rộng kích cỡ của chiều th ứ b a tro n g m ảng (tro n g k h i giũ gìn nội dung cùa m ảng) b ằng việc sử dụng cú p háp sau đây:

ReDim Preserve myCube(25, 25, 50)

Tuy n h iê n , tro n g ví dụ này, chỉ chiều th ứ b a mới có th ể dược mở rộng - chiều th ứ n h ấ t và chiều th ứ hai không th ể được th a y đổi nếu b ạn tá i định chiều cho m ản g b ằn g việc sử dụng từ khóa P reserv e Việc cố th a y đổi kích

cỡ của chiều th ứ n h ấ t hoặc chiều thứ hai tro n g ví dụ này sẽ tạo ra m ột lỗi run-tim e k h i câu lệ n h R eD im Preserve được thực th i

T hử n g h iệm m ộ t ch ú t với ReDim P reserve, v à b ạ n th ấ y b ạn có th ể sử đụng nó n h ư th ế nào đ ể là m cho các m ảng riê n g của b ạ n tr ở n ên lin h h o ạt

v à m ạ n h mẽ

dụng các phương thức trọng class Array

T rong các p h ầ n trước, b ạn đã học về việc sử dụng các m ản g để lưu trữ

th ô n g tin tro n g quá tr ìn h thực th i chương trìn h T ro n g p h ầ n này, b ạn sẽ học về việc sử dụng các phương thức tro n g class A rray của NET Fram e- work, m à b ạ n có th ể sử dụng để n h an h chóng p h â n loại, tìm kiếm và đảo ngược các p h ầ n tử tro n g m ộ t m ảng cũng n hư thực h iệ n n h ữ n g chức n àng khác Chương tr ìn h m ẫu được tạo m inh họa n h ữ n g tín h n ă n g này làm việc đặc b iệ t tố t n hư t h ế nào với các m ảng Tất lớn B ạn cũng sẽ học cách sử dụng control ProgressB ar

Class A rray

K hi b ạ n tạ o các m ản g tro n g Visual Basic, b ạ n sử dụng m ột class cơ sở được đ ịn h n g h ĩa bởi V isual B asic để thực th i các m ả n g b ên tro n g các chương

Trang 23

tr ìn h do người dùng tạo ra Class A rray này cũng cung cấp m ột bộ sưu tập các phương thức m à b ạn có th ể sử đụng để xử lý các m ả n g tro n g k h i chúng đang h o ạ t động tro n g các chương trìn h Các phương thức hữu dụng n h ấ t bao gồm A rray.Sort, A rray.Pind, A rray.Reserve, A rray.Copy, v à A rray.C lear

B ạn có th ể đ ịn h vị những phương thức thú vị k h á c b ằn g việc th ử nghiệm với class A rray tro n g Code E ditor {băng cách sử d ụng M icrosoít IntelliS ense)

v à b ằ n g cách th a m k hảo tà i liệu Visual Studio H elp Các phương thức class

A rray h o ạ t động giống nhiều n h ư các phương thức NET F ram ew ork m à

b ạ n đ ã sử dụng tro n g sách này; n g h ĩa là chúng được gọi th eo tê n và (trong trường hợp này) đòi hỏi m ột tê n m ảng hợp lệ dưới d ạng m ột đối số Ví dụ,

để p h â n loại m ột m ản g các n h iệ t độ (chẳng h ạ n n h ư m ảng T em peratures

m à b ạ n đ ã tạo tro n g bài tậ p vừa rồi), bạn sử dụng cú p h áp sau đây:

Array.Short(Temperatures)

B ạn thực h iệ n m ột lện h gọi n h ư vậy sau k h i m ả n g T em p eratu res đã được k h a i b áo và được điền vào dữ liệu tro n g chương trìn h K hi Visual Basic thực th i phương thức A rray.Sort, nó tạo m ột vị tr í lưu trữ tạ m th ờ i cho

m ản g tro n g bộ n h ớ v à sử dụng m ột thường tr ìn h p h â n loại đ ể tá i tể chức

m ản g th eo th ứ tự b ảng chữ cái Sau k h i việc p h â n loại h o àn tấ t, m ản g gốc được xáo trộ n th eo th ứ tự tă n g d ần với giá tr ị nh ỏ n h ấ t ở vị tr í m ả n g 0 và giá tr ị lớn n h ấ t ở vị tr í m ảng sau cùng Với ví dụ T em p e ra tu res ở trê n , việc

p h â n loại tạ o r a m ột m ảng các n h iệ t dộ h àn g ng ày được tổ chức từ m á t n h ấ t đến nóng n h ất

T ro n g b à i tậ p sau đây b ạn sẽ th ấ y các phư ơng th ứ c A rra y S o rt và

A rray.R everse có th ể được sử dụng n hư th ế nào đ ề sá p xếp lại th ứ tự n h a n h chóng m ột m ản g lớn chứa các sô' 6 chữ số được chọn ngẫu n h iê n giữa 0 và 1,000,000 B ạn cũng sẽ th ử nghiệm với control P rogressB ar, control này cung cấp sự p h ả n hồi trực quan hữu dụng cho người dùng tro n g quá trìn h

p h â n loại dài

S ử dụng các phương thức Array cho một m ảng có 3,000 phần tử

1 T rê n m enu File, n hấp o p e n Project v à sau đó m ở project A rray

C lass S orts được đ ặ t tro n g folder C :\V b lO s b s \C h a p ll

2 H iển th ị form nếu nó chưa xuất hiện

M àn h ìn h trô n g tương tự như h ìn h m inh họa dưới đây:

C h ư ơ n g 11: Sử dụng c á c m ảng đ ể quản lý dữ liệu s ố và ch u ỗ i 2 7

Trang 24

F orm n ày trô n g tưcmg tự như các project trước tro n g chương n ày và

có m ộ t hộp te s t để h iể n th ị dữ liệu m ảng Tuy n h iê n , nó cũng chứa

b a n ú t đ ể xử lý các m ản g lớn và m ột đối tượng p ro g ress b a r (th a n h tiế n độ cho người dùng sự p h ả n hồi tro n g các th a o tá c m ả n g dài hơn) Sự p h ản hồi trực quan hữu dụng k h i các p h ép tín h xảy ra lâu hơn m ột v ài giây để h o àn th à n h và nếu bạn sử đụng m ã n à y để p h ân loại m ộ t m ản g có 3,000 p h ần tử m ảng, th ì chắc ch ắn sẽ hơi chậm

m ột chút

3 N h ấp th a n h tiế n độ trê n form

Đối tượng P ro g re ss B a rl được chọn trê n form và được liệ t kê trê n cửa

sổ P ro p erties Đối tượng progress b a r được tạ o b ằ n g việc sử dụng control P ro g rcssB ar trê n ta b Common C ontrols tro n g ToolBox Một

th a n h tiế n dộ được th iế t k ế để h iể n th ị tiế n độ của m ộ t sự tín h to án

b ằn g việc h iể n th ị m ột số h ìn h chữ n h ậ t m àu th íc h hợp dược sắp xếp tro n g m ột th a n h tiế n dộ n ằm ngang K hi việc tín h to á n h o àn t ấ t

th a n h chứa đầy các h ìn h chữ n h ậ t (Trong W indows 7 v à W indows

V ista, m ột hiệu ứng làm n h ẫ n được áp dụng sao cho th a n h tiế n độ

d ần dần chứa đầy m ột dãy m àu đồng n h ấ t - m ột hiệu ứng đặc b iệt

h ấ p dần) Có lẽ b ạ n đã th ấ y th a n h tiế n độ n h iề u lầ n tro n g k h i bạn đow nload các ííle hoặc cài đ ặ t các chương tr ìn h tro n g W indows Bây giờ b ạn có th ể tạo m ột th a n h tiế n độ tro n g các chương tr ìn h riên g của bạn

Các thuộc tín h quan trọ n g làm cho m ột th a n h tiế n độ làm việc là các thuộc tín h M inim um , Maximum, và Value và nhữ ng thuộc tín h này thường được xử lý sử dụng m ã chương trìn h (Các thuộc tín h progress

Trang 25

C h ư ơ n g 11: s ủ d ụ n g c á c m ảng để quản lý dữ liệu s ố và ch u ỗ i 2 9

b a r k h ác , m à b ạ n có th ể kiểm tr a tro n g cửa sổ P ro p e rties diều k h iển diện m ạo v à chức n ăn g của th a n h tiế n độ) B ạn có th ể kiểm tr a các thuộc tín h M inim um và M aximum được xấc lập n h ư th ế nào b ằng việc x em th ủ tục sự k iệ n F orm l_L oad của chương trìn h này

4 N h ấ p đôi form đê’ hiển th ị th ủ tục sự k iệ n F orm l_L oad

Đ ể m ộ t th a n h tiế n độ hiển th ị m ột chỉ báo ch ín h xác cho b iế t một

tá c vụ tín h to á n sẽ m ấ t bao lâu để h oàn th à n h , b ạn cần xác lập các

số đo tư ơ ng đối cho diểm đầu và điểm cuôl của th a n h Điều này được

h o àn th à n h b ằ n g các thuộc tín h M inim um v à M axim um được xác lập

đ ể tư ơ ng hợp p h ầ n tử cuôl cùng và p h ần tử sau cùng tro n g m ảng m à

b ạ n đ a n g xây dựng N hư đ ã ghi chú, p h ầ n tử m ản g dầu tiê n luôn là zero n h ư n g p h ầ n tử m ản g cuối cùng phụ thuộc vào kích cỡ của m ảng,

do đó h à m ư b o u n d đã được sử dụng để t r ả về số đó v à thuộc tín h

M axim um của th a n h tiế n độ được xác lập m ộ t cách phù hợp M ảng

m à b ạ n đ a n g xử lý tro n g bài tậ p n ày là R andA rray, m ột m ản g số

ng u y ên L ong được k h ai báo ban đầu để chứa 500 p h ầ n tử (0 đến 499)

5 N h ấ p n ú t S t a r t D e b u g g in g để chạy chương trìn h

Chương tr ì n h chạy v à form A rray C lass S orts tnở tr ê n m àn hình

T ro n g th ủ tụ c sự k iệ n F orm l_L oad của nó, chương tr ìn h đ ã k h ai báo

Trang 26

3 0 C h ư ơ n g 11; S ử d ụ n g các mảng để q u ả n lý d ư liệ u s ố và chuỗi

m ộ t m ản g có tê n là R andA rray và đà đ ịn h chiều cho nó b ằ n g 500

p h ầ n tử M ột đôl tượng progress b a r đã được đ ịn h chuẩn đ ể th e o dõi

m ột ph ép tín h 500 đơn vị (kích cỡ mảng), v à sô' 500 x u ấ t h iệ n ở bên

p h ải th a n h tiế n dộ (công việc của một đối tượng la b el và h à m UBound)

6 N h ấp n ú t F ill A r r a y

Chương tr ìn h tả i R andA rray với 500 số ngẫu n h iê n (được d ẫ n x u ất

bởi h àm Rnd) v à h iể n th ị các số tro n g hộp te x t K h i chương tr ìn h xử

lý m ả n g và đ iề n dữ liệu vào đô'i tượng hoặc te x t, th a n h tiế n độ từ từ lấp đầy m àu x a n h lá cây M àn h ìn h trô n g n h ư h ìn h m in h h ọ a dưới đây k h i tiế n tr ìn h được ho àn tất

705547

533424

573518 289562 774740 14017 760723 814490

7 fm v

45352 414032 8C2613 7S0430

r rểABạy ỉ Ị^_SofỊAỉí4ỵ ' ị_Rev»s6 j

M â tạo r a k ế t quả n à y là th ủ tục sự kiện B u tto n l_ C lick chứa các câu

lệ n h chương tr ìn h sau đây:

‘ Flll tlie array w ỉth ranđom numbers and đỉsplay in text box

Privaíe Sưb Button1_Click{ByVal sender As System.Obịect

ByVaí e As System EventArgs) Handles B ư tto n lC lick Dim i As Integer

Đ ể n h ậ n được các sô" n g ẫu n h iên vôn là các sô" nguyên, các h à m In t

và R nd đ ã được sử d ụ n g cùng với n hau n h ư tro n g chương 2 v à số

Trang 27

n gẫu n h iê n được tạo r a bởi R nd được n h â n vứi 1,000,000 để có được các số nguyên vốn là sá u chữ số hoặc ít hơn Việc g á n nhữ ng sô' này vào m ản g được làm đễ d àn g b ằng việc sử d ụ n g m ộ t vòng lặ p For

N ex t với m ột index m ả n g k h ác với bộ đếm vòng lặp (i), Đ iền đầy

m ả n g là m ột th a o tác cực kỳ n h a n h ; việc g iảm tốc độ xuống (và nhu cầu về th a n h tiế n độ) gây r a do gán các p h ầ n tử m ả n g vào đối tượng

hộ p te x t mỗi lầ n m ột p h ầ n tử Điều n ày đòi h ỏ i cập n h ậ t m ột th à n h

p h ầ n giao diện người dùng tr ê n fo n n 500 lầ n v à tiế n tr ìn h m ấ t m ột

v à i giây dể h o àn th à n h Vì đối tượng p ro g re ss b a r đ ã được định chuẩn đ ể sử dụng số p h ầ n tữ m ảng là m mức tố i đ a của nó, việc gán

bộ đếm vòng lặp (i) vào thuộc tín h V alue của th à n h tiê n độ sẽ cho

p h ép th a n h h iể n th ị c h ín h xác bao n h iê u p h ầ n đ ịn h chuẩn đ ã được

h o àn th à n h

7 N h ấ p n ú t S o r t A rray.

C hương t r ì n h tu â n th e o m ộ t tiế n t r ì n h tư ơ n g tự đ ể p h â n loại

R andA rray, lầ n n ày sử dụng phương thứ c A rra y S o rt dể sắ p xếp lại

m ả n g theo th ứ tự tă n g dần (500 p h ầ n tử được liệ t k ê từ th ấ p n h ấ t

đ ến cao n h ất) M àn h ìn h trô n g tương tự n h ư sau:

'Ún' t ' '' ■

C h ư d n g 11: sử d ụ n g c á c m ảng để quản lý dư liệ u s ố v à c h u ô i 31

241

2605 4GỊ9

10Ổ3

ÚÕ17

14ál isea2

157Ũ3 16297 16383 18753 22S29 2824S

28S85

[ f i Ì Ã i t i y Ị S o i l A t t a y f

M ã tạ o r a k ế t quả n ày là th ủ tục sự k iệ n B utton2_C lick chứa các câu

lệ n h chương tr ìn h sau đây:

‘Sort the array using the Array.Sort method and display

Private Sub Button2_Click{By\/al sender As System.Obịect, _

ByVal e As System EventArgs) Handles Button2.Click

Dim i As Integer TextBox1.Text = “ ”

Trang 28

3 2 _ C h ư d n g 1 1: sử d ụ n g các m ả n g dể q u ả n lý dO liệ u s ố v à chuỗi

Array.Sort(RandArray) For i = 0 To UBound(RandArray)

T e x tB o x U e x í = T e x tB o x U e x t & RandArray{i) & vbC rLí ProgressBarl.Value a i 'move progress ùar

Next í End Sub

Thủ tục sự k iệ n n ày xóa sạch đô'i tượng hộ p te x t k h i người dùng

n h ấp n ú t S o rt A rray v à sau đó p h ân loại m ả n g b ằ n g việc sử dụng phương thức A rray S o rt được mô tả trước đó T iến tr ì n h p h â n loại

r ấ t n h a n h L ần nữa sự giảm tốc dộ duy n h ấ t là tá i tạo đô'i tượng hộp

te x t mỗi lầ n m ột dòng tro n g vòng lặ p For N ext, m ộ t tiế n trìn h được báo cáo bởi đôl tượng P ro g re ssB a rl v à thuộc tín h V alue của nó

H ãy xem sử dụng phương thức A rray S o rt đơn giản n h ư t h ế nào

^ n g các thanh cuộn hoặc các phím mũi tên)

M àn h ìn h trô n g tương tự n hư sau:

A rrs y C l i i ỉ ẳortV

393414 996771 993731 992572 931402 989428

96^

934253

9S404S 980003 97382S 379531 979077

Trang 29

C h ư d n g 11: s ử d ụ n g c á c m à n g để q u à n lý dữ liệ u s ò v à c h u ỗ i _ w

M ã tạo r a k ế t quả là th ủ tục sự kiện B utton3_Click chứa các câu lện h chương trìn h sau đày:

‘ Reverse the order of array elements using Array.Reverse

Private Sub Button3_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Hanđles ButtonS.CIick Dim i As Integer

TextBoxl ,Text = Array.Reverse(RandArray) For i * 0 To UBound(RandArray)

T e x tB o x U e x t = T e x tB o x U e x t & RandArray(i) & vbCrLí

P rogressBarlValue = i ‘ move progress bar Next i

Dim RandArray(0 To 499) As Long

11 T hay t h ế 499 tro n g câu lệnh k h ai báo m ản g b ằn g 2999

Bây giờ câu lệ n h trô n g như sau:

Dim RandArray(0 To 2999) As Long

12 C hạy lại chương trìn h để xem việc k h a i báo v à điền vào m ột m ảng 3,000 p h ầ n tử ả n h hưởng đến hiệu su ấ t chương tr ìn h n h ư th ê nào.Bởi vì xử lý 3,000 p h ần tử đòi hỏi nỗ lực hơn nhiều, V isual B asic mâ't

m ột chút th ờ i gian để cập n h ậ t lại đối tượng hộp te x t lặp đi lặp lại nhiều lầ n k h i b ạn điền đầy, p h â n loại v à đảo ngược R andA rray Tuy

n h iê n , th a n h tiế n độ th ô n g báo cho b ạ n b iế t tin tức v à b ạ n có th ể

Trang 30

th ấ y rằ n g với chỉ m ộ t th a y đổi nhỏ, b ạn có th ể điều ch ỉn h n h ữ n g p

b ạ n đ à học tro n g chương này theo những tìn h huống k h á c n h a u (bí quyết là sử dụng h àm ƯBound để báo cáo kích cỡ của m án g cho các

th ủ tục sự k iệ n của chương trìn h thay vì "mâ hóa cứng" giới h ạ n trê n

tạ i 499)

B ạn có th ể th ử ng h iệm nhiều hơn nữa với chương tr ì n h n à y bằn g

v iệ c th ê m m ộ t câu lệ n h R andom ize v ào m ộ t th ủ tụ c sự k iệ n

F o rm l_ L o ad (để làm cho k ế t quả th ậ t sự ngẫu n h iê n mỗi lầ n bạn chạy chương trìn h ) hoặc bằng cách th ử các kích cỡ m ả n g và các kiểụ

p h ải th a n h tiế n độ) của chương trìn h B ạn sẽ ngạc n h iê n k h i th ấ y các h o ạ t động m ản g chạy n h a n h như th ế nào k h i k ế t q u ả không cần

h iể n th ị tr ê n form (M ột m ảng 100,000 p h ầ n tử tả i chỉ tro n g m ộ t vài giây)

Tham khảo nhanh chương 11

Đ ể Thực h iện đ iều sau đ ây

Tạo một m ảng (array) Định chiều cho m ảng bằng việc sử dụng từ

khóa Dim Ví dụ;

Dim Employees(9) As String

Tạo một m ảng public Định chiều cho m ảng bằng việc sử dụng từ

khóa Public trong một module Ví dụ:

Public Employees(9) As string

Tạo một m ãng publíc xác định Định chiều cho m ảng như được mô tả trước giới h ạn trê n và giới h ạn dưới đó, nhưng cũng sử dụng từ k hóa To Ví dụ:

Public Employees(Ũ To 9) As string

3 4 C h ư ớ n g 11: Sử dụng các mảng để quản lý d ữ liệ u số và chuỗi

_& ( ^ h ^ _ ^ ^ C Ị jạ jn ạ n g phải luôn là zero (0)

Trang 31

Đ ịnh dạng các chuỗi tex t bằng Sử dụng các hàng vbC rLfvà vbTab bẽn trong

ký tự quay trở về dầu dòng và m ã chương trình {Để thêm các giá trị này

Tạo một mảng động Xác định tê n và kiểu của mảng, nhưng bỏ(dynamic array) qua sô' phần tử (Nếu m ảng có nhiều chiều,

chèn các đấu phẩy, nhưng không phải các sô' giữa các chiều Trong mã chương trìn h , xác định kích cỡ của m ảng bằng việc sử dụng câu lệnh ReDim Ví dụ:

ReDim Preserve myCube(25, 25, 50)

Sắp xếp lại thứ tự nội dung

của một mảng

Sử dụng các phương thức trong class Array của -NET Fram ew ork Để p h á n loại một mảng có tê n là RandA rray theo thứ tự tăng dần, sử dụng phương thức A rray.Short như sau;

Array.Sort(RandArray)

Trang 32

3 6 C h ư ơ n g 11: Sử d ụ n g các m ảng để q u ả n lý d ư liệu s ố và chuỗi

Array.Reserve(RandArray)

Để cung cáp cho người dùng

sự phản hồi trực quan trong

các phép tín h dài

Để dảo ngược thứ tự cùa m ột m ảng có tê n là

R a n d A rra y , SIÌ d ụ n g p h ư ơ n g th ứ c Array.Reserve như sau:

Thêm một control ProgressB ar vào form (Bạn có thể tìm th ấ y control ProgressB ar trên tab Common Controls của ToolBox) Xác lập các thuộc tín h M inimum, Maximum, và Value cho controi bằn g việc sử dụng mã chưcmg trình Biến bộ đếm trong một vòng lặp For N ext thường là m ột cách tố t để xác lập thuộc tín h Value

Trang 33

C h ư ớ n g 12: Làm v iệ c với các tập hợp 3 7

Lòm việc với các tập hợp

Sau k h i h oàn th à n h chương này, b ạ n s ẽ có thế:

K X ử lý lập hợp Controls trên m ột/orin

^ Sử d ụ n g m ột vòng lặp For Each N ext đ ể x o a y I>òng theo cbỉi kỳ các đối tỉtợn^ trong m ột íâp hợp

u Tạo các tập hợp riêng củ a bạn đ ể q iiả n lý các URL ĩvebsite và thông tin khác

Trong chương này b ạn sẽ học cách sử dụng được gọi là các tậ p hợp (collection) tr o n g m ộ t chương tr ìn h cá c nhóm đối tượng

M icrosoít Visual Basic B ạn học cách q uản lý th ô n g tin với các

tậ p hợp v à xử lý các đối tượng tậ p hợp b ằng việc sử dụng các vòng lặp For

E ach N ext K hi b ạn k ế t hợp nhữ ng kỹ n àn g xử lý tậ p hợp với những gì

b ạ n đã học về các m ản g (array) tro n g chương 11, b ạ n sẽ có n h iều nhữ ng gì

m à b ạn cần b iế t về việc quản lý hiệu quả dữ liệu tro n g m ộ t chương tr ìn h và

b ạ n sẽ đi nhữ ng bước đi đầu tiê n tro n g việc xử lý các tậ p hợp đối tượng được phơi bày bởi M icrosoft Visual Studio 2010 và các ứng dụng W indows thông dụng

Trang 34

Làm việc với các tập hợp đối tượng

T rong p h ầ n n ày b ạn sẽ học về các tậ p hợp (collection), m ộ t cơ cấu m ạ n h

để điều k h iể n đối tượng và dữ liệu khác tro n g m ột chương t r ì n h Visual Basic M icrosoft.N ET F ram ew ork duy trì m ột số tậ p hợp đối tư ợ ng chuẩn

m à b ạn c6 th ể sử dụng k h i bạn viết các chương trìn h B ạ n có t h ể sử dụng Visual Studio đ ể duyệt hệ thông nhằm tìm các tậ p hợp v à dối tư ợ ng úng dụng khác

B ạn đã b iế t rằ n g các đối tượng trê n m ột form được lưu tr ữ cùng với n hau tro n g cùng m ột file N hưng b ạn có b iết rằn g Visual B asic cũng xem nhữ ng đối tượng là các th à n h viên của cùng m ột nhóm h ay không? T ro n g th u ậ t

ngữ V isual Studio, to à n bộ tậ p hợp ăối tượng trê n m ột form được gọi là tậ p

hợp C ontrols T ập hợp Controls được tạo tự động k h i b ạ n m ở m ộ t form mới

và k h i b ạ n th ê m các đối tượng vào form, chúng trở th à n h m ộ t p h ầ n của tậ p hợp đó

Mỗi tậ p hợp tro n g m ột chương trìn h có tê n riên g của nó đ ể b ạ n có th ể

th a m chiếu nó dưới d ạn g m ột đơn vị riêng b iệ t tro n g m ã chương trìn h , Ví

dụ, b ạ n sử dụng tê n C ontrols dể th am chiếu các tập hợp đôl tư ợ ng tr ê n m ột form P hương p háp k ế t nhóm này tương tự n h ư cách các m ả n g k ế t nhóm

m ộ t d a n h sách các p h ẩ n tử lại với nhau bên dưới m ộ t tê n và giống n h ư các

m ản g V isual Basic, tậ p hợp Controls cũng dựa vào zero

N ếu có n h iề u form tro n g m ột project, bạn có th ể tạ o các b iế n public được

k ế t hợp với các tê n form và sử dụng các biến đó để p h â n b iệ t m ộ t tậ p hợp

C ontrols với m ột tậ p hợp C ontrols khác {Bạn sẽ học th ê m về việc sử dụng các biến public để lưu tr ữ dữ liệu form trong chương 14), T h ậ m chí b ạn có

th ể th ê m các control b ằn g lập trìn h vào tập hơp C ontrols tro n g m ộ t form

Tham chiếu các dôi tượng trong một ỉập hợp

B ạn có th ể th a m chiếu các đối tượng trong một tậ p hợp hoặc các th à n h

p h ầ n riê n g lẻ của tậ p hợp b ằng việc xác đ ịn h vỊ tr í in d ex của đối tượng tro n g nhóm V isual B asic lưu trữ các đối tượng tậ p hợp th e o th ứ tự đảo ngược với th ứ tự m à chúng đã được tạo, đo đó bạn có th ể sử dụng "thứ tự ra đời" của m ột dối tượng đ ể th a m chiếu đối tượng một cách riê n g lẻ hoặc bạn

có th ể sử dụng m ột vòng lặp để bước qua m ột số đòi tượng, Ví dụ, để n h ận dạng đối tượng sau cùng được tạo trê n một form , b ạn có th ể xác đ ịn h inđex

0 (zero) n h ư dược m in h họa tro n g ví đụ này:

Controls{0).Text = "Business"

3 0 C h ư ơ n g 12: Làm v iệ c v ớ i c á c tậ p hợp

Trang 35

Câu lệ n h n ày xác đ ịn h thuộc tín h T ext của đối tượng sau cùng trê n form

sa n g "B usiness" (Đối tượng k ế cuối dược tạo có m ột index là 1, đối tượng k ế cuối được tạ o có m ộ t in d ex là 2 ) Xem xét logic n ày là điều quan trọ n g là

b ạn k h ô n g luôn luôn k ế t hợp m ột đối tượng cụ th ể tr ê n form với m ột đối tượng index, bởi vì n ếu m ột đối tượng được th êm vào tậ p hợp, đối tượng mới

m a n g vỊ t r í in d ex 0 v à các đối tượng index còn lại được tă n g lê n 1

Vòng lặ p F or N ext sau đây sử dụng m ột hộp th ô n g báo để h iể n th ị các

tê n của 4 control sau cùng được th êm vào m ột form:;

Dim i As Iníeger

For i = 0 To 3

M sgBox(Controls(i).Nam e) Next i

C hú ý r ằ n g vòng lặ p này được r a lệnh xoay vòng th eo chu kỳ từ 0 đến 3 bởi vì đối tượng control sau cùng được th êm vào m ộ t form n ằm ở vị tr í 0

T ro n g p h ầ n tiế p theo b ạn sè học m ột phương p h áp hiệu quả hơn để v iết

m ộ t vòng lặp,

V iế t các vòng lặp For Each Next

M ặc dù b ạ n có th ể th a m chiếu các th à n h viên của m ột tậ p hợp m ột cách riê n g lẻ, n h ư n g cách hữu dụng n h ấ t dể làm việc với các đối tượng tro n g m ột

tậ p hợp là xử lý chúng dưới dạn g m ột nhóm Thực tế , lý do các tậ p hợp h iệ n hữu là để b ạ n có th ể xử lý các nhóm đối tượng m ột cách hiệu quả Ví dụ, có

th ể b ạn m uốn h iể n th ị, di chuyển, p hàn loại, đổi tê n hoặc đ ịn h lại kích cỡ

cả m ộ t tậ p hợp đối tượng cùng m ột lúc

Đ ể g iải q u y ết loại tá c vụ này, bạn có th ể sử dụng m ột vòng lặp đặc b iệt được gọi là F o r E ach N ext để xoay vòng theo chu k ỳ qua các đối tượng tro n g m ộ t tậ p hợp m ỗi lầ n m ột đối tượng Một vòng lặ p F o r E ach N ext tương tự n h ư m ộ t vòng lặp For.- N ext Khi m ột vòng lặ p F o r E ach N ex t được sử d ụ n g với m ột tậ p hợp Controls, nó trô n g n h ư sau:

Dim C trlVar As Control

For Each CtrlVar In Controls

process object Next CtrlVar

C h ư d n g 1 2 : Làm v iệ c v ớ i các tậ p hợp ^

Trang 36

4 0

B iến C trlV ar được k h a i báo là m ột kiểu C ontrol v à đ ạ i d iệ n cho đối tượng h iệ n h à n h tro n g vòng lặ p For Each N ext C ác C o n tro l là các tậ p hợp được giới th iệ u trước đó đại diện cho tấ t cá đối tư ợ ng control tr ê n form

h iệ n h à n h P h ầ n th â n của vòng lập được sử dụng để xử lý các đối tượng riê n g lẻ của tậ p hợp Ví dụ, có th ể bạn thay đổi thuộc tín h E n ab le đ , Left, Top, T ext, hoặc V isible của các đôi tượng trong tậ p hợp, hoặc có th ể bạn

m uôn liệ t kê tê n của m ỗi đối tượng trong một hộp d a n h sách

_ ChUOng 12: L à m v iệ c v ớ i c á c tậ p hợp

Thử nghiệm với các đối tượng trong tập hợp C on trols

T rong các b ài tậ p sau đây b ạn sẽ sử dụng m ã chương tr ì n h đ ể xử lý các

từ tr ê n m ột form b ằn g việc sử dụng tập hợp Controls P ro je ct m à b ạ n sẽ tạo

sẽ có b a đối tượng n ú t (button) v à b ạn sẽ tạ o các th ủ tục sự k iệ n th a y đổi các thuộc tín h T ex t của mỗi đô'i tượng, di chuyển các đối tượng s a n g bên phải

v à xử lý đối tượng tro n g nhóm m ột cách đặc biệt Chương tr ì n h sẽ sử dụng

b a vòng lặp F o r E ach N ext d ể xử lý các đối tượng m ồi lầ n người dùng

2 Sử dụng control B utton d ể vẽ ba đối tượng n ú t n ằ m ở p h ía bẽn trá i

form n h ư được m in h h ọ a ở đây;

Trang 37

C h ư ơ n g 1 2 : L à m v iệ c v ớ i c á c tậ p h ợ p 41

4 N h ấ p đôi đối tượng n ú t đầu tiê n (B u tto n l) tr ê n form

T h ủ tục sự kiện B uttonl_C lick x u ất h iệ n tro n g Code E ditor

5 Gõ n h ậ p các câu lện h chương tr ìn h sau đầy:

For Each Ctrl In Controls

ctrl.T ext = ■Click M e!’

Next

Vòng lặp F or E ach N ext sau đây bước qua tậ p hợp C ontrols trê n

fo rm mỗi lầ n m ột control và xác lậ p thuộc tín h T ex t của control sang

"Click Me!” Vòng lặp sử dụng Ctrl dưới d ạn g m ộ t b iế n đô'i tượng tro n g vòng lặp m à b ạn sẽ k h a i báo ở bước tiế p theo

6 Cuộn đến p h ần trê n cùng của m ản g chương tr ìn h của form và ngay

ở t r ê n câu lệ n h Public C lass F o rm l, gõ n h ậ p câu lệ n h sau đây:

Optìorì Iníer Off

C âu lệ n h n ày cho trìn h biên dịch b iế t rằ n g nó không n ê n cố suy luận kiểu của các biến Vì b ạn sẽ k h a i báo b iế n m ộ t cách tường m in h , tùy chọn suy lu ậ n n ày không cần th iế t N ếu O ption In fe r được b ậ t và

b ạ n cố chạy m à tro n g chương này, có th ể b ạn th ấ y m ột cản h báo cho

b iế t rằ n g kiểu cho m ột biến m à b ạn đ an g sử đụng không th ể được suy luận (Để b iế t th ê n th ô n g tin , xem chương 1)

7 N gay bên dưới câu lệ n h Public C lass F o rm l, gõ n h ậ p com m ent và

p h ầ n k h a i báo biến sau đây;

Dim Ctrl As Control

P h ầ n k h a i báo biến to àn cục n ày tạo m ột b iế n tro n g kiểu class

C ontrol đại diện cho các control của form h iệ n h à n h tro n g chương

tr ìn h B ạn k h ai báo b iế n n ày tro n g vùng các p h ầ n k h a i báo k h ái

q u át của form sao cho nó hợp lệ xuyên suốt qua t ấ t cả th ủ tục sự kiện của form

B ây giờ b ạn s ẵ n sàng chạy chương tr ìn h v à th a y đổi thuộc tín h T ext cho mỗi n ú t tr ê n form

8 N h ấ p n ú t S t a r t D e b u g g ỉn g tr ê n th a n h công cụ S ta n d a rd để chạy chương trìn h

Trang 38

4 2 C h ư ơ n g 12: Làm v iệ c v ớ i các tập hợp

9 N h â p n ú t đầu tiê n tr ê n form (B uttonl)

T hủ tục sự k iệ n B uttonl_C lick th ay đổi thuộc tín h T ext cho mỗi control tro n g tậ p hợp Controls Form của bạn trô n g tương tự n hư sau:

th uộc tín h cô’t lòi c ủ a chương trình.

11 N h ấp n ú t S a v e A ll tr ê n th a n h công cụ S ta n d a rd đ ể lưu các thay đổi Xác lậ p folder C :\V b l0 s b s \C h a p l2 làni vị trí

Bây giờ b ạn sẵn s à n g th ử m ột cuộc thứ nịíhiệm k h ác với tậ p hợp

C ontrols: sử dụng thuộc tín h L eft để di chuyển mỗi control tro n g tập hợp C ontrols sa n g b ên trá i

S ử đ ụ n g m ộ t v ò n g l ặ p F o r E a c h N e x t d ể d i c h u y ể n c á c c o n tro l

1 H iển th ị lạ i form v à sau đó n h ấp đôi đối tượng n ú t th ứ h a i (Button2)

2 Gõ n h ập m ã chương tr ìn h sau đây trong th ủ tục sự kiện Button2_Click:

c trl.L e tt = ctrl.L e ữ + 25 Next

Trang 39

C h ư ơ n g 1 2 : Làm v iệ c với c á c lặ p hợp 4 3

Mỗi lầ n người dùng nh ấp n ú t th ứ hai, vòng lặ p F o r E ach N ext bước qua các đối tượng tro n g tậ p hợp C ontrols lầ n lượt từng đối tượng m ột và di chuyển chúng sang bên p h ả i 25 pixel (Để di chuyển các đôl tượng sa n g b ên trá i 25 pixel, b ạn trừ đi 25) M ột pixel là m ột đơn vị đo độc lậ p với th iế t bị m à qua dó b ạ n có th ể d ịn h vị trí các đối tượng tr ê n m ột form m ột cách chính xác

N h ư tro n g th ủ tục sự kiện trước m à b ạn đã gõ n h ập , b iế n Ctrl là m ột

"người đóng t h ế vai" cho đối tượng h iệ n h à n h tro n g tậ p hợp v à chứa các xác lậ p thuộc tín h giống y n hư đối tượng m à nó đại diện Trong vòng lặ p n à y b ạ n có th ể điều ch ỉn h thuộc tín h L eft để quyết đ ịn h vị

tr í của m ộ t đối tượng tưcmg ứng với p h ía b ên t r á i form

3 N h ấ p n ú t s t a r t D e b u g g in g

Chương tr ìn h chạy và ba n ú t xuất h iệ n ở p h ía b ên tr á i form

4 N h ấ p n ú t đầu tiê n và sau đó n h ấp n ú t th ứ h a i m ộ t vài lần

Các n ú t tr ê n form th ay đổi th à n h "Click Me!" v à sau đó m ỗi lầ n bạn

n h ấ p n ú t th ứ h ai, các đối tượng trê n form dần d ân di chuyển sang

b ên p h ải M àn h ìn h trô n g n h ư sau sau 5 lầ n n h ấp :

Trang 40

Sử đụng thuộc tín h Name trong m ột vòng lặp For Each N ext

Nếu b ạ n m uôn xử lý m ột hoặc nhiều thành viên của m ộ t tậ p hợp m ột cách k h ác với b ạn xử lý những th à n h viên, bạn có th ể sử d ụ n g thuộc tín h

N am e, thuộc tín h n ày n h ậ n dạng duy n h ấ t mỗi đòl tượng tr ê n form B ạn đà xác lậ p thuộc tín h th eo định kỳ trong sách này để làm cho m ã chương tr ìn h

dê đọc hơn, nhưĩig N am e cũng có th ể được sử dụng b ằn g lậ p tr ì n h để n h ậ n

d ạn g các đô'i tượng riê n g b iệ t tro n g chương trình

Đ ể sử dụng thuộc tín h N am e bằng lập trình, chọn r a các đối tượng m à

b ạn m uốn xử lý đặc b iệ t và sau đó ghi chú các thuộc tín h N am e của chúng Sau dó k h i b ạ n lặ p lạ i qua các đôì tượng trê n form b ằ n g việc sử dụng m ột vòng lặ p F o r Each N ext, bạn có th ể sử dụng một hoặc n h iề u câu lệ n h I f để

te s t các thuộc tín h N am e quan trọ n g và xử lý những đô'i tượng đó m ộ t cách

k h ác nhau Ví dụ, b ạ n m uốn tạo một vòng lặp For E ach N e x t di chuyển

m ột đô'i tượng qua form chậm hơn những đối tượng khác B ạ n c6 th ể sử dụng m ộ t câu lệ n h I f T hen để n h ậ n ra thuộc tín h N am e của đô'i tượng chậm hơn v à sau đó di chuyển đối tượng đó với khoảng cách n g ắ n hơn b ằng cách không g ia tă n g thuộc tín h L eít của nó nhiều b ằng thuộc tín h L eft của nhữ ng đối tượng khác

Thủ thuật

Nếu bạn dự đ ịn h xử lý m ột số đối tượng một các đặc b iệ t tro n g m ộ t vòng lập For Each N ext, bạn có th ể sử dụng các câu lệnh Elseíí với câu lệnh ĩ f

Then, hoặc bạn có th ể sử dụng một cấu trú c quyết địn h Select Case.

T rong bài tậ p sau đây b ạn sẽ te s t thuộc tín h Name của đối tư ợ ng n ú t thứ

b a (btnM oveO bjects) đ ể xử lý n ú t đó một cách đặc b iệ t tro n g m ộ t vòng lặp

F or E ach N ext K ết quả R ẽ là một th ủ tục điều k iệ n di ch u y ển h a i n ú t

tr ê n cùng sa n g b ên p h ả i nhưng giữ cố định mít dưứi cùng

Thủ thuật

Ngoài thuộc tín h Name, hầu hết các đối tưụng hỗ trợ thuộc tín h Tag, Tưcfng lự như thuộc tín h Name, thuộc tính Tag là 1 vị trí trong đó bạn có th ể luU trữ dữ lỉệu chuỗi về đôi tượng Theo mặc định, (huộc tính Tag rỗng, n h irtig bạn có th ể gán thông tin cho nó và test nó để nhận dạng duy nhât các đôì tượng trong chương trìn h mà bạn muốn xử lý một cach khac nhau.

S ử dụng thuộc tính Name để xử lý một đôi tượng trong tập hợp Con­ trols m ột cách đặc biệt.

1 H iển th ị form và sau đó n hấp đôi đôi tượng n ú t th ứ ba

Ngày đăng: 04/12/2015, 00:31

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm