Phần 2 Tài liệu Kỹ thuật và Thủ thuật lập trình Visual Basic 2010 - 2011 - Tập 2 có nội dung trình bày về cơ sở dữ liệu và lập trình web như khởi động vói ADO.NET, biểu diễn dữ liệu sử dụng Control DataGridView, tạo các Website và trang Web bằng cách sử dụng Visual Web Developer và ASP.NET và một số nội dung khác.
Trang 11 4 4 C h ư ơ n g 16: Thừa kế các fo rm v à tạ o c á c c la s s c ơ sỏ
Thừa kế các form và tạo cỏc
class cơ sở
Sau k h i h oàn th à n h chương này, bạn s ẽ có thê;
B Stc d ụ n g Inheritance Picker đ ể kết nhập các /o r m h iện có vào các
Mp h ầ n m ềm chuyên nghiệp h iệ n nay là k h ả n ă n g hiểu v à tậ n ộ t kỹ n ă n g quan trọ n g cho hầu n h ư t ấ t cả n h à p h á t triể n
dụng các kỹ th u ậ t lập trìn h hướng đối tượng (OOP) Các kỹ
th u ậ t được k ế t hợp với OOP đ ã đ ạ t được sự tă n g cường m ạ n h lê n tro n g các
p h iên b ả n g ần đây của M icrosoít Visual Basic bao gồm các tín h n ã n g hỗ trợ
sự th ừ a k ế (inheritance), m ột cơ cấu n h ằ m cho p hép m ộ t class th u n h ận
giao diện v à các đặc điểm h à n h vi của m ột class khác
Sự th ừ a k ế tro n g Visual Basic 2010 được làm cho dễ d àn g b ằ n g cả ngôn
ngữ v à các công cụ Visual Basic bên tro n g Im te g ra te d D evelopm ent
Trang 2Envi-ro n m e n t (IDE) Điều này có n g h ĩa là b ạn có th ể xây dựng m ột form tEnvi-rong môi trư ờng p h á t triể n và chuyển các đặc điểm và chức n ă n g của nó đến các form khác N goài r a b ạn có th ể xây dựng các class riê n g của b ạn và thừa
k ế các thuộc tín h , phương thức và sự kiện từ chúng,
T ro n g chương n ày b ạn sẽ th ử nghiệm với cả h a i loại th ừ a kế B ạn sẽ học cách tíc h hợp các form h iệ n có vào các project b ằn g việc sử dụng hộp
th o ạ i In h e rita n c e P ick er vôn là m ột p h ầ n của M icrosoft V isual Studio
2010 v à b ạ n sẽ học cách tạ o các class riêng của b ạ n v à d ẫn x u ất các class mới từ chúng b ằn g việc sử dụng câu lệ n h In h e rits Với n h ữ n g kỹ n ă n g này
b ạ n sẽ có th ể tậ n dụng nhiều form và các thường tr ìn h v iế t m ã m à b ạn đã
p h á t tr iể n , là m cho việc lậ p tr ìn h V isual B asic tr ở th à n h m ộ t nổ lực
n h a n h hơn v à lin h h o ạ t hơn N hững cải tiế n n ày sẽ giúp b ạn th iế t k ế
n h ữ n g giao diện người dùng h ấp d ẫn m ột cách n h a n h chóng v à sẽ m ở rộng công việc m à b ạn đả làm tro n g các project lập tr ìn h khác
Thừa kế một form bằng việc sử dụng Inheritance Pỉcker
T ro n g cú p h á p OOP, sự thừ a k ế (in h eritan ce) có n g h ĩa là làm cho một class n h ậ n các đối tượng, thuộc tín h , phương thức v à n h ữ n g thuộc tín h
k h á c của m ột class khác N hư được dề cập tro n g p h ầ n "thêm các form mới vào m ộ t chương trìn h " tro n g chương 14, Visual Basic đi qua tiế n tr ìn h này
th ư ờ n g xuyên k h i nó tạo m ột form mới tro n g mỏi trư ờng p h á t triể n Form
đ ầ u t i é n t r o n g m ộ t p r o j e c t ( F o r m l ) p h ụ t h u ổ c v à o c l a s s System W indow s.F orm s.Form cho đ ịn h n g h ĩa của nó và các giá trị mặc
đ ịn h Thực t ế class này được n h ậ n d ạng tro n g cửa sổ P ro p e rties k h i bạn chọn m ộ t form tro n g D esigner n h ư dược m inh họa tro n g ầ n h chụp m àn
b ằ n g việc sử dụng m ã chương trìn h , nhưng nhữ ng người th iế t k ế Visual
S tudio đ ã xem tác vụ n ày quan trọ n g đến nỗi họ đ ă th iế t k ế m ột hộp thoại đặc b iệ t tro n g môi trường p h á t triể n để làm dễ d àn g tiế n tr ìn h này Hộp
th o ạ i n ày được gọi là In h eritan c e P icker và nó được tru y cập th ô n g qua
Trang 3lệ n h Add N ew Ite m tr ê n m enu Project T rong bài tậ p sau đây b ạ n sẽ sử dụng In h e rita n c e P ick er để tạ o m ột bản sao th ứ h a i của m ột h ộ p th o ại tro n g m ột project,
T h ừ a k ế m ộ t h ộ p t h o ạ i đ ơ n g i ả n
1 K hởi động V is u a l S tu d io và tạo m ột project V isual B asic Win- dows F orm s A pplication mới có tê n là M y F o r m I n h e r i t a n c e
2 H iển th ị project tr ê n form, và sau đó sử dụng control B utton để
th ê m h a i đối tượng n ú t ở cuôi form được đ ặ t cạn h nhau
3 T hay đổi các thuộc tín h T ext của các n ú t B u tto n l và B utton2 th à n h 'OK" v à "Cancel"
4 N h ấp dôi O K để h iể n th ị sự kiện B uttonl_C lick tro n g Code E ditor
5 Gõ n h ậ p cầu lệ n h chương trìn h sau đây:
MsgBoxCYou clicked OK")
6 H iển th ị lạ i form, n h ấ p đôi nUt Cancel v à sau đó gõ n h ậ p câu lện h chương tr ìn h sau đây tro n g th ủ tục sự k iệ n Button2_Click"
MsgBox("You cticked Cancel")
7 H iển th ị lại form và xác lập thuộc tín h T ext của form sa n g "Dialog Box"
Bây giờ b ạ n có m ột form đơn giản m à có th ể được sử dụng làm cơ sở cho m ột hộp th o ại tro n g m ột chương trìn h Với m ột số tùy biến, bạn
có th ể sử dụng form cơ sở n ày dể xử lý m ột sô' tác vụ - b ạn chỉ cần
th ê m các control d àn h riên g cho các ứng dụng riê n g lẻ của bạn
8 N hâ'p n ú t S a v e A ll đ ể lưu p ro je c t và sau đó x ác đ ịn h folder
C :\V b lO s b s \C h a p l6 làm vị trí
Bây giờ b ạn sẽ thực h à n h th ừ a k ế form Bước đầu tiê n tro n g tiế n
tr ìn h n ày là xây dựng hoặc biên dịch (compile) project bởi vì b ạ n có
th ể th ừ a k ế chỉ các form m à b ạn đ ã biên dịch th à n h các file exe hoặc -dll Mỗi lầ n form cơ sở được tá i biên dịch, các th a y đổi được thực h iệ n đôl với form cơ sở được chuyển đ ến form d ẫn x u ất (được
th ừ a kế)
9 N h ấp lệ n h B u ỉld M y F o r m In h e rita n c e tr ê n m enu Builđ
V isual B asic biên địch project và tạo m ột file exe
1 4 6 C h ư ờ n g 16: Thừa kê' c á c form và tạ o các c la s s co sỏ
Trang 4C h ư ơ n g 16: T h ừ a kế các form và tạo các class cơ sở 1 4 7
10 N hâp lệ n h A d d N e w ỉ t e m tr ê n m enu P roject v à sau đó nh ấp
h ạn g mục W indows Form s n ằm ở p h ía b ên t r á i hộp th o ạ i v à Inher-
ited Form ở giữa hộp thoại.
Hộp th o ại Ađd N ew Item trô n g giông n hư được m in h họa tro n g ản h chụp m àn h ìn h dưới đây:
Add S rv ỉte m • Fonn ỉnh<riỉ«ncé
V is u a l Basic 2010 Express không có tem plate In h e rite d Form N ếu
b ạ n đ a n g m u ôn n â n g cấp lê n V isual Studio P r o íe s s io n a l, đ iề u này
có th ể c u n g c ấ p m ộ t s ố te m p la te loại này (N ói c h u n g P ro fe ssio n a l
và c á c p h iê n b ả n full k h ác c ù a V isu al Stud io c u n g c â p th ê m m ộ t sô'
te m p la te hữu dụng) V à o lúc n à y có t h ể b ạ n m u ô n đơn g iả n x e m lại
p ro je c t m ẫ u đã được đ ậ t trê n C D P ractice Files v à k iể m tra mã
T u y n h iê n có m ộ t giải p h á p m à bạn có th ể th ử đ ể tạ o b ằ n g lay m ộl
fo rm th ừ a k ế Đ ể t h ử nớ , th ê m m ộ t W in d o w s F o rm có t ê n là
F o rm 2 v b v à o p ro je c t Ihay VI In h c ritc d F orm ớ p h ầ n trê n cùng
c ủ a Solution E x p lo rer, n h ấ p n ú t c h u y ể n đ ổ i S h o w All Files M ô
rộ n g F o rm 2 v b v à sau đó m ở F o rm 2 ,D e s ig n e r.v b T h a y đổ i "Inhcr-
it s S y s te m W in d o w s F o rm s F o rm " th á n h " I n h e r it s
M y _ F o r m _ I n h e r i t a n c e F o r m l " , N h ấ p S a v e A U , đ ó n g
F o rm 2 D e s ig n e r.v b và sau đó n hấp lại S h o w All Files đ ể là m ẩn
c á c file n â n g c ao V ì bạn đ ã thực h iệ n c á c bước b ằ n g thủ công, bây _ ^ờ_bạn_c£_thểnhậy_đến_£hần tiêp theo "T ù y b iế n Form thừa kế ".
Như thư ờng lệ, V isual Stuđio liệt kê t ấ t cả te m p la te m à b ạ n có th ể đưa vào các project, không p h ả i chỉ các te m p la te liên q uan đến sự thừ a kế T e m p la te In h e rite d F orm cho b ạ n tru y cập hộ p th o ạ i Inheriteưice Picker
Trang 51 4 8 C h ư ơ n g 16: Thừa kế các íorm và tạ o c á c c la s s c ơ sỏ
B ạn cũng có th ể sử dụng hộp te x t N am e ở cuối hộp th o ạ i đ ể g á n m ột
tê n cho form thừ a k ế m ặc dù nó không cần th iế t cho ví dụ n ày Tên
n ày sẽ xuất h iệ n tro n g Solution E xploreer và tro n g tê n file của form
tr ê n đĩa
11 N h ấp A d d để chấp n h ậ n các xác lập mặc định cho form th ừ a kẽ' mới
Visuaỉ Studio h iể n th ị hộp th o ại In h erìta n c e P ick er n h ư được m m inh họa ô đây:
Có th ể khó p h ân b iệ t m ột form thừ a k ế với m ột form cơ sở (các biểu tượng in h e ritan c e nhỏ không rõ rà n g như thế), n h ư n g b ạ n cũng có
th ể sử dụng Solution E xplorer v à các ta b IDE đ ể p h â n b iệ t giữa các form
Trang 6C h ư ơ n g 16: T hừ a kế các form và tạo các class cơ sở 1 4 9
Fefmtnh«MUA<e • N66fe>eft StiAo
Bảy giờ b ạ n sẽ th ê m m ột vài p h ần tử mới vào form th ừ a kế
T ù y b i ế n f o r m t h ừ a k ế
1 Sử dụng control B utton d ề th ê m m ột đối tượng n ú t th ứ ba gần giữa Form 2 (forra thừ a kế)
2 Xác lập thuộc tín h T ex t cho đối tượng n ú t sa n g "Click Me!"
3 N h ấp đôi n ú t C lic k Me!
4 T rong th ủ tục sự k iệ n Button3_Click, gõ n h ậ p câu lệ n h chương trìn h sau đây:
M sgBox(’T h is is the Inheritecl formỉ")
5 H iển th ị lạ i Form 2 và sau đó th ử n h á p dôi các n ú t OK v à Cancel
tù y biến nó b ằng nhữ ng cách khác
6 Mở rộng form
N goài việc chỉnh sửa kích cỡ, b ạn có th ể th a y đổi vị tr í v à các đặc điểm h iể n th ị hoặc đặc điểm h o ạ t động k h ác của fonn Tuy n h iê n
Trang 71 5 0 C h ư ơ n g 16: Thừa kế c á c form và tạo c á c class cơ sở
nếu b ạn sử dụng cửa sổ P ro p erties để tùy biến m ột form, hộp d anh
sá ch Object tro n g cửa sổ P roperties hiển th ị form m à form h iệ n
Bây giờ xác lập đối tượng khởi động tro n g project sa n g Form2
7 N h ấp lệ n h M y F o r m I n h e r i t a n c e P r o p e r t i e s trê n m enu Project
P roject D esigner được giới th iệu tro n g chương 14 x u ất hiện
8 T rê n ta b A pplication, n h ấ p hộp dan h sách S t a r t u p F o r m , n h ấp
F o rm 2 , v à sau đó đóng Prọịect D esigner b ằn g việc n h ấ p n ú t C lo se
Trang 8C h ư ơ n g 16: Th ử a kế c á c ỉorm và tạo c á c class cơ sỏ 1 5 1
F orm th ừ a k ế chạy th ủ tục sự k iệ n m à nó
11 N hấp OK, và sau đó n h ấp n ú t C lic k Me!
Form 2 h iể n th ị th ô n g báo form th ừ a kế
N hữ ng p điều này m in h họa là Form 2 (form th ừ a kế) có nhữ ng đặc điểm riê n g của nó (m ột n ú t Click Me! mới và m ột kích cỡ được mở rộng) F orm 2 cũng sử dụng hai n ú t (OK và Cancel) đã được thừ a k ế
từ F o rm l v à chứa m à từ P o rm l, cũng n h ư sự đại điện trực quan
ch ín h xác của các nút Điều này có n g h ĩa là b ạn có th ể k h a i th á c lại giao d iệ n người dùng v à các tín h n ă n g m ã m à trước đó b ạ n đă tạo
m à k h ô n g p h ả i làm các bước cắt v à d án vụng về Nói cách khác, bạn
đã gặp p h ả i m ột tro n g những lợi ích của OOP - tá i sử dụng và mở rộng chức n ă n g của các form, m ã chương tr ìn h và project h iệ n có
B ạn đ ã học sử dụng hộp th o ại Visual Studio In h e rita n c e Picker, hộp
th o ạ i n ày đưa r a m ột cách tiệ n lợi để chọn các đối tượng m à bạn
m uốn tá i sử dụng
12 N h ấp O K để đóng hộp th o ại và sau đó n h ấ p C lo se tr ê n form để
k ế t th ú c chưcmg trìn h
Chương tr ìn h dừng lại và IDE quay trở lại
Tạo các Class ctí sỏ riêng của bạn
In h e ritan c e P ick er quản lý tiế n trìn h thừ a k ế tro n g bài tậ p trước b ằng việc tạo m ột class mới tro n g project có tê n là Form 2 Để xây dựng class Form 2 In h e rita n c e P ick e r th iế t lập m ột liên k ế t giữa F o rm l tro n g project
My Form In h e rita n c e và form mới Sau đầy là diện mạo của class Form 2
m ới tro n g Code E ditor:
'4*
P rlv a te ỉuí» Boííoria SyVal « A»'
Sn4
Trang 9Thủ tục sự k iệ n Button3_Click m à b ạn đ ã th êm cũng là m ộ t th à n h viên của class mới N hưng h ãy n h ớ lại ră n g bản th â n class P o r m l phụ thuộc vào class System W indow s.Form s.Form cho h à n h vi v à các đặc điểm cơ
b ản của nó Do đó bài tậ p vừa rồi cho th ấ y m ột class d ẫ n x u ấ t (Form 2) có
th ể th ừ a k ế chức n ă n g của nó từ m ột class dẫn x u ất k h á c (P o rm l) m à lần lượt th ừ a k ế chức n ă n g cốt lõi của nó từ m ột class cơ sở gốc (Form ), vốn là
m ột th à n h viên của nam espace System W indow s.Form s tro n g Microsoft
N E T Fram ew ork
N goài In h erita n c e Picker, Visuai Studio cung cấp câu lệ n h In h e rits, câu
lệ n h n ày làm cho class h iệ n h à n h thừ a k ế các thuộc tín h , th ủ tục và biến của m ột class khác Để sử dụng câu lệ n h In h e rits để th ừ a k ế m ộ t form , bạn
ph ải đ ặ t câu lệ n h In h e rits ở p h ần trê n cùng của form dưới d ạn g câu lệnh đầu tiê n tro n g class Mặc dù có th ể b ạn chọn sử dụng In h e r its cho loại công việc n ày với các form, nhưng sẽ hữu dụng k h i b iế t về In h e r its bởi vì nó cỏ
th ể được sử dụng cho các class và các giao diện {interface) ngoài trừ các form, v à có lẽ th ỉn h th o ả n g b ạ n sẽ gặp p h ải nó tro n g m ả chương trìn h của các đồng nghiệp B ạn sẽ xem m ột ví dụ về câu lệ n h I n h e r its gần cuôl chương này
N h ận r a rằ n g các class là m ột khôi tạo cơ b ản n h ư vậy tro n g các chương
tr ìn h Visual Basic, cũng có th ể b ạn hỏi các class mới được tạo n h ư t h ế nào
v à nhữ ng class mới n ày có th ể được th ừ a k ế bởi các class được d ẫ n xu ất tiếp
th eo n h ư t h ế nào Để suy n g h ĩ về những k h ả n ă n g này, p h ầ n còn lại của chương này sẽ được d àn h để th ảo luận cú p háp tạo các class tro n g Visual
B asic 2010 và giới th iệ u cách các class do người dùng xác đ ịn h này có th ể được th ừ a k ế sau bởi nhiều class hcfn n h ư th ế nào Đ ồng th ờ i b ạ n sẽ học việc tạ o các class riê n g của b ạn có th ể r ấ t hữu đụng n h ư t h ế nào
1 5 2 C h ư d n g 16: Thừa kê' các form v à tạ o c á c class cơ sở
Thêm một Class mới vào Proịect
M ộ t c la s s tro n g V is u a l B a s ic là m ộ t s ự đại d iệ n h o ặ c b lu e p rin t đ ịn h n g h ĩa
c ấ u trú c c ủ a m ộ t h o ặ c n h iề u đ ố i tữ ợn g , T ạ o m ộ t c la s s c h o p h é p iDạn định
n g h ĩa c á c đ ố i tu ợ n g riê n g c ủ a b ạ n tro n g m ộ t ch ư ơ n g trin h - c á c đ ố i tư ợ n g
c ó c á c th u ộ c tín h , p h ư ơ n g thứ c, trư ờ n g v à s ự k iệ n g iố n g n h ư c á c đ ố i tư ợn g
m à c á c c o n tro l T o o lb o x tạ o trê n c á c fo rm W in d o w s , Đ ể tạ o m ộ t c la s s m ới
v à o p ro Ịe c t, b ạ n n h ấ p lệ n h A d d C la s s trê n m e n u P ro je c t v à s a u đ ó bạn
đ ịn h n g h ĩa c la s s b ằ n g v iệ c sử d ụ n g m ã ch ư ơ n g trìn h v à m ộ t v à i từ khóa
V is u a l B asic.
T ro n g bài tậ p s a u đ â y , bạn s ẽ tạ o m ộ t c h ư ơ n g trìn h n h ắ c m ộ t n h â n v iê n m ới
vê tê n , h ọ v à n g à y s in h c ủ a họ B ạn sẽ lưu trữ th ô n g tin n à y tro n g c á c th u ộ c tín h c ủ a m ộ t c la s s m ới c ó tê n là P e rs o n , v à bạn sẽ lạ o m ộ t p h ư ơ n g thứ c
Trang 10C h ư ơ n g 16: T hừa k ế các form và tạo c á c c la s s cơ sd 1 5 3
tro n g c la s s đ ể tính tuổi h iệ n tạ i c ủ a n h â n v iê n m ớ i P ro je c t n à y sẽ hướng
L ần sau cùng bạn đ ã sử dụng control D ateT im eP icker đế n h ập các
n g ày th á n g tro n g Chương 3 Đi đến chương đó nếu b ạ n m uốn xem lại các phương thức v à thuộc tín h cơ b ản của control này
5 Sử dụng control B u t to n để vẽ m ột đôl tượng n ú t bên dưới đối tượng
d ate/tim e picker
6 Xác lậ p các thuộc tín h sau đây cho các đối tượng tr ê n form
and date of b irth ”
E n ỉ e i e iT i( 3 lo y « e l i r s t n a m e , l a s t rtârT ke, drư: d a l e o l b H th
Tvcl naírte
Surtdạy , Pebudiy 26.2Ũ1D •
Trang 111 5 4 C h ư ở n g 16: Thừa k ế c á c fo rm và tạo các ciass cơ sỏ
Đây là giao diện người dùng cơ bản cho m ột form đ ịn h n g h ĩa m ột record (bản ghi) n h â n viên mới cho m ột ứng dụng thư ơng m ại Tuy
n h iên , form không được k ế t nối với m ột cơ sô dữ liệu, do đó chỉ mỗi
lầ n m ột record có th ể được lưu trữ B ạn sẽ học cách th iế t lậ p các nối
k ế t cơ sở dữ liệu tro n g Chương 18.
Bây giờ b ạ n sẽ th ê m m ột class vào project đ ể lưu trữ th ô n g tin tro n g record
Visual Studio mở m ột class module trô n g tro n g Code E d ito r và liệ t
k ê m ột íile cổ tê n là Person.vb tro n g Solution E x p lo rer cho project,
n h ư được m inh họa ở dây:
Trang 12Private IMamel As string
Private Nameíĩ As string
ở đây, b ạn k h ai báo h a i biến m à sẽ được sử dụng độc quyền bên tro n g cỉass module để lưu trữ các giá tr ị cho h a i xác lập thuộc tín h chuỗi Các biến đ â được k h a i báo b àng việc sử đụng từ k hóa P riv ate bởi vì, th e o quy ước, các n h à lập tr ìn h V isual B asic giữ riê n g tư các
b iế n class nội bộ của m ìn h - nói cách khác, k h ô n g có s ẵ n để kiểm tr a
b ên ngoài ch in h class module Đói k h i nhữ ng biến này được gọi là các field (trường) hoặc backing field (trường hỗ trợ) bởi vì chúng cung cấp sự lưu trữ cho các thuộc tính
B ư ớ c 2 : T ạ o c á c t h u ộ c t í n h
1 B ên dưới các p h ầ n k h a i báo biến, gõ n h ậ p câu lệ n h chương trìn h sau đây v à sau đó n h ấ n E N T E R :
Trang 131 5 6 C h ư ớ n g 16: T h ừ a k ế c á c fo rm v à lạ o c á c c la s s c ơ sở
Public Property RrstNameO As string
Câu lệ n h n à y tạo m ộ t thuộc tín h có tê n là P irts N a m e có kiểu
s tr in g tro n g class Đây là t ấ t cả những p b ạn cần làm để thực thi
m ột thuộc tín h dơn giản (Một backing field không được yêu cầu),
T ro n g V isual Studio 2008, n h ữ n g gì x ảy r a tiế p th e o là V isual Basic tạ o m ột khuôn m ẫu m ã (code tem p late) cho n h ữ n g p hần tử còn lạ i tro n g p h ần k h ai báo thuộc tín h N hững p h ần tử n ày chứa
m ột khô'i G et quyết định những gì m à các n h à lậ p trìn h k h ác th ấy
k h i họ k iểm t r a thuộc tín h P irstN am e; m ột khôi S e t quyết định
n h ữ n g gì xảy ra k h i thuộc tín h F irstN am e được xác lập hoặc được
th a y dổi; v à m ột câu lệ n h E n d P ro p erty đ á n h đấu sự k ế t thúc của
th ủ tục thuộc tín h Tuy n h iên , tro n g V isual S tudio 2010, những
p h ầ n tử n ày được tạo tự động k h i b ạn sử dụng câu lệ n h Property
T iến tr ìn h xảy r a nội bộ (bạn không th ấ y nó tro n g Code Editor), và tro n g tà i liệu, nó được gọi là tín h n à n g các thuộc tín h tự động thực
th i (auto-im plem ented properties) mới Điều n ày cho p h ép bạn xác
đ ịn h n h a n h m ột thuộc tín h của m ột class m à k h ô n g cần p h ải tự
v iế t các khô'i m ã G et v à Set
Các thuộc tín h tự động thực th i r ấ t tiệ n lợi cho n h ữ n g người thường xuyên tạo hoặc xử lý các class và thuộc tín h Tuy n h iê n , có những tìn h huống b ạn không th ể sử dụng các thuộc tín h tự động thực th i
m à th a y vào đó p h ải sử dụng cú p háp thuộc tín h chuẩn hoặc m ở rộng (n g h ĩa là cú ph áp m à b ạ n sử dụng thường xuyên tro n g V isual Basic 2008) N hững tìn h huống Iiày bao gồm n hư sau:
m B ạn cần ihêm m ã vào thù lục Gct hoặc Set của mộ! Ihuộc tinh (ví du khi bạn hiện lực hóa các giá trị !rong ỉnộ! khối niă Scí).
M B ạn im iốn làm cho một ỉbiiộc lính Scl trở n ê n Privatc hoặc một Ibiiộc linh Get trở nôn Public.
9 B ạn niỉiốn tạo các thuộc linh là WriteOnly boậc ReadOnly.
K B ạn muốn thêm các thuộc tinb đ ì C Ợ c tham số hóa đặc biệt.
# Bạn muổn đặt một thìiộc tinh hoặc com m ent Extensible Markìip Lan-
gitage (XML) irong m ột tníờng riông, ẩn.
Mặc dù có th ể những công dụng này dường n h ư n â n g cao hoặc bí
ẩ n vào thờ i điểm này, nhưng chúng quan trọ n g đủ để cho bạn biết
cú p h á p chuẩn cho các khối m ã G et và S e t là gì T h o ạt đầu có th ể
Trang 14bạn không cần sử dụng nó, nhưng k h i b ạ n tạ o các class và thuộc tín h cao cấp hơn riên g của m ình, có th ể b ạ n cần sử dụng nó- (Ngoài ra, tà i liệu Visual Studio H elp thư ờng tr ìn h bày những khõi m ã Get và Set n ày k h i th ảo luận các class, do đó bây giờ bạn
Set(ByVal vaíue As strin g )
Nam el = value Enđ Set
End Properíy
T rong cấu trúc này, từ k h ó a R eturn xác đ ịn h rằ n g b iế n chuỗi N am el
sẽ dược t r ả về k h i thuộc tín h P irstN am e được th a m chiếu Khôi Set gán m ột giá tr ị chuỗi vào biến N a m e l k h i thuộc tín h được xác lập ớ đây đặc b iệ t chú ý biến value được sử dụng tro n g các th ủ tục thuộc tín h đ ể đại diện cho giá trị được gán s a n g class k h i m ột thuộc tín h được xác lập Mặc dù có th ể cú pháp n ày trô n g lạ như ng đây là cách
ch ín h thức để tạo các xác lập thuộc tín h tro n g các control và các
thuộc tín h phức tạ p hơn th ậ m chí bổ sung th ê m logic chương trìn h ồ
đây đ ể te x t các giá trị hoặc thực h iệ n các tín h toán
3 Bỗn dưới câu lệ n h E n d P roperty, gõ n h ậ p m ột th ủ tục thuộc tín h thứ hai cho thuộc tín h L astN am e tro n g class L ần nữa, sau k h i b ạn gõ
n h ậ p từ khóa G et, p h ầ n lớn cấu trú c cho th ủ tục thuộc tín h sẽ được
tự động th ê m vào:
Public Property LastNameO As string
Geỉ Return Name2 Enđ Get
Set(ByVal value As Sĩrỉng) Name2 » value
C h ự d n g 16: T h ử a kẽ' các form và tạ o các class co sỏ 1 5 7
Trang 151 5 8 C h ư ờ n g 16: Thừa kế các form và tạo các class co sở
End Set End Property
Thủ tục thuộc tín h n ày tương tự n hư th ủ tục thuộc tín h dầu tiên ngoại tr ừ nó sử dụng biến chuỗi th ứ h a i (N am e2) m à b ạn đ ã k h ai báo
Để tạo m ột phương thức tro n g class thực h iệ n m ột h à n h động cụ thể,
b ạn th ê m m ột h àm hoặc m ột th ủ tục Sub vào class Mặc dù n h iều phương thức k h ô n g đòi hỏi các đôl số để h oàn th à n h công việc của chúng, nhưng phương thức Age m à b ạn đan g đ ịn h n g h ĩa đòi hỏi m ộ t đô'i số B irth d ay có kiểu D ate để h oàn th à n h việc tín h to á n của nó Phương thức n ày sử đụng phương thức S u b tra ct để lấy th ờ i gian hệ th ố n g h iệ n h à n h trừ cho ngày sin h của n h â n viên mới và nó tr ả về giá tr ị được biểu diễn b ằn g các ngày chia cho 365.25 - chiều dài xấp xỉ tro n g các ngày của m ột n ăm H àm I n t trả
về p h ầ n sô' nguyên của m ột sô', và giá trị này được tr ả về th ủ tục gọi b ằng câu lệ n h R etu rn - giống n h ư m ột h àm điển h ìn h (Để b iế t th ê m th ô n g tin về việc đ ịn h n g h ĩa h àm , xem Chương 10)
Đ ịnh n g h ĩa class h oàn tấ t, v à tro n g Code E ditor, bây giờ class P erson trô n g n h ư h ìn h m in h họa dưới đây;
Trang 16C h ư đ n g 16: Thừa kế các form và tạ o c á c c la s s c ơ sở 1 5 9
P«n«ftCỈ<iỉ < K*kroie#ỉUbu«l L s?.J ý 'J t â ì S
Ptk iđA Vr«# ^tỌỉeet r««m T|K>ls 1«»* W)f»đow Help , ^ ^
Bây giờ bạn sẽ quay trở về F o rm l và sử dụng class mứi tro n g m ột thủ tục sự kiện
• • • • • • •
Thủ thuật
Mặc dù bạn dã không làm điều này cho ví dụ này, nhưng thường sê khôn ngoan nếu thêm m ột logic kiểm tra kiểu nào đó vào các ctass module trong những proịect thậ t sự sao cho các thuộc tính hoặc phương thức được sử dụng không dúng cách sẽ không kích khdỉ các lồi run-tim e làm tạm dừng chương trình.
B ư ớ c 4 : T ạ o m ộ t đ ố i t ư Ợ n g d ự a v à o c l a s s m ớ i
1 N h ấp biổu tượng F o rm l.v b tro n g Solution E xplorer, v à sau đó n hấp
V ie w D e s ig n e r
Giao diện người dùng F o rm l xuâ”t hiện
2 N hấp đôi n ú t D is p la y R e c o r d để mở th ủ tục sự kiện B uttonl_C lick tro n g Code Editor,
3 Gõ n hập các câu lệ n h chương trìn h sau đây:
Dim Employee As New Person
Dim DOB As Date
Employee.PirstName = TextBoxl.Text
Employee.LastName = TextBox2.Text
Trang 171 6 0 C h U đ n g 16: T hử a kẽ' các fo rm và tạ o c á c class cờ sỏ
DOB = DateTimePỉckerl.Value.Date
Msg6ox(Employee.FirstName & “ ‘ & Employee.LastName _
& “ is " & Employee.Age(DOB) & " years old.")
Thường tr ìn h này lưu trữ các giá tr ị được n h ậ p bởi người dùng tro n g
m ộ t đô'i tượng có tê n là em ployee được k h a i báo là kiểu P erson Từ
kh ó a New biểu th ị rằ n g b ạn m uốn tạ o m ột in stan ce của đô'! tượng
Em ployee n gay tức th ì B ạn dã thường xuyên k h a i báo các biến tro n g sách này ' bây giờ b ạn p h ải k h ai báo m ộ t biến dựa vào m ột class m à b ạ n đã tự tạo Sau đó thường tr ìn h k h a i báo m ộ t biến D ate
có tê n là DOB để lưu trữ ngày th á n g được n h ậ p bởi người dùng, và các thuộc tín h P irstN am e và L astN am e của đối tượng Em ployee được xác lập s a n g tê n v à họ được t r ả về bởi h a i đối tượng hộp te x t
tr ê n form G iá trị được tr ả về bởi dối tượng d ate/tim e p ick er được lưu trữ tro n g b iế n DOB, và câu lệ n h chương tr ìn h sau cùng h iể n th ị một hộp th ô n g báo chứa các thuộc tín h P irstN a m e và L astN am e cộng với tuổi của n h â n viên mới như được quyết đ ịn h bởi phương thức Age phương thức tr ả về m ột giá trị số nguyên k h i biến DOB được chuyển
đ ến nố Sau k h i b ạn đ ịn h n g h ĩa m ột class tro n g m ộ t class module
sử dụng nó tro n g m ột th ủ tục sự k iệ n chỉ là m ột v ấn đề đơn giản như thường tr ìn h n ày m in h họa
4 N h â p n ú t S a v e A ll để lưu các th a y đổi v à sau đó xác đ ịn h folder
Trang 18C h ư d n g 16: T h ừ a kế các form và \ỈỊ 0 c á c class cơ sỏ 16 1
Form trô n g tương tự như sau:
M ^ rk H d ỉid lỉ IS 39 y e d rỉ ộ ld
OK
9 N hấp O K để đóng hộp thông báo v à sau đó th ử ng h iệm với m ột vài giá trị n g ày th á n g khác nhau, n h ấ p D is p la y R e c o r d mỗi lầ n bạn
th a y đổi trường B irth Date
10 Khi bạn th ử nghiệm xong với class mới, n h ấ p n ú t C lo s e tr ê n form.Môi trư ờng p h á t triể n quay trở lại
Tiến xa thêm một bước: Thừa kế một Class cơ sở
N h ư đ ã nói ở đầu chương này, có th ê m m ột th ủ th u ậ t về các class do người đùng xác đ ịn h và sự th ừ a kế Tương tự n h ư các form có th ể th ừ a k ế
zác class form, chúng cũng có th ể thừ a k ế các class m à b ạ n đ ã đ ịn h nghĩa
bàng việc sử dụng lệ n h Add Class v à m ột class mođule
Cơ cấu để th ừ a k ế m ột class cơ sở (bố) là sử dụng câu lệ n h In h e rits để aao h à m class được đ ịn h n g h ĩa trước đó tro n g m ột class mới Sau đó bạn
Trang 19có th ể bổ sung th ê m các thuộc tín h hoặc phương thức vào class d ẫn xuất (con) đ ể p h â n b iệ t nó với class cơ sd Có th ể điều này dường như n g h e có vẻ hơi trừ u tượng, do đó h ãy th ử m ột ví dụ.
T rong b à i tậ p sau đây b ạn sẽ chỉnh sửa project My P erson C lass sao
tiê n , b ạ n sẽ th ê m m ộ t class th ứ h a i do người dùng đ ịn h n g h ĩa có tê n là
T each er vào class module P erson C lass mới n ày sẽ th ừ a kê' thuộc tín h
F irstN am e , thuộc tín h L astN am e và phương thức Age từ class P e rso n và
sẽ bổ sung th ê m m ột thuộc tín h có tê n là G rade đ ể lưu trữ lớp m à giáo viên mới dạy
n h ậ p phưcmg thức và các thuộc tín h m à b ạ n đã định n g h ĩa tro n g class Person
3 Gõ n h ậ p đ ịn h n g h ĩa class sau đây tro n g Code E ditor N hư trước đó sau k h i b ạn gõ n h ậ p từ khóa G et và n h ấ n E N T E R , m ột sô' cấu trúc
P ro p erty sẽ được cung cấp cho bạn:
Public Class Teacher
Inherits Person Prỉvaíe Level As Short Public Property GradeO As Short
G6t
Return Level End Get
Set{ByVal value As Short) Level = value
End Set
1 6 2 C h ư đ n g 16: Thửa kẽ' các form và tạ o các cíass cơ sở
Trang 20C h ư ò n g 1 6 : T h ừ a k ế c á c to rm v à tạ o c á c c la s s c ơ s ở 1 6 3
Enđ Property End Class
Câu lệ n h In h e rits liên k ế t class P erso n với class mới này, bao gồm
tấ t cả các biến, thuộc tín h và phương thức của nó N ếu class Person
đ ã được đ ặ t tro n g m ột module hoặc project riê n g b iệt, b ạ n có th ể
n h ậ n d ạng vỊ trí của nó b ằn g việc sử dụng m ột sự chỉ đ ịn h nam espace, tương tự n hư b ạn n h ậ n d ạng các class k h i b ạ n sử dụng câu lệnh
Im p o rts ở p h ầ n tr ê n cùng của m ột chương tr ìn h sử dụng các class tro n g các th ư viện class -NET F ram ew ork v ề cơ bản, T ea ch er class
đã được đ ịn h n g h ĩa là m ột kiểu đặc b iệ t của class P erso n - ngoài các thuộc tín h F irstN a m e và L astN am e, class T ea ch er có m ộ t thuộc tín h G rade ghi chép tr ìn h độ m à giáo viên dạy
Bây giờ b ạn sẽ sử dụng class mới tro n g th ủ tục sự k iệ n B uttonl_C lick
4 H iển th ị th ủ tục sự k iệ n B uttonl_C lick tro n g F o rm l
T hay vì tạo m ột b iế n mới để chứa class T eacher, b ạ n chỉ việc sử dụng y nguyên biến Em ployee - sự k h ác b iệ t duy n h ấ t sẽ là bây giờ bạn có th ể xác lập m ột thuộc tín h G rade cho n h â n viên mới
5 C h ỉn h sửa th ủ tục sự k iệ n Button_Click n h ư sau (Các dòng được tô bóng là các dòng m à b ạn cần th a y đổi)
Dim Employee As New Teacher
Dim DOB As Date
Employee.PirstName a TextBoxl.Text
Employee.LastName =» TextBox2.Text
DOB = DateTimePickerl.Value.Date
Employee.Grade = lnputBox(’‘W hat grade đo you teach?” )
MsgBox(Employee.FirstName & " “ & Employee.LastName _
& ‘‘ teaches građe “ & Empíoyee.Grade)
T rong ví dụ này, p hép tín h tuổi h iệ n tạ i đã được loại bỏ - phương thức Age không được sử dụng - như ng điều này được thực h iệ n chỉ để
giữ th ô n g tin ở mức tối th iểu tro n g hộp th ô n g báo K hi b ạ n định
n g h ĩa các thuộc tín h và phương thức tro n g m ộ t class, b ạ n không được yêu cầu sử dụng chúng tro n g m ã chương trìn h
Bây giờ b ạ n sẽ chạy chương trìn h
Trang 211 6 4 C h ư ớ n g 16: Thừa k ế các form v à tạo c á c c la s s c ơ sỏ
F orm n h â n viên mới mở tr ê n m àn hình
E ntar natne, iàtỉ Dốme, ând date QÍ brtK
Trang 22C h ư ơ n g 16: Thừa kế c á c form v á tạ o các class cơ sỗ 1 6 5
M « r' t« ach e5 g rad e 3
O K
11 T hử nghiệm với th ê m m ột vài giá tr ị nếu b ạ n th íc h v à sau đó
n h ấ p n ú t C lo s e trê n form
Chương tr ìn h đừng lại và môi trường p h á t triể n quay trở lại Bạn
đ ã làm việc xong với các class v à sự th ừ a k ế tro n g chương này
Thử nghiệm ỉhỗm nữa với OOP
N ếu bạn d ã th íc h th ú s ự th â m n h ậ p n à y v à o c á c k ỹ th u ậ t v iế t m ã định
h u ớn g đối tư ợ n g , n h iề u đ iề u v u i th ú nữa đ a n g c h ờ b ạ n tro n g V is u a l B a sic
2 0 1 0 , m ộ t n g ô n n g ữ O O P th ậ t sự Đ ặ c b iệ t, c ó th ể b ạ n m u ố n th ẽ m c á c sự kiện v à o c á c đ ịn h n g h ĩa c la s s , tạ o c á c g iá trị th u ộ c tin h m ặ c đ ịn h , k h a i báo
v à sử d ụ n g c á c k iể u đ ư ợ c đ ặ t lẽ n v à c á c k iể u v ô d a n h , v à th ử n g h iệ m vớ i
m ộ t tính n ă n g đ a hình đ ư ợ c g ọ i là q u á tải p h ư ơ n g th ứ c (m e th o d o v e rlo a d -
in g ) N h ữ n g tính n ă n g n à y và n h ữ n g tính n ă n g O O P k h á c c ó th ể đ ư ợ c kh ả o sất b ằ n g v iệ c sử d ụ n g tà i liệ u V is u a l s tu d io H e lp h o ặ c b ằ n g v iệ c tham
kh ả o m ộ t s á c h n â n g c a o v ề lậ p trìn h V is u a l B a s ic (X e m p h ụ lụ c d ể tham
kh ả o m ộ t d a n h s á c h đ ọ c ) B ạ n c ũ n g sẽ th ấ y rằ n g m ộ t s ự h iể u b iế t toàn
d iệ n v ề c á c c la s s v à c á c h c h ủ n g đ ư ợ c tạ o n h ư th ế n à o sẽ g iú p ích c h o bạn khi bạn tiế n s â u h ơ n v à o .N E T F ra m e w o rk v à n h ữ n g c h ủ đề n â n g c a o như lập trin h c ơ s ở d ữ liệ u Đ ố i v ớ i m ối q u a n hệ g iữ a O O P v à c á c c ơ s ở d ữ liệu tro n g V is u a l B a s ic , h ã y xem P h ầ n IV.
Tham khảo nhanh chương 16
xác định một tên cho form thừa k ế và sau đó nhấp Add Sử dụng Inheritance Picker để chọn form m à bạn muốn thừa
k ế và sau đó nhâ'p OK
Chú ý rằng để dủ điều kiện thừa kế, các form cơ sở phải được biên tập dưới dạng các ílle exe hoặc đll Nếu bạn muốn thừa k ế một form vôn không phải
là một th à n h p hần trong project hiện hành, form phải được biên dịch dưới dạng một ílle dll
Trang 23Tùy biến một form thừa k ế Thêm các control Toolbox vào form và
xác lập các xác lập thuộc tính Chú ý rằng bạn sẽ không thể xác lập các thuộc tín h của những đối tượng thừa k ế trên form Những đôl tượng này được nhận dạng bằng các biểu tượng nhỏ và không được kích hoạt
nhấp Add Đ ịnh nghĩa class trong một class module bàng việc sử dụng mã chương trình
khác kiểm tr a class của bạn Ví dụ:Private N a m e l A s S trin g
P u blic P ro p e rty F irslN a m e () A s String Get
Return N a m e l
E n d Get Set{B yV al value A s S tring )
Name1 » value
E n d Set
End P ropertyChú ý rằng dòng đầu tiên trong ví dụ này (chứa câu lệnh Property) là tấ t cả những gì m à có th ể bạn cần nhập nếu bạn tạo một thuộc tín h mới có vài xác lập tùy ý Nói cách khác, Visual Studio
2010 tự động n h ận biết từ khóa Prop- erty khi bạn gõ nhập nó và sử dụng tính năng các thuộc tín h tự động thực thi (auto-implemented property) mới để tạo một định nghĩa thuộc tín h cơ sở cho bạn Tuy nhiên, chương này đă trình bày
cú pháp Get và Set hoàn chỉnh bởi vì nó hữu dụng trong nhiều tìn h huống viết
mã thưc tế
1 6 6 C h ư ở n g 16: Thừa kế c á c form v à tạo c á c c la s s cơ sở
Trang 24C h ư ơ n g 16: Thừa k ế các form và tạ o các class Cổ sò 1 6 7
Tạo một phương thức mới
trong class
Khai báo một biến đối tượng để
sử dụng class
Xác lập các thuộc tính cho một
biến dối tượng
Thừa k ế một class cơ sở trong
D ím E m p lo y e e A s N e w P e rso n
Sử dụng cú pháp thông thường để xác lập các thuộc tín h đổi tượng Ví dụ:
E m p lo y e e R rs tN a m e = T e x tB o x l.T e x t
Tạo một class mới và sử dụng từ khóa Inherits để k ết nhập các định nghĩa class của class cơ sở Ví dụ:
E n d S et
E n đ P ro p e rty
E n ỡ C la ss
Trang 251 6 8 C h ơ d n g 17: Làm v iệ c với c á c m á y in
Làm việc với cóc máụ in
Sau k h i hoàn th à n h chương này, b ạ n s ẽ có thể:
K In đồ họa ti'( một chương trình Visual Basic.
* In text từ một chĩíơng trình Visual Basic.
• ỉn nhiều tài liệu.
u Tạo các hộp thoại Print, Page Setup, và Print Prenieu’ trong chương trình.
Trong các p h ầ n sau đây, b ạn sẽ h o àn th à n h việc k h ảo s á t th iế t k ế v à các th à n h p h ần giao diện người dùng b ằ n g việc học cách
th ê m sự hỗ trợ m áy in vào các ứng dụng W indow s M icrosoft
V isu a l B a sic 2 0 1 0 hỗ tr ợ v iệ c in b à n g c la s s P r in tD o c u m e n t C la ss
P rintD ocum ent và nhiều phương thức, thuộc tín h và cìass hỗ trợ của nó xử
lý việc gởi te x t v à h ìn h ả n h đến m áy in
T rong chương này, b ạn sẽ học cách in đồ họa v à te x t từ các chương trìn h Visual Basic, quản lý các tá c vụ in nhiều tra n g v à th ê m các hộp th o ạ i in và giao d iệ n người dùng Chương này là m ột tro n g n h ữ n g chương hữu dụng
n h ấ t tro n g sách, với nhiều m ã thực tiễ n m à b ạn có th ể k ế t n h ậ p ngay tức
th ì vào các project lập trìn h thực tiễn Hỗ trợ in k h ô n g tự động x u ấ t hiện
Trang 26tro n g Visual Basic 2010, nhưng các thường tr ìn h tro n g chương n ày sẽ giúp
b ạ n in các tài liệu te x t dài hơn v à h iể n th ị các h ộ p th o ạ i hữu dụng chẳng
h ạ n n h ư Page Setup, P rin t, và P r in t Previevv từ b ên tro n g các chương trìn h Chương này sẽ b ắt đầu với hai thường tr ìn h in r ấ t đơn g iả n đ ể trìn h
b ày cho bạn những điểm cơ b ản v à sau đó đi đ ến n h ữ n g điểm phức tạ p hơn
Sử dụng Class PrintDocument
H ầu h ế t các ứng dụng W indows cho phép người dùng ìn các tà i liệu sau
k h i họ tạ o và bây giờ có th ể b ạn đ ang tự hỏi việc in làm việc n h ư t h ế nào tro n g các chương trìn h Visual Basic Đây là m ột lĩn h vực nơi Visual Basic
có nhiều k h ả n ăn g và sự lin h hoạt, nhưng sự tin h vi kỹ th u ậ t ấ n tượng này đòi hỏi m ột cái giá nhỏ Tạo dữ liệu đầu r a in từ các chương tr ìn h Visual
B asic không p h ải là m ột tiế n trìn h b ìn h thường, v à kỹ th u ậ t m à b ạ n sử dụng phụ thuộc vào loại và lượng dữ liệu đầu r a in m à b ạ n m uốn tạo Tuy
n h iên , tro n g mọi trường hợp, cơ cấu cơ b ản điều ch ỉn h việc in tro n g Visual
B asic 2010 là class PríntD ocum ent m à b ạn có th ể tạ o tro n g m ột project
b ằn g hai cách:
# Bằng cách thêm control PrinlDocument vào một form
• Bằng cách định nghĩa nó bằng lập trình bằng một vài dòng m ã Visuaỉ
Basic
Class PrintD ocum ent được đặt tro n g nam espace S ystem D raw ing.Printing,
N am espace System D raw ing.Printing cung cấp m ột số class hữu dụng để in
te x t và đồ họa, k ể cả class P rin terS ettin g s chứa các xác lập in m ặc định cho
m ộ t m áy in; class P ag eS ettin g s chứa các xác lậ p in cho m ộ t tr a n g cụ th ể và
d a s s PrintPageE ventA rgs chứa thông tin sự kiện về tra n g sắp in N am espace
S y siem D râw in g rrin tin g dược tự động k ế t n h ập vào project Để làm cho dề
th a m chiếu các class in và những giá trị quan trọ n g k h ác tro n g nam espace
n ày hơn, thêm câu lệnh Im ports sau đây vào p h ần trê n cùng của form
Imports System,Dravvlng.Printing
Để học cách sử dụng class PrintD ocum ent tro n g m ột chương trìn h , hoàn
th à n h bài tậ p sau đây, bài tập này hướng d ẫn b ạ n cách th ê m m ột control PrintD ocuroent vào project v à sử dụng nó để in m ột file đồ họa trê n h ệ thống
Trang 27Đôi tượng hộp te x t sẽ được sử đụng để gõ n h ậ p tê n của file ả n h m à
b ạn m uốn mở M ột hộp te x t m ột dòng sẽ đáp ứng đủ nhu cầu
4 Sử đụng control B u t t o n để vẽ m ột đôl tượng n ú t b ên dưới hộp text.Đôi tượng n ú t n ày sẽ in file đồ họa B ây giờ b ạ n sẽ th ê m m ộ t control P r i n t D o c u m e n t
5 Cuộn xuông cho đến k h i b ạn th ấ y ta b P rin tin g của Toolbox, v à sau
đó n h ấ p đôi control P r in t D o c u m e n t
N hư control T im er, control P rintD ocum ent ẩ n đì vào th ờ i gian chạy
do đó nó được đ ặ t tro n g com ponent tra y (khay th à n h p h ần ) bên dưới
fo n n k h i b ạ n tạ o nó, Bây giờ project tru y cập class P rintD ocum ent
F orm trô n g tương tự n h ư sau:
“Type the nam e of a graphic file to p rin t,”
“C :\V b l0 sb s\C h a p l5 \S u n ic o ”
“P rin t Graphics”
“P rin t G raphics”
Trang 28C h ư ơ n g 17: Làm v iệ c vó i c á c m á y in 1 7 1
(m ột ản h bitm ap, biểu tượng, m etafile, fíle JPEG,.„)
7 N hấp đôi n ú t P r i n t G r a p h ic s
Thủ th u ậ t sự kiện B uttonl_C Iick xu ất h iệ n tro n g Code E ditor
8 Di chuyển điểm chèn đ ến p h ần trê n cùng của m ã của form và sau đó
gõ n h ập câu lệnh chương trìn h sau dây:
Im ports.System D raw ing.Printing
Cáu lện h Iraports này k h ai báo nam espace System D ravving.Printing, làm cho dễ th am chiếu các class in hơn
9 Bây giờ di chuyển diểm chèn xuống th ủ tục sự k iệ n B uttonl_C lick
v à gõ n h ậ p m â chương tr ìn h sau đây:
' Print using an error handler to catch problems
Try
AđdHandler PrintDocum entl.PrintPage, AddressOt Me.PrintGraphic PrintDocum entl.PrintO ‘ print graphic
Catch ex As Exception ‘catch printing exception
MessageBox.Show(“ Sorry— there is a problem p rin tin g ” , ex.ToStringO) End Try
-S a u khi b ạ n gõ n h ậ p m ã nà y , bạn sê th â y m ộ t đ ườ ng g ồ g h é bên dưới M e PrintG raph ic b iể u thị m ộ t lỗi Đ ừ n g b ậ n tâm , b ạ n s ẽ thêm th ụ jụ cJ’rm t^ạphỊc_^Ị^c_kệ_ỊỊệ£.
Mã này sử dụng câu lệ n h A ddH andler, câu lệ n h n ày xác đ ịn h rằ n g
th ủ tục sự kiện P rin tG rap h ic (còn được gọi là phương thức xử lý sự
k i ệ n ) n ê n được g ọ i k h i sự k i ệ n P r i n t P a g e c ủ a đ ế i tư ợ n g
P rin tD o cu m en tl kích khởi M ột th ủ tục sự k iệ n (event procedure) là
m ột cơ cấu xử lý các sự kiện đại diện cho n h ữ n g h à n h động quan trọ n g tro n g vòng đời của m ột đô'i tượng B ạn đ ã là m việc với các th ủ tục sự k iệ n m ột vài lần Ví dụ, b ạn vừa tạ o th ủ tục sự k iệ n Click cho đối tượng B u tto n l Câu lệ n h A ddH andler là m ộ t cách để "nôi dây"
m ột th ủ tục sự k iệ n b ằng th ủ công
Trong trường hợp này, th ủ tục sự kiện đ an g xác đ ịn h liên quan đến các dịch vụ in, và yêu cầu có th ô n g tin cụ th ể về tr a n g cần in, các xác
Trang 29lậ p m á y in h i ệ n h à n h v à n h ữ n g th u ộ c t í n h k h á c củ a c la s s
P rintD ocum ent về m ặ t kỷ th u ậ t, toán tử A ddressO Í được sử dụng
đ ể n h ậ n d ạn g th ủ tục sự k iện P rin tG rap h ic b ằ n g việc q u y ế t đ ịn h địa chỉ n ộ i bộ của nó và lưu trữ nó Toán tử A ddressO f tạ o ngầm định
m ộ t đôi tượng được gọi là m ột delegate (ủy n h iệ m h àm ) chuyển tiếp các lệ n h gọi đến th ủ tục sự k iệ n th ích hợp k h i m ộ t sự k iệ n xảy ra.Dòng th ứ b a của m ã m à b ạn vừa gõ n h ậ p sử dụng phưcmg thức P rin t của đối tượng P rin tD o c u m en tl d ể gởi m ộ t yêu cầu in đ ế n th ủ tục sự
k iệ n P rin tG rap h ic Yêu cầu in n ày dược đ ặ t b ên tro n g m ộ t khối m ã
T ry đ ể đón b ắ t b ấ t kỳ sự cô' in m à có th ể xảy r a tro n g h o ạ t động in Phương thức xử lý lỗi Try C atch đã được giới th iệ u tro n g Chưcmg 9
ở đây biến ex được k h ai báo là kiểu E xception để n h ậ n được một
th ô n g báo chi tiế t về b ấ t kỳ lỗi xảy ra
10 Cuộn ở tr ê n th ủ tục sự kiện B u tto n l_ C lick tro n g Code E d ito r sang
k h o ản g trố n g k h a i báo k h á i qu át b ên dưới câu lệ n h Public Class
F o rm l Sau đó gõ n h ậ p th ủ tục sự kiện P rin tG ra p h ic sau đây;
'Sub for printing graphic
Private Sub PrintGraphic(ByVal sender As Obịect
ByVal ev As PrintPageEventArgs) ' Create the graphic usỉng Drawlmage ev.Graptìjcs,Drawlmage(lmage.FromFile(Text8ox1 Text), ev.Graphics.VisibleClipBounds)
' speciíy that th is is the last page to prlnt ev.HasMorePages = False
End Sub
T hường tr ìn h n à y xử lý sự kiện in được tạo r a bởi phương thức
P rin tD o c u m en tl.P rin t Thủ tục Sub đ ã được k h a i báo bên tro n g m ă của form, như ng b ạn cũng có th ể k h ai báo Sub là m ộ t th ủ tục đ a n ăn g tro n g m ột module Chú ý rằ n g biến ev tro n g d an h sách đối sô' cho thủ tục P rin tG rap h ic Biến này là p hần tử m ang th ô n g tin quan trọ n g về tra n g in h iệ n h à n h v à nó được k h ai báo là kiểu P rin tP ag eE v en tA rg s
m ột class tro n g nam espace S ystem D raw ing.P rinting
Đ ế t h â t s ự i n đổ h ọ a , th ủ tụ c s ử d ụ n g p h ư ơ n g th iíc
G raphics.D raw Im age được k ế t hợp với tra n g in h iệ n h à n h đ ể tải
m ột íile đồ họa b ằn g việc sử dụng tê n file được lưu tr ữ tro n g thuộc
Trang 30C h iư ơ n g 17: Làm việc với các m á y in 1 7 3
tín h T ex t của đôi tượng T extB oxl (Theo m ặc định, thuộc tín h này được xác lập sang C :\V b l0 s b s \C h a p l5 \S u n ic o - cùng m ột biểu tượng
m ặ t trờ i được sử dụng tro n g Chương 15 - n h ư n g b ạ n có th ể th a y đổi giá t ặ này vào thời gian chạy và in b ấ t kỳ íile ả n h m à b ạ n thích) Sau cùng, thuộc tín h ev.H asM orePages được xác lậ p sa n g F alse sao cho V isual Basic hiểu rằ n g nội dung in (p rin job) không có nhiều tran g
11 N hấp n ú t S a v e All tr ê n th a n h công cụ S ta n d a rd dể lưu các th ay đổi và sau đó xác dịnh folder C :\V b l0 s b s \C h a p l7 ỉàm vị trí
Bây giờ bạn sẵn sàng chạy chương trìn h Trước k h i là m điều này, có
th ể b ạn muôn định vị m ột vài file đồ h ọ a tr ê n h ệ th ố n g m à b ạn có
th ể in (Bây giờ chỉ việc ghi r a các đường d ẫ n v à gõ n h ậ p chúng khi bạn te s t project)
2 B ịt m áy in v à sau đó xác n h ậ n rằ n g nó Online v à có giấy
3 Nấu b ạ n đã cài đ ặ t các íĩle m ẫu tro n g folder C :\V b lO sb s m ặc định, biy giờ hãy n hấp n ú t P rin t G raphics để in biểu tượng Sun.ico
Niu b ạ n đã không sử dụng vị tr í file m ẫu m ặc đ ịn h , hoặc nếu bạn miô'n in m ột íìle ản h khác, chỉnh sửa đường d ẫn hộp te x t m ột cách plù hợp và sau đó n h ấ p n ú t P r i n t G r a p h ic s
Trang 31P hư ơng thức Dravvlmage mở rộng ả n h đồ họa s a n g k íc h cô tô i đa
m à m áy in có th ể tạo trê n m ột tra n g rồi sau đó gởi ả n h đến m áy
in ("Tính n ă n g mở rộng" này lấp đầy tra n g và cho b ạ n xem ản h được kỹ hcm) T hú th ậ t, điều này có lẽ không th ú vị cho b ạn , như ng
ch ú n g ta sẽ đi sâu vào chi tiế t phức tạ p h ơ n tro n g giầy lát (Nếu
b ạ n m uốn ch ỉn h sửa vị tr í hoặc kích cỡ của dữ liệu đầu ra , hãy tìm
k iếm tà i liệu V isual Studio H elp để tìm topic "G raphics.D raw Im age
M ethod", n g h iên cứu các biến th ể đốỉ số k h ác n h au có s ẵ n rồi sau đó
c h ỉn h sữa m ã chương trìn h )
N ếu b ạ n xem kỳ, b ạn th ấ y hộp th o ại sau đây x u ất h iệ n k h i Visual
B asic gdi nội dung in san g m áy in:
1 7 4 _ C h ư ớ n g 17: Làm v iệ c v ó i các m áy in
H ộp tr ạ n g th á i (statu s box) n ày cũng là m ột s ả n p h ẩm của class
P rin tD o cu m en t và nó cung cấp cho người dùng m ộ t giao diện in trô n g chuyên nghiệp, k ể cả số tra n g cho mỗi tra n g in
4 Gõ n h ậ p th ê m các đường dẫn nếu b ạn th íc h rồi sau đó n h ấ p n ú t
In T ext từ m ột đôi tưọ^g hộp Text
B ạn đ ã xem sơ lược qua control P rintD ocum ent v à việc in đồ họa Bây giờ h â y th ử sử dụng m ột kỷ th u ậ t tương tự để in nội dung của m ột hộ p tex t
tr ê n m ộ t form V isual Basic Trong bài tập sau đây b ạn sẽ xây dựng một
p ro ject đơn giản in te x t b ằ n g việc sử dụng class P rintD ocum ent, n h ư n g lần
n ày b ạ n sẽ đ ịn h n g h ĩa class b ằn g việc sử dụng m ã chương trìn h m à không
p h ả i th ê m control P rintD ocum ent vào form Ngoài ra, b ạn sẽ sử dụng phương thứ c G rap h ics.D raw S trin g đ ể gởi toàn bộ nội dung của m ột đối tượng hộp
te x t đ ến m áy in m ặc định
Trang 32Q ế i i c U
-Chương trình sau đ â y được thiếl k ế đ ể in m ộ t ư a n g te x l h oặc ít hơn Đê’ in n hiều tra n g , b ạ n c ầ n bổ sun g th ê m m ã chương trình m à sẽ được khảo s á t sau trong chương n à y M ụ c đ íc h ở đ â y là giới th iệ u
c h o bạn m ỗi lầ n m ộ t tính năng in.
C h U ò n g 17: Làm việc với các m áy in 1 7 5
N hản này sẽ h iể n th ị m ột dòng các hướng d ẫn cho người dùng
3 Sử dụng control T e x tB o x dể vẽ m ột đối tượng hộp te x t b ê n dưới đôl tượng nhãn
Đôi tượng hộp te x t sẽ chứa te x t m à b ạ n m uốn in
4 Xác lập thuộc tín h M ultiline cùa đô'i tượng hộp te x t sa n g T rue v à sau
đó mở rộng hộp te x t sao cho nó đủ lớn đ ể n h ậ p m ột số dòng tex t
5 Sử dụng control B u t t o n để vẽ m ột đô’i tượng n ú t b ên đưới hộp tex t Đối tượng n ú t n ày sẽ in file text
6 Xác lập các thuộc tín h sau đây cho các đối tượng tr ê n form
th en click P rin t Text,”
Trang 33T hủ tục sự kiện B uttonl_C lick x u ất h iệ n tro n g Code E ditor
8 Cuộn đ ế n n gay p h ầ n trê n cùng của m ã của form v à sau đó £Õ n h ập
p h ầ n k h a i báo Im p o rts sau đây:
Imports System ,D raw ing.Printing
Điều n à y làm cho dễ th a m chiếu các class hơn tro n g nanespace
S y stem D raw in g P rin tin g chứa class P rintD ocum ent
9 Bây giờ cuộn trở lạ i xuông th ủ tục sự k iệ n B u tto n l_ C lick vồ sau đó
gõ n h ậ p m ã chương trin h sau đây:
' P rint using an error handler to catcti problems
Try
D im P rín tD o c A s N ew P rin tD ocu m en t
A đ d H a n ổ le r P rintD oc.P rintP age, A d d re ssO t M e P rin tT e x t
P rin tĐ o c P rin tO ‘print text
C atch ex A s E x ce p tio n ‘c a ỉc h printíng e x ce p ỉio n
MessageBox.Show('‘Sorfy— there is a problem p rin tin g ” , ex.ToStrngO) End Try
Các dòng mới hoặc được th a y đổi từ chương tr ìn h P r i n t G r» p h ic s được tô bóng T hay vì th ê m m ột control P rin tD o cu m en t vài form
lầ n n à y b ạ n đơn giản tạ o P rintD ocum ent b ằn g lậ p tr ìn h b ằỉg cách
Trang 34sử dụng từ khóa Dim v à kiểu P rintD ocum ent được đ ịn h n g h ĩa tro n g riamespace S ystem ,D raw ing.P rinting Từ th ờ i điểm n ày trở đi, biến PrintDoc đại diện cho đôì tượng P rintD ocum ent v à được sử dụng để khai báo phương thức xử lý lỗi v à để in tà i liệu te x t Chú ý rằ n g để làm cho rỗ ràng, th ủ tụ c Sub đã được đổi tê n để xử lý sự kiện in
P rintT ext (thay vì P rintG raphic)
10- Cuộn ở trê n th ủ tục sự k iệ n B uttonl_C lick tro n g Code E d ito r sang vùng k h a i báo k h á i quát Gõ n h ập th ủ tục sự k iệ n P rin tT e x t sau đây:
'Sub for printing text
Private Sub PrintText(ByVal sender As Object, _
T hay vì sử dụng G raphics,D raw lm age k ế t x u ấ t m ộ t ả n h đồ họa,
b ạn p h ả i sử dụng G ra p h ic s.D ra w S trin g in m ộ t chuỗi te x t T ext được xác đ ịn h tro n g thuộc tín h T ext của đối tượng hộp te x t để in
Diột số đ ịn h d ạng form cơ b ản (Arial, 11 point, re g u la r style, màu đen), và các tọa độ (x, y) (120, 120) trê n tr a n g đ ể b ắ t đầu vẽ N hững thông sô' này sẽ cho dữ liệu in m ột diện m ạo m ặc đ ịn h tương tự như
h ổ p t e x t t r ê n m à n h ì n h N h ư l ầ n s a u c ù n g , t h u ộ c t í n h ev.H asM orePages cũng được xác lậ p sa n g F alse để biểu th ị rằn g nội dung in không có n h iều tran g
11 N hâp n ú t S a v e A ll tr ê n th a n h công cụ để lưu các th a y đổi v à sau
Trang 353 Gõ n h ậ p m ột số te x t tro n g hộp text N ếu b ạ n gõ n h ậ p n h iề u dòng,
h ây bảo đảm đưa vào m ột ký tự trở về đầu dòng ở cuối mỗi dòng.Việc bao bọc (wrap) k h ô n g được hỗ trợ tro n g chương tr ìn h tr ìn h diễn
n ày - các dòng r ấ t dài có th ể sẽ mở rộng r a b ên ngoài lề phải (Lần nữa, v â n đề n ày sẽ được giải quyết sớm) Form trô n g tương tự như sau:
hihsiexi b0Xấ3bfMi,ihỆncld( Pirri TnL
Aỉ«v*£ngbth krtộcAliedỡ^ Gieaỉ
In các File Text nhiều trang
Các kỷ th u ậ t m à b ạ n đ ă vừa học hữu dụng cho các tà i liệu te x t đơn giản, như ng chúng có m ột vài giới h ạ n quan trọng Đầu tiê n , phương thức m à
b ạn d ã sử đụng không cho ph ép các dòng dài - nối cách khác, te x t mở rộng
Trang 36ra b ê n ngoài lề p h ải Không giông n h ư đối tư ợ ng hộ p te x t, đõ'i tượng
P rin tD o cu m en t không tự động bao bọc các dòng k h i tiế n đ ến m ép của giấy,
N ếu b ạ n có các file không chứa các ký tự quay trở về đầu dòng ở cuối các dòng, b ạn sẽ cần v iết m ã xử lý những dòng đài này
Giới h ạ n th ứ h a i là chưcmg tr ìn h P rin t T ex t k h ô n g th ể in nhiều tra n g
te x t T h ậ t vậy, nó th ậ m chí không hiểu m ột tra n g te x t là gì - th ủ tục in chỉ đơn giản gởi te x t sang máy in mặc định N ếu khối te x t quá dài không
n ằm vừa trê n m ột tra n g , tex t th êm vào sẽ k h ô n g được in ra Để xử lý
n h iều b ả n in, b ạn cần tạo một tra n g te x t ảo được gọi là P rin tP a g e rồi sau
đó th ê m te x t vào đó cho đến k h i tra n g dầy K hi tr a n g đầy, nó được gởi đến
m áy in v à tiế n tr ìn h này tiếp tục cho đến k h i không còn te x t đ ể in nữa
Và lúc đó công việc in k ế t thúc
Nếu việc giải quyết h a i h ạn c h ế này n ghe có vẻ phức tạ p th ì dừng vội
t h ấ t vọng - có m ột vài cơ cấu tiệ n lợi giúp b ạn tạo các tr a n g te x t ảo tro n g
V isual Basic và giúp b ạn in các file te x t có các dòng dài v à m ột sô’ tra n g tex t Cơ cấu đầu tiê n là sự kiện P rin tP a g e xảy r a k h i m ột tra n g được in
P rin tP a g e n h ậ n m ột dối sô' có kiểu P rin tP a g eE v en tA rg s cung cấp cho bạn kích cỡ v à các đặc điểm của tra n g m áy in h iệ n h à n h M ột cơ cấu khác là phương thức G raphics.M easureString Phương thứ c M easu reS trin g cớ th ể được sử dụng đ ể quyết đ ịn h bao n h iêu ký tự và dòng có th ể n ằm vừa tro n g
m ột vùng h ìn h chữ n h ậ t của trang- B ằng việc sử dụng n h ữ n g cơ cấu n ày và
n h ữ n g cơ cấu khác, tạ o các thủ tục xử lý các nội dung in nhiều tra n g th ì tưcmg đối đơn giản
H oàn th à n h các bước sau đây để xáy dựng m ột chương trìn h có tê n là
P r in t F ile mở các file te x t của b ấ t kỳ chiều dài v à in chúng Chương trìn h
P rin t Fiỉe cũng m inh họa cách sử dụng các controỉ RichTextBox, PrintD ialog,
v à O penFileD ialog Con tro i RichTextBox là m ột p h iê n b ả n m ạ n h hơn của control ToxtBox m à b ạ n vừa sử dụng để h iể n th ị tex t C ontrol P rintD ialog
h iể n th ị m ột hộp th o ại P rin t chuẩn để b ạ n có th ể xác đ ịn h nhừ ng xác lập in khác n h au C ontrol O penPilaD ialog cho b ạn chọn m ộ t íìle te x t để in (Bạn
đ ã sử dụng O penFileD ialog ở chương 4)
Q u ả n l ý c á c y ê u c ầ u i n b ằ n g c á c c o n t r o l R ỉ c ì i T e x t B o x , O p e n P i l e D i a ỉ o g
v à P r i n t D i a l o g
1 N h ấp lệ n h C lo s e P r o j e c t trê n m enu File rồi sau đó tạo m ộ t project
W indows F o rm s Application mới có tê n là M y P r i n t F ile
M ột form trố n g m ở ra
C h ư d n g 17: Làm v iệ c với các m áy in _ 1 7 9
Trang 38C h ư ơ n s 17; Làm việ c với các máy in 18 1
Forni trô n g tương tự n h ii sau:
Prin tP ile
Ocen
P t r tr'
^ộper>Fil«0k«lg9l PntHOocumentl -lPiintDi«lo9Ỉ
B â/ giờ th ê m m ă chương trìn h cần th iế t để m ở file te x t v à in nó
8 Nỉ-âp đôi n ú t o p e n
T hi tục sự kiện btnO pen_C lick x u ất h iệ n tro n g Code Editor
9 Cuộa đến p h ầ n tr ê n cùng của form rồi sau đó n h ậ p m ã sau đây:
ím[orts System 10 ‘for PileStream class
ImỊorts System.Dravving.Printing
N hĩng cáu lệnh này làm cho dễ th a m chiếu class P ileS trea m và các class để in hơn
10 l ì chuyển cursor bên dưới câu lệ n h P u b l i c C ỉa s s P o r i n l và gõ
n h ip các p h ầ n k h a i báo biến sau đày:
Prhate PrintPageSettings As l\lew PageSettings
Pri’ate StringToPrint As string
Pri’ate PrintPoní As New Font(“ Aria!” , 10)
N h ĩn g câu lện h này đ ịn h n g h ĩa th ô n g tin quan trọ n g về các tra n g
mề sẽ được in ra
11 Cuộn đến th ủ tục sự kiện btnO pen_C lick v à gõ n h ậ p m ã chương
tr ìih sau đây:
Din PilePath As string
'Diíolay Open dialog box and select text file
OpeiPileDialogl.Rlter = "Text files ( ‘ tx í)!*.tx t’’
Trang 39'Read text file and load into RichTextBoxl Dim MyFileStream As New FìleStream(FilePath, PileMode.Open) RichTextBox1.LoadFile(MyFileStream, _
RỉchTextBoxStreamType.PlainText) MyFíleSỉream.Ciose{)
'lnitialize strìng to print StringToPrint = RichTextBoxl.Text 'Enable Print button
btnPrint-Enabled = Truẹ Catch ex As Exception 'display error messages if they appear MessageBox,Show(ex.Message)
End Try End lf
K hi người dùng n h ấp n ú t O p e n , th ủ tục sự k iệ n n à y h iể n th ị m ột hộp th o ạ i O p e n sử dụng m ột bộ lọc (íĩlter) vôn h iể n th ị chỉ các íĩlo tex t K hi người dùng chọn m ột íỉle, tê n ílle được g án sang m ột biến chuỗi public có tê n là P ile P a th được k h a i báo ở p h ầ n trê n cùng của
th ủ tục sự k iện Sau đó th ủ tục n ày sử dụng m ột phương thức xử lý lỗi Try C atch để tả i íĩle te x t vào đối tượng R ichT extB oxl Để làm dễ
d àn g tiế n tr ìn h tả i, class P ileS trea m v à c h ế độ fỉle o p e n được sử dụng, c h ế độ này đ ặ t nội dung h o àn ch ỉn h của fỉle te x t vào biến
M yP iieS tream Sau cùng, th ủ tục sự k iệ n b ậ t n ú t P rin t (b tn P rin t) sao cho người dùng có th ể in file, Tóm lại, thường tr ìn h này m d file
và b ậ t n ú t p rin t trê n íorm nhưng không in b ấ t cứ ^ cả
Bây giờ b ạ n sẽ th ê m m ã chương tr ìn h cần th iế t để h iể n th ị hộ p thoại
P r in t và in íĩle b ằ n g việc sử đụng logic giám s á t các kích thướ: của tra n g
te x t h iệ n h à n h
Trang 40C h ư ơ n g 17: Làm v iệ c v ớ i cá c m á y in 1 8 3
1 Hiển th ị lạ i form và sau đó n h ấp đôi n ú t P r i n t (b tn P rin t) để hiển thị th ủ tục sự kiện của nó tro n g C o d e E d i t o r
2 Gõ n h ập m ã chương trìn h sau đây:
lf result = DialogResult.OK Then PrintDocument1,Print() End tí
^atcti ex As Exception
'Display error message MessageBox.Show(ex.Message) ind Try
Thủ tục sự k iệ n này xác lập các xác lập in m ặc đ ịn h cho tà i liệu và
fá n n ộ i d u n g củ a đôi tư ợ n g R ic h T c x tB o x l s a n g b i ế n chuỗi ìtrin g T o P rin t (được định n g h ĩa ở p h ầ n tr ê n cùng của form ) phòng
lờ người dùng thay đổi te x l trong rich te x t box Sau đó nó mở hộp
•hoại P rin t v à cho phép người dùng điều ch ỉn h b ấ t kỳ xác lậ p in
lùng n h ấ p OK, th ủ tục sự kiện gdi nội dung in này sa n g m áy in )ằng việc gọi ra câu lệnh sau đây:
’ rintD ociim ent1.P rint{)
a H i ể n th ị lạ i form rồi sau đó n h ấp đôi đối tượng P r i n t D o c u m e n t rong com ponent tray
/is u a l S tu d io th ê m th ủ tụ c sự k iệ n P r in t P a g e cho đô'] tư ợ ng
^rin tD o cu m en tl