vb.net

218
BO˜ GIAO DUˇC VA AO TAˇO AˇI HOˇC QUO`C GIA THANH PHO` HO CH˝ MINH TRNG AˇI HOˇC KHOA HOˇC Tˇ NHIE´N KHOA CO´NG NGHE˜ THO´NG TIN ! O AN TO`T NGHIE˜P KHOA CO´NG NGHE˜ THO´NG TIN CHUYE´N NGANH : CO´NG NGHE˜ PHAN MEM e tali: TM HIE¯U MICROSOFT VISUAL BASIC.NET VA NG DUˇNG GVHD: NGUYEˆN TA`N TRAN MINH KHANG SVTH : VO HOANG ANH MSSV: 9800503 TRAN TRUNG HIE`U MSSV: 9800552 Tp. HCM 7/2002

Upload: phuong-dinh

Post on 29-Jun-2015

279 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: VB.NET

BOÄ GIAÙO DUÏC VAØ ÑAØO TAÏO ÑAÏI HOÏC QUOÁC GIA THAØNH PHOÁ HOÀ CHÍ MINH

TRÖÔØNG ÑAÏI HOÏC KHOA HOÏC TÖÏ NHIEÂN KHOA COÂNG NGHEÄ THOÂNG TIN

!

ÑOÀ AÙN TOÁT NGHIEÄP KHOA COÂNG NGHEÄ THOÂNG TIN CHUYEÂN NGAØNH : COÂNG NGHEÄ PHAÀN MEÀM

Ñeà taøi:

TÌM HIEÅU MICROSOFT VISUAL BASIC.NET VAØ ÖÙNG DUÏNG

GVHD: NGUYEÃN TAÁN TRAÀN MINH KHANG SVTH : VOÕ HOAØNG ANH MSSV: 9800503 TRAÀN TRUNG HIEÁU MSSV: 9800552

Tp. HCM � 7/2002

Page 2: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

Lôøi Caûm Ôn " ! #

Chuùng em xin chaân thaønh caûm ôn thaày Nguyeãn Taán Traàn Minh

Khang, ngöôøi ñaõ höôùng daãn chuùng em raát nhieät tình trong quaù trình thöïc hieän ñeà taøi. Xin caûm ôn taát caû caùc thaày coâ khoa CNTT, anh chò sinh vieân ñi tröôùc, caùc baïn sinh vieân cuøng khoùa ñaõ taän tình giuùp ñôõ, giôùi thieäu taøi lieäu, saùch vôû cho chuùng em trong 4 naêm hoïc qua. Maëc duø ñaõ coá gaéng vaø noã löïc trong vieäc tìm hieåu, nghieân cöùu vaø thöïc hieän ñeà taøi, nhöng do thôøi gian coù phaàn haïn cheá, noäi dung ñeà taøi khaù môùi neân vieäc thöïc hieän Ñoà Aùn seõ khoâng traùnh khoûi thieáu soùt. Raát mong nhaän ñöôïc söï ñoùng goùp yù kieán cuûa taát caû thaày coâ, anh chò vaø caùc baïn ñeå taïo ñieàu kieän cho vieäc thöïc hieän Ñoà AÙn Toát Nghieäp ngaøy caøng hoaøn chænh hôn. Xin chaân thaønh caûm ôn !. Thaùng 7 naêm 2002 Nhoùm sinh vieân thöïc hieän ñeà taøi Voõ Hoaøng Anh Traàn Trung Hieáu

Page 3: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

Lôøi Giôùi Thieäu $ % &

Trong vaøi thaäp nieân trôû laïi ñaây, coâng ngheä thoâng tin phaùt trieån moät caùch

maïnh meõ. Maùy tính ñaõ trôû neân phoå bieán, noù trôû thaønh moät coâng cuï trôï giuùp ñaéc löïc cho con ngöôøi. Haàu heát, moïi coâng vieäc vaên phoøng ñeàu ñaõ söû duïng maùy tính, phaàn meàm maùy tính. Song song beân caïnh ñoù, caùc ngoân ngöõ laäp trình ñeå taïo ra caùc phaàn meàm cuõng ngaøy caøng phaùt trieån phong phuù : ngoân ngöõ laäp trình höôùng caáu truùc, ngoân ngöõ laäp trình höôùng ñoái töôïng , ñaëc bieät laø laäp trình Web, coâng ngheä Internet� Visual Basic.NET laø moät trong soá caùc coâng cuï ñeå vieát chöông trình phaàn meàm. Ngay töø luùc sô khai, ngoân ngöõ laäp trình Visual Basic(tieàn Visual Basic.NET ) ñaõ ñöôïc Microsoft xaây döïng döïa treân cô sôû cuûa moät ngoân ngöõ laäp trình ña chöùc naêng deã söû duïng vaø ñöôïc raát nhieàu laäp trình vieân choïn laøm ngoân ngöõ chính cho mình�vaø nay Visual Basic.NET laïi ñöôïc Microsoft tung ra vôùi nhieàu tính naêng môùi nhaèm ñaùp öùng nhöõng phaàn maø Visual Basic 6.0 chöa hoå trôï ñöôïc hay chöa thoaû maõn nhöõng ngöôøi laäp trình treân theá giôùi. Vì vaäy vôùi nhöõng caùi môùi cuûa Visual Basic.NET (ví duï nhö: höôùng ñoái töôïng, laäp trình Web, ñoà hoaï,� ) seõ daãn nhöõng nhaø laäp trình ñeán vôùi nhöõng höùa heïn môùi .

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

Page 4: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

1

MUÏC LUÏC Phaàn 1..........................................................................................................................7

TÌM HIEÅU VISUAL STUDIO.NET ......................................................................7 Chöông 1 .....................................................................................................................8 GIÔÙI THIEÄU VISUAL STUDIO.NET.......................................................................8 1.1. Caùc khoái kieán taïo cuûa .NET(CLR,CTS vaø CLS) ..........................................8 1.2. Caùc thö vieän cô sôõ .NET (Base class library) ...............................................9 1.3. Nhò phaân.NET (NET assembly).....................................................................9 1.4. Vuøng döõ lieäu Meâta (MetaData)....................................................................9 1.5. Quaù trình thöï hieän luoàng coâng vieäc cuûa .NET ............................................10 1.6. Caùc khoâng gian teân (Namespace) cuûa .NET...............................................10 1.7. Visual Studio.NET........................................................................................12 Chöông 2 ...................................................................................................................18 NGOÂN NGÖÕ VISUAL BASIC.NET........................................................................18 2.1. Giôùi thieäu : ....................................................................................................18 2.2. Namespaces..................................................................................................18 2.3. Kieåu döõ lieäu..................................................................................................23

2.3.1. Haèng (Constants) ........................................................................................24 2.3.2Caùc Toaùn Töû vaø Pheùp Toaùn.........................................................................24 2.3.3Caáu truùc.........................................................................................................26 2.3.4Leänh reõ nhaùnh. .............................................................................................26

2.3.4.1 Leänh IF�THEN� ELSE ................................................................26 2.3.4.2 Leänh Switch Case.............................................................................27

2.3.5Leänh Laëp.......................................................................................................28 2.3.5.1 Leänh While Loops............................................................................28 2.3.5.2 Leänh For Loops ................................................................................29

2.3.6Maûng .............................................................................................................30 2.3.7Haøm...............................................................................................................32

Chöông 3 ...................................................................................................................36 HÖÔÙNG ÑOÁI TÖÔÏNG MÔÙI TRONG VB.NET(OOP)...........................................36 3.1. Vaán ñeà khaùi quaùt cuûa höôùng ñoái töôïng .......................................................36

3.1.1.Classes vaø Objects, nguyeân taéc Abstraction ..............................................36 3.2. Fields, Properties, Methods vaø Events, nguyeân taéc Encapsulation............37

3.2.1. Inheritance (Thöøa Keá)......................................................................39 3.2.2. Polymorphism (Ña daïng) .................................................................41

3.3. Duøng höôùng ñoái töôïng trong VB.NET.........................................................42 3.3.1.Taïo moät Class môùi ......................................................................................42

3.3.1.1. Class Keyword..............................................................................43

Page 5: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

2

3.3.1.2. Classes vaø Namespaces ...............................................................43 3.3.1.3. Taïo ra Methods.............................................................................44 3.3.1.4. Taïo ra Properties ..........................................................................45 3.3.1.5. ReadOnly vaø WriteOnly property ...............................................45 3.3.1.6. Default Properties ........................................................................45

3.3.2.Overloading methods(phöông thöùc quaù taûi) ...............................................47 3.3.3.Object Lifecycle (cuoäc ñôøi cuûa ñoái töôïng).................................................47

3.3.3.1. New method(taïo phöông thöùc môùi) .............................................47 3.3.3.2. Termination(söï hoaøn thaønh, keát thuùc) .........................................49 3.3.3.3. Duøng Dispose Method..................................................................50

3.3.4.Thöøa keá ........................................................................................................51 3.3.5.Ngaên caûn Thöøa keá .......................................................................................54 3.3.6.Thöøa keá vaø Phaïm vi hoaït ñoäng...................................................................54 3.3.7.Protected Methods.......................................................................................56 3.3.8.Overriding Methods.....................................................................................56

3.3.8.1. Virtual Methods............................................................................57 3.3.8.2. Keyword Me.................................................................................58 3.3.8.3. Keyword MyBase.........................................................................59 3.3.8.4. Keyword MyClass ........................................................................60

3.3.9.Overridding Method New ...........................................................................62 3.3.10.Taïo BaseClasses vaø Abstract Methods ....................................................62

3.3.10.1. Keyword MustInherit (Phaûi ñöôïc Thöøa Keá) ...............................62 3.3.10.2. Keyword MustOverride (Phaûi bò Laán Quyeàn) ............................63 3.3.10.3. Abstract Base Classes ..................................................................63

3.3.11.Shared class members ( Caùc thaønh vieân ñeå duøng chung cuûa class) ........64 3.3.11.1. Shared Methods............................................................................64 3.3.11.2. Shared Variables ..........................................................................65 3.3.11.3. Global values................................................................................66

3.3.12.Events (Söï kieän) ........................................................................................67 3.3.12.1. Raising Event ñeå xöû lyù trong moät Project khaùc ..........................67 3.3.12.2. Shared Events ...............................................................................70

3.3.13.Early Binding hay Late Binding (Hieäu löïc Sôùm hay Treå).......................71 3.3.13.1. Duøng Object Type ........................................................................72 3.3.13.2. Late Binding vaø Reflection..........................................................72 3.3.13.3. Duøng Function CType ..................................................................73

3.3.14.Thöøa keá töø moät ngoân ngöõ khaùc.................................................................74 3.3.14.1. Taïo moät VB.NET BaseClass .......................................................74 3.3.14.2. Taïo moät C# SubClass...................................................................74 3.3.14.3. Taïo moät program Client...............................................................76

Page 6: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

3

Chöông 4 ...................................................................................................................78 LAØM VIEÄC VÔÙI ÑOÁI TÖÔÏNG ÑOÀ HOÏA(GDI+) ..................................................78 4.1. So saùnh giöõa ñoà hoaï cuûa VB.NET vaø VB 6.0 .............................................78 4.2. Khaûo saùt Khoâng gian Ñoà hoïa GDI+ ............................................................78 4.3. Khaùi quaùt veà Khoâng gian teân System.Drawing ..........................................79 4.4. Xaây döïng moät khoâng gian laøm vieäc vôùi GDI+............................................81

4.4.1Caùc kieåu tieän ích cuûa Sytem.Drawing.........................................................82 4.4.1.1 Kieåu Point(F) ....................................................................................82 4.4.1.2 Kieåu Rectangle(F)............................................................................83 4.4.1.3 Kieåu Size(F) vaø Region ...................................................................83 4.4.1.4 Lôùp Region .......................................................................................83

4.4.2Trình ñieàu khieån Paint() ...............................................................................84 4.4.3Lôùp Graphics.................................................................................................87

4.5. Tìm hieåu veà maøu (color) ..............................................................................88 4.6. Laøm vieäc vôùi Phoâng chöõ ..............................................................................90 4.7. Khoâng gian teân System.Drawing.Drawing2D............................................91 4.8. Chuyeån ñaït caùc aûnh......................................................................................93 Chöông 5 ...................................................................................................................94 NHAÄP, XUAÁT vaø Namespace SYSTEM.IO...........................................................94 5.1. Kieåu Directory(Info) ....................................................................................94 5.2. Kieåu FileInfo ................................................................................................95 5.3. Xem xeùt phöông phaùp FileInfo.Open() .......................................................96 5.4. Kieåu FileStream ...........................................................................................97 5.5. Kieåu Streamwriter & StreamReader...........................................................97 Chöông 6 ...................................................................................................................99 GIÔÙI THIEÄU WINDOWS FORMS .........................................................................99 6.1. Hai khoâng gian teân GUI ...............................................................................99 6.2. Khaùi quaùt veà Windows.Forms......................................................................99 6.3. Taïo moät Form ...............................................................................................99

6.3.1.Taïo form vôùi VB.NET...............................................................................100 6.3.2.Laøm vieäc nhieàu form trong moät Project vôùi VB.NET .............................104

6.4. Theâm moät söï kieän ñieàu khieån vaøo Form(Event Handler) ........................106 6.4.1.Laøm vieäc vôùi caùc söï kieän chuoät:...............................................................106 6.4.2.Laøm vieäc vôùi caùc söï kieän baøn phím..........................................................109

6.5. Xaây döïng moät öùng duïng MDI (Multiple document interface) ...............111 6.5.1.Xaây döïng Form Cha(MDI parent ) vaø form con (MDI children).............111

6.6. Taïo thöïc ñôn cöûa soå( Windows Menu).....................................................112 6.7.1.Kieåu Menu$MenuItemCollection.............................................................114 6.7.2.Theâm heä thoáng menu vaøo trong Form(adding menus to a form) ............115

Page 7: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

4

6.7.3.Duøng PopUp Menu vaøo trong Form .........................................................117 6.7.4.Duøng ContextMenu vaøo trong Form.........................................................117

6.7. Tìm hieåu veà thanh tình traïng(status bar) ...................................................118 6.8. Theâm Toolbar vaøo form ............................................................................119 Chöông 7 .................................................................................................................121 LAÄP TRÌNH VÔÙI CAÙC WINDOWS FORMS CONTROL TRONG VB.NET ....121 7.1. Heä phaân caáp Windows Forms....................................................................121 7.2. Caùc control trong WindowsForms: ............................................................123

7.2.1.TextBox control .........................................................................................123 7.2.2.RichTextBox control .................................................................................124 7.2.3.Label control..............................................................................................124 7.2.4.Button control ............................................................................................124 7.2.5.RadioButton vaø GroopBox control ...........................................................125 7.2.6.ListBox control ..........................................................................................125 7.2.7.ComboBox control.....................................................................................126 7.2.8.TrackBar control........................................................................................127 7.2.9.MonthCalender Control.............................................................................128 7.2.10.Caùc ñieàu khieån con chaïy : DomainUpDown vaø NumericUpDown ......130 7.2.11.Laøm vieäc vôùi caùc Ñieàu khieån Panel .......................................................132 7.2.12.Laøm vieäc vôùi ToolTips � Gaùn caùc ToolTips cho caùc control ................133 7.2.13.Anchoring (boû neo)..................................................................................134 7.2.14.Docking (gaén vaøo) ...................................................................................136 7.2.15.Control Splitter ........................................................................................138

Chöông 8 .................................................................................................................142 ADO.NET ...............................................................................................................142 8.1. ADO.NET laø gì ? .......................................................................................142

8.1.1.Söï khaùc nhau giöõa ADO.NET vaø ADO coå ñieån: .....................................142 8.1.2.Hoaït ñoäng toaøn caûnh cuûa ADO.NET........................................................143 8.1.3.Phöông thöùc keát noái döõ lieäu cuûa ADO.NET.............................................144

8.2. Moâ hình hoaït ñoäng cuûa ADO.NET............................................................145 8.3. Kieán truùc cuûa ADO.NET............................................................................146 8.4. Caùc kieåu cuûa khoâng gian (Namespace) System.Data...............................146

8.4.1.Kieåu DataSet .............................................................................................147 8.4.1.1 Vai troø cuûa DataSet........................................................................147 8.4.1.2 Caùc tính chaát cuûa DataSet..............................................................149 8.4.1.3 Caùc phöông thöùc cuûa DataSet........................................................150

8.4.2.DataTable ..................................................................................................151 8.4.2.1.Vai troø cuûa DataTable............................................................................151 8.4.2.2.Tính chaát cuûa DataTable........................................................................151

Page 8: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

5

8.4.2.3.Xaây döïng vaø thao taùc DataTable...........................................................152 8.4.3.DataColumn...............................................................................................153 8.4.4.DataRow ....................................................................................................154

8.5. Caùc kieåu cuûa khoâng gian (Namespace) System.Data.OleDb...................155 8.5.1.OleDbConnection ......................................................................................156 8.5.2.OleDbCommand........................................................................................157 8.5.3.OleDbDataReader.....................................................................................157 8.5.4.OleDbParameter........................................................................................158 8.5.5.OleDbDataAdapter....................................................................................160

8.6. Caùc kieåu cuûa khoâng gian (Namespace) System.Data.SqlClient ..............161 8.7. Vaän duïng Wizards vaø duøng DataGrid ......................................................162 Chöông 9 .................................................................................................................167 GIÔÙI THIEÄU ASP.NET (ASP+) ............................................................................167 9.1 Giôùi thieäu ASP.NET..................................................................................167 9.2 Tìm hieåu boä khung web neàn theá heä keá tieáp NGWSF(Next Generation Web Service Framework). .....................................................................................167

9.2.1.Giôùi thieäu : .................................................................................................167 9.2.2.Tìm hieåu khung neàn NGWSF ...................................................................168 9.2.3.Ngoân ngöõ trung gian phoå duïng (common intermediate)..........................169

9.3 Cô sôû haï taàng cuûa caùc öùng duïng Web .......................................................170 9.4 Nhöõng khaùc bieät giöõa ASP.NET vaø ASP .................................................171 9.5 ASP.NET vaø dòch vuï Web..........................................................................173 9.6 ASP.NET caáu hình vaø phaân phoái öùng duïng. .............................................173

9.6.1.Taäp tin web.config.....................................................................................173 9.6.2.Taäp tin global.aspx. ...................................................................................174

9.7 Traïng thaùi cuûa bieán Session vaø Application trong ASP.NET...................174 9.8 Xöû lyù loãi trong ASP.NET. ..........................................................................175 9.9 Keát chöông..................................................................................................176 Chöông 10 ...............................................................................................................177 CAÙCH TAÏO TRANG ASP.NET ............................................................................177 10.1. Giôùi thieäu Web Forms............................................................................177 10.2. So saùnh söï khaùc bieät giöõa Web forms vaø Windows forms ...................177 10.3. Sau ñaây chuùng ta seõ xem caùch taïo moät Web forms ñôn giaûn. .............178 10.4. Caùch ñöa moät controls vaøo Web Forms ................................................180 10.5. Caùc thaønh phaàn ñieåu khieån trong ASP.NET .........................................184

10.5.1.Ñieàu khieån noäi taïi (intrinsic control) ......................................................185 10.5.2.Ñieåu khieån danh saùch (Listcontrol) ........................................................186 10.5.3.Ñieàu khieån ña naêng (rich control)...........................................................187 10.5.4.Ñieàu khieån kieåm tra (Validate control) ..................................................187

Page 9: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

6

Chöông 11 ...............................................................................................................188 XAÂY DÖÏNG TRANG ASP.NET NAÂNG CAO.....................................................188 11.1. Laäp trình vôùi maõ aån. ...............................................................................188 11.2. Taïo caùc maãu trang coù khaû naêng duøng laïi (Pagelets). ...........................190

11.2.1.Xaây döïng caùc maåu Pagelet .....................................................................191 11.2.2.Ví duï veà söõ duïng Pagelet........................................................................192 11.2.3.Ñònh nghóa thuoäc tính vaø phöông thöùc cho Pagelets. .............................193

11.3. Söû duïng vuøng ñeäm Cache cuûa ASP.NET..............................................194 11.3.1.Laäp vuøng ñeäm cho döõ lieäu keát xuaát. .....................................................194 11.3.2.Söû duïng cache ñeå löu tröõ bieán moâi tröôøng .............................................196

11.3.2.1 Taïo vaø truy xuaát caùc bieán cuûa ñoái töôïng cache........................196 11.3.2.2 Söû duïng cache trong ASP.NET..................................................197

11.4. Keát chöông..............................................................................................198 Chöông 12 ...............................................................................................................199 NAÂNG CAÁP CAÙC ÑEÀ AÙN VB 6.0 LEÂN .NET......................................................199 (Upgrading VB to .NET) ........................................................................................199 12.1. Nhöõng ñieàu löu yù (considerations) tröôùc khi naâng caáp leân .NET.........199 12.2. Caùc böôùc tieán haønh Naâng caáp (Upgrade)..............................................200 12.3. Coù neân naâng caáp khoâng ?.......................................................................202 PHAÀN 2...................................................................................................................203

BAØI ÖÙNG DUÏNG ...............................................................................................203 Ñeà taøi ......................................................................................................................204 Xaây döïng Trang Web Daïy Hoïc VB.NET.............................................................204 1. Hieän Traïng......................................................................................................204 2. Yeâu caàu...........................................................................................................204 3. Phaân Tích ........................................................................................................204 •Sô ñoà lôùp ...........................................................................................................204 •Reletionships.....................................................................................................204 •Moâ taû döõ lieäu caùc baûng ....................................................................................205

4. Caøi ñaët.............................................................................................................206 5. Giao dieän.........................................................................................................207 •Sô ñoà giao dieän .................................................................................................207 •Caùc trang chính .................................................................................................208

TAØI LIEÄU THAM KHAÛO ......................................................................................215

Page 10: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

7

Phaàn 1

Tìm Hieåu Visual Studio.NET

Page 11: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

8

Chöông 1

GIÔÙI THIEÄU VISUAL STUDIO.NET

Hieän nay treân theá giôùi Ngoân ngöõ VisualBasic ñöôïc nhieàu nhaø laäp trình choïn laø moät ngoân ngöõ chính cho vieäc thieát keá,laäp trình nhöõng öùng duïng, ñaëc bieät laø öùng duïng quaûn lyù cô sôõ döõ lieäu ,� Nhöng ñoái vôùi ngoân ngöõ VB thì khoâng laøm hoï vöøa loøng raát nhieàu vaán ñeà nhö : hoå trôï laäp trình höôùng ñoái töôïng, ñoà hoïa , ñaëc bieät laø laäp trình veà caùc öùng duïng Web �.nay VisualStudio.NET ra ñôøi ñaõ ñaùp öùng ñöôïc moät phaàn naøo mong chôø cuûa nhöõng ngöôøi laäp trình.

Neàn taûng .NET cuûa Microsoft bieåu thò moät phong caùch hoaøn toaøn môùi laï ñeå xaây döïng caùc öùng duïng coù phaân phoái , öùng duïng Desktop, vaø di ñoäng. Vaø cuõng dính daùng gì vôùi COM coå ñieån, VB 6.0, ...hoaëc baát kyø cô caáu tieàn .NET naøo. Vì raèng .NET laø söï chuyeån höôùng trieät ñeå ñeå rôøi xa loái laøm vieäc hieän haønh cuûa tieán trình phaùt trieån Win32, Microsoft cuõng ñaõ cho xuaát xöôûng moät ñôït caáp nhaät môùi tinh cuûa ngoân ngöõ laäp trình VisualBasic voán dó phoå duïng, coù teân laø VB.NET, cuõng ñaõ ñöôïc höôùng cuï theå veà phía caùc öùng duïng .NET . Khi tìm hieåu qua VB.NET baïn seõ thaáy VB.NET khoâng ñôn thuaàn laø baûn naâng caáp cuûa VB 6.0. Thay vì theá, toát nhaát ta neân VB.NET nhö laø moät ngoân ngöõ laäp trình môùi ñôn giaûn tình côø coù veõ ta ngôø ngôïi nhö laø laëp laïi tröôùc ñaây cuûa moät ngoân ngöõ.

Ñeå tìm hieåu VB.NET ta phaûi tìm hieåu sô löôïc veà cô cheá hoaït ñoäng cuõng nhö caùch thöùc toå chöùc cuûa höôùng tieáp caän môùi cuûa .NET 1.1. Caùc khoái kieán taïo cuûa .NET(CLR,CTS vaø CLS)

Treân quan ñieåm cuûa laäp trình vieân.NET coù theå ñöôïc hieåu nhö moät moâi tröôøng thôøi gian chaïy môùi vaø moät thö vieän lôùp cô sôõ chung. Taàng thôøi gian chaïy ñöôïc goïi laø Common Language Runtime(CLR). Vai troø chính cuûa CLR laø ñònh vò, vaø quaûn lyù caùc kieåu .NET ñònh danh. CLR quan taâm ñeán moät soá chi tieát caáp thaáp chaúng haïn nhö quaûn lyù boä nhôù töï ñoäng, tích hôïp ngoân ngöõ, vaø trieån khai giaûn löôïc (vaø ñònh phieân baûn) caùc thö vieän maõ nhò phaân.

Khoái kieán taïo khaùc cuûa cuûa .NET ñoù laø Common Type System (CTS). CTS moâ taû ñaày ñuû taát caû caùc kieåu döõ lieäu khaû dó maø thôøi gian chaïy hoå trôï, chæ ñònh caùch töôïng taùc cuûa caùc kieåu ñoù vôùi nhau vaø neâu chi tieát caùch bieåu thò chuùng theo daïng thöùc döõ lieäu Mata.NET.

Commom Language Specification (CLS) laø moät loaït caùc quy taéc ñònh nghóa cho moät taäp con caùc kieåu chung baûo ñaûm caùc file nhò phaân .NET coù theå ñöôïc duøng moät caùch thoâng suoát qua taát caû caùc ngoân ngöõ nhaém ñeán neàn taûng .NET. Caùc kieåu döõ lieäu noäi taïi cuûa CLS nhö baûng sau sau :

Page 12: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

9

Lôùp cô sôõ .NET Phaàn bieåu thò VB.NET Phaàn bieåu thò C# System.Byte Byte Byte System.Int16 Short Short System.Int32 Integer Int System.Int64 Long long System.Single Single float System.Double Double double System.Object Object object System.Char Char char System.String String string System.Decimal Decimal decimal System.Boolean Boolean bool

1.2. Caùc thö vieän cô sôõ .NET (Base class library)

Ngoaøi caùc ñònh chuaån CLR , CTS vaø CLS, neàn taûng .NET coøn cung caáp moät soá thö vieän lôùp cô sôõ saün coù cho taát caû caùc ngoân ngöõ laäp trình .NET. Khoâng nhöõng thö vieän lôùp cô sôõ naøy goùi rieâng nhieàu kieåu nguyeân thuûy khaùc nhau (ví duï IO taäp tin, chuyeån ñaït ñoà hoïa, vaø khaû naêng töông taùc vôùi caùc thieát bò phaàn cöùng beân ngoaøi ) maø coøn cung caáp phaàn hoå trôï cho moät soá dòch vuï maø haàu heát caùc öùng duïng ñôøi thöïc yeâu caàu (ví duï : ñieàu taùc Data Base, Tích hôïp XML,�) 1.3. Nhò phaân.NET (NET assembly)

ÖÙng duïng .NET xaây döïng töø caùc assemblies. Moãi assembly phaûi coù moät manifest(baûn keâ). Coù theå noù naèm rieâng trong moät file hay naèm beân trong moät module. Manifest chöùa nhöõng metadata sau ñaây:

• Teân vaø Version number cuûa assembly • Nhöõng assembly khaùc (keå caû version number cuûa assembly) maø assembly

naày tuøy thuoäc vaøo ñeå chaïy • Types (classes vaø members) maø assembly naày cho xuaát khaåu • Assembly naày ñoøi hoûi ñieàu kieän an ninh naøo (security permissions)

Manifest cho pheùp ta duøng hôn moät version cuûa assembly (töông ñöông vôùi DLL tröôùc ñaây) cuøng moät luùc. Töø ñaây khoâng coøn register DLL nöõa. Thay vaøo ñoù, ta chæ caàn copy caùc assembly vaøo moät subfolder /bin cuûa chöông trình chính. 1.4. Vuøng döõ lieäu Meâta (MetaData)

Metadata laø caùc döõ kieän caét nghóa(moâ taû) cho ta bieát veà döõ kieän nhö lôùp, caáu truùc , kieåu ñieåm danh,vv.. Ví duï IDL [interface Definition Language] laø moät ngoân ngöõ Meta duøng ñeå moâ taû caùc kieåu haøm beân trong moä heä phuïc vuï COM ñaõ

Page 13: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

10

cho Thí duï XML Schema cuûa moät XML file laø metadata caét nghóa veà data structure cuûa data trong file XML. Chính caùi XML Schema cuõng laø moät file XML. Caùc öùng duïng .NET components, goïi laø Assembly, chöùa raát nhieàu metadata ñeå caét nghóa veà chính noù (self describing). Tìm bieát veà moät öùng duïng .NET ñeå coù theå laøm vieäc vôùi noù thì goïi laø Reflection. 1.5. Quaù trình thöï hieän luoàng coâng vieäc cuûa .NET

1.6. Caùc khoâng gian teân (Namespace) cuûa .NET

Trong .NET thì Namespace(tìm hieåu roõ ôû chöông sau) quan troïng nhaát maø ta chuù yù ñoù laø teân �System�. Khoâng gian teân naøy cung caáp moät thaân loõi maø caùc kieåu maø ta caàn huy ñoäng nhieàu vôùi tö caùch laø moät nhaø phaùt trieån. Namespace �System� cung caáp nhieàu khoâng gian teân .NET ñöôïc theå hieän ôû baûng nhö sau :

Caùc Namespace cuûa .NET Caùc Namespace.NET YÙ nghóa

System Beân trong System coù nhieàu lôùp caáp thaáp öùng phoù vôùi vôùi caùc kieåu nguyeân thuûy, caùc pheùp

Maõ nguoàn .NET cuûaVB.NET, C#,C++.NET,�

Vaøi trình bieân dòch.NET

Hôïp taäp DLL/EXE (IL vaødöõ lieäu meta)

Thi haønh öùng duïng

Page 14: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

11

toaùn hoïc, gom raùc ,v.v.v System.Collections Namspace naøy ñònh nghóa moät soá ñoái töôïng

thuøng chöùa löu tröõ ví duï : Array Ust,Queue,Sortadlist

System.Data System.Data.Commom System.Data.OleDb System.Data.SqlClient

Caùc NameSpace naøy ñöôïc duøng cho thao taùc Cô sôõ döõ lieäu.

System.Diagnostics Namespace naøy chuùng ta gaëp nhieàu kieåu coù theå ñöôïc caùc ngoân ngöï .NET söû duïng ñeã gôûi roái vaø theo doõi thi haønh cuûa maõ nguoàn.

System.Drawing System.Drawing.Drawing2D System.Drawing.Printing

Namespace naøy cung caáp ñoà hoïa GDI+ ví duï nhö Bitmap, �.

System.IO Namespace naøy goàm ñaày ñuû caùc ñieåu taùc xuaát nhaäp bao goàm xuaát nhaäp taäp tin , vuøng ñeäm v.vv

System.NET Namespace naøy chöùa caùc kieåu lieân quan ñeán laäp trình maïng.(yeâu caàu, ñaùp öùng , noái,�)

System.Reflection System.Reflection.Emit

Ñònh nghóa caùc muïc hoå trôï tính naêng khaùm phaù kieåu vaøo thôøi gian chaïy, taïo ñoäng vaø trieäu goïi caùc kieåu tuøy bieán.

System.Runtime.InteropServices System.Runtime.Remoting

Cung caáp caùc ñaëc cuï ñeå töông taùc vôùi �maõ khoâng quaûn�[unmanaged code]

System.Security Baûo maät laø moät khía tích hôïp cuûa vuõ truï .NET. ÔÛ ñaäy gaëp nhieàu öùng phoù vôùi caùc maät maõ hoùa quyeàn,v.v.

System.Threading Namespace naøy öùng phoù vôùi caùc vaán ñeà laäp saâu. ÔÛ ñaây gaëp nhieàu kieåu Mutex, Thread va Times out

System.Web Namespace naøy ñöôïc öùng duïng cho vieäc laäp trình web.

System.Windows.Forms Cung caáp caùc control cho ngöôøi duøng thieát keá giao dieän moät caùch tröïc quan.

System.Xml Chöùa nhieàu bieåu thò cho XML loõi, caùc caên toát [primitives]vaø caùc kieåu ñieàu taùc vôùi döõ lieäu Xml.

Page 15: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

12

1.7. Visual Studio.NET Ñeå chaïy Visual Studio.NET ta phaûi tham khaûo vaø tieán haønh theo nhö böôùc

sau: Coù hai caùch ñeå baét ñaàu moät project môùi trong VS.NET. Hoaëc Click New

Project trong trang Web StartPage nhö döôùi ñaây:

Hoaëc duøng Menu command File | New | Project gioáng nhö trong VB6 IDE:

Khi Add New Project, Name seõ laø subfolder name cuûa New Project. Baïn coù theå

Page 16: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

13

choïn VB.NET, C# hay VC++.NET project. Trong töông lai chuùng ta seõ chæ nhaém vaøo VB.NET vaø C# thoâi. Ngoaøi ra SetUp and Deployment baây giôø laø moät loaïi project naèm trong IDE cuûa Visual Studio.NET, ta khoâng caàn phaûi chaïy rieâng chöông trình Package and Deployment beân ngoaøi VB6 IDE nhö tröôùc ñaây.

Solution trong VS.NET coù theå chöùa hôn moät Project vaø bao goàm taát caû nhöõng files baïn lieät ra laø caàn thieát cho Solution. Neáu moät trong nhöõng files aáy bò thay ñoåi beân ngoaøi VS.NET, khi VS.NET khaùm phaù ra noù seõ load vaøo trong VS.NET cho baïn neáu baïn ñoàng yù.

Ñeå môû moät Solution/Project coù saün, baïn coù theå click link cuûa teân project treân trang StartPage, hay duøng Menu command File | Open | Project , hay Menu Command File | Recent Projects. • Visual Studio.NET IDE

Page 17: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

14

Giao dieän cuûa VS.NET coù nhöõng ñaëc ñieåm gioáng nhö Delphi vaø Visual InterDev ôû choã code ñöôïc phaùt sinh töï ñoäng, Windows naèm chung thaønh Tab set hay float khaép nôi, vaø hoå trôï Solution raát thích hôïp cho vieäc trieån khai cuûa caû ñoäi. Toolbox beân traùi chöùa Controls cho Windows Forms, Web Forms, General Components, Data Components, HTML tags, XML Schema tools v.v... Khi moät Form ñang hieån thò, click leân moät button trong Toolbox ñeå choïn Tool Set baïn caàn. Toolbox ôû traïng thaùi Fixed displayed (nhö trong hình treân) khi caây ghim phía treân ñaâm xuoáng. Baïn coù theå click caây ghim cho noù naèm ngang vaø vertical Toolbox tab hieän ra beân traùi. Luùc aáy, Toolbox ôû trong traïng thaùi Auto Hide (hieän ra/ruùt vaøo) nhö döôùi ñaây:

Baïn coù theå goïi haàu heát caùc Windows hieån thò baèng caùch duøng Menu commands View, View | Other Windows vaø Debug | Windows:

Page 18: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

15

Caùc Windows beân phaûi coù theå noåi, naèm choàng leân nhau thaønh nhöõng Tabs trong moät taäp Window hay naèm caïnh nhau vertically tiled. Naém Tittle bar ñeå dôøi nguyeân moät taäp Window ñi. Naém Window Tab cuûa moät taäp Window ñeå keùo chæ moät Window ra. Baïn coù theå ñeå choàng hai Windows laïi vôùi nhau baèng caùch naém Tittle bar cuûa moät Window ñeå choàng leân moät Window khaùc. Thöû nhích ñi, nhích laïi, tröôùc khi buoâng Window ra ñeå laøm quen vôùi keát quaû. Phía döôùi coù Task List Window ñeå baïn giöõ soå saùch veà dieãn tieán cuûa döï aùn vaø quaûn lyù caû ñoäi. Khi baïn duøng menu command Build | Build ñeå compile program, neáu coù errors chuùng seõ ñöôïc hieån thò trong Task List Window. Double click leân moät haøng error ñeå mang cursor ñeán choã gaây ra error aáy trong code window. Trong hình döôùi ñaây, ta coá yù comment out haøng Dim sw As StreamWriter:

Page 19: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

16

Ngoaøi ra, ñeå Debug baây giôø baïn coù Output Window ñeå in ra caùc messages maø trong VB6 baïn duøng Immediate Window. Thí duï trong VB6 baïn vieát: Debug.Print "Count=" & CStr(Count) ñeå in ra trong Immediate Window, thì trong VB.NET baïn coù theå vieát:

Console.WriteLine("Count= {0}", Count) ñeå in ra trong Output Window. Dó nhieân baïn vaãn coù theå tieáp tuïc duøng Immediate Window trong coâng taùc Debug nhö tröôùc ñaây trong VB6. Chöa heát, VS.NET coøn cho baïn Command Window ñeå ta coù theå enter nhöõng VS.NET commands ñeå manipulate IDE, xöû lyù macros, .v.v Ñeå hieån thò Window naày baïn duøng menu command View | Other Windows | Command Window. Ñeå tieän hôn, baïn drag title bar cuûa noù ñeå choàng leân tab bar cuûa Task List vaø Output windows.

Page 20: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

17

Neáu ta enter moät command nhö: File.AddNewProject IDE seõ hieån thò Add New Project dialog. VS.NET hoå trôï Macro ñeå baïn coù theå record vaø playback moät chuoãi coâng taùc. Phöông tieän Integrated Debugging cho ta Debug Menu, Call Stack Window, Breakpoints Window vaø Watch and Value Display Windows. Thöôøng thöôøng baïn seõ Add Reference caùc .NET components. Nhöng baïn cuõng coù theå duøng ActiveX (coù saün trong VB6) trong .NET application baèng caùch Add Reference COM (click Tab COM treân Add Reference Dialog). .NET seõ goùi ActiveX thaønh moät NET component (click Yes traû lôøi caâu hoûi "Would you like to have a wrapper generated for you?"). Ngoaøi ra duøng Add Reference Projects ñeå refer ñeán DLL cuûa caùc User developed DLL.

Page 21: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

18

Chöông 2

NGOÂN NGÖÕ VISUAL BASIC.NET 2.1. Giôùi thieäu :

VB.NET, coøn goïi laø VB7, chaúng qua laø C# vieát theo loái Visual Basic. Nay VB7 ñaõ hoaøn toaøn laø Object Oriented, töùc laø cho ta duøng laïi (reuse) classes/forms theo caùch thöøa keá thaät thoaûi maùi, neân noù khaùc VB6 nhieàu laém.

Daàu vaäy, ñoái vôùi VB6 programmers hoïc VB.NET khoâng khoù. Lyù do laø VB.NET khoâng cho theâm nhieàu töø môùi (reserved words). Noùi chung caùc yù nieäm môùi trong VB.NET ñeàu deã lónh hoäi, nhaát laø khi ñem ra aùp duïng caùch thöïc teá. Ñoù laø nhôø Microsoft vaãn giöõ nguyeân taéc daáu vaø laøm saün (cuûa VB6) nhöõng gì raéc roái phía sau saân khaáu, ñeå ta coù theå taäp trung vaøo vieäc tìm kieám moät giaûi phaùp, thay vì quaù baän taâm vaøo caùch thöùc laøm moät vieäc gì. Chính nguyeân taéc aáy ñaõ giuùp Microsoft chieâu moä ñöôïc 3 trieäu VB6 programmers treân khaép theá giôùi. VB.NET coáng hieán cho VB programmers moät coâng cuï raát höõu hieäu ñeå duøng cho moïi hoaøn caûnh, töø database, desktop, distributed, Internet cho ñeán real-time hay mobile (pocket PC).

Nhöõng öu ñieåm (features) cuûa VB.NET ñeán töø chöùc naêng cuûa .NET Framework. Noù mang ñeán phöông tieän laäp trình cho maïng caùch Object Oriented nhö XML, Remoting, Streaming, Serialisation, Threading .v.v... Nhöõng thöù naày tuy laï nhöng khoâng khoù hoïc, ngöôïc laïi seõ tieát kieäm raát nhieàu thì giôø.

Maëc daàu VB6 laø moät ngoân ngöõ laäp trình tröôûng thaønh vaø hieäu naêng, chaéc chaén haõy coøn toàn taïi trong nhieàu naêm nöõa, nhöng hoïc theâm VB.NET laø moät ñaàu tö töông ñoái ít toán keùm vaø ñaûm baûo hueâ lôïi gaáp bao nhieâu laàn trong haøng thaäp nieân tôùi. 2.2. Namespaces

Namespaces laø moät caùch ñaët teân ñeå giuùp saép ñaët caùc Classes ta duøng trong program moät caùch thöù töï haàu deã tìm kieám chuùng. Taát caû code trong .NET, vieát baèng VB.NET, C# hay ngoân ngöõ naøo khaùc, ñeàu ñöôïc chöùa trong moät namespace.

Ñieåm naày cuõng aùp duïng cho code trong .NET system class libraries. Chaúng haïn, caùc classes cuûa WinForms ñeàu naèm trong System.Windows.Forms namespace. Vaø caùc classes duøng cho collections nhö Queue, Stack, Hashtable .v.v.. ñeàu naèm trong System.Collections namespace.

Taát caû code ta vieát trong program cuûa mình cuõng ñeàu naèm trong caùc namespaces. Tröôùc ñaây trong VB6, moãi khi nhaéc ñeán moät Class trong moät COM teân

Page 22: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

19

CompName ta vieát CompName.Classname (coøn goïi laø PROGID) , töùc laø cuõng duøng moät daïng namespace. Tuy nhieân phöông phaùp naày coù moät vaøi giôùi haïn:

• Ñòa chæ cuûa class bò buoäc cöùng vaøo component ñang chöùa noù. • Nhöõng classes khoâng naèm trong moät COM component thì khoâng coù

"namespace". • Caùch goïi teân PROGID chæ coù moät baäc thoâi, khoâng coù baäc con, baäc chaùu. • Teân cuûa Component luoân luoân coù hieäu löïc treân khaép caû computer. Namespaces trong .NET khaéc phuïc ñöôïc moïi giôùi haïn noùi treân trong VB6. Nhieàu assemblies coù theå naèm trong cuøng moät namespace, nghóa laø classes

tuyeân boá trong caùc components khaùc nhau coù theå coù chung moät namespace. Ñieàu naày cuõng aùp duïng xuyeân qua caùc ngoân ngöõ, giuùp cho moät class vieát trong VB.NET coù theå naèm trong cuøng moät namespace vôùi moät class vieát trong C#, chaúng haïn.

Hôn nöõa, trong moät assembly coù theå coù nhieàu namespaces, duø raèng thoâng thöôøng ta chæ duøng moät namespace duy nhaát cho taát caû caùc classes trong aáy.

Nhôù laø moät assembly trong .NET thì ñaïi khaùi töông ñöông vôùi moät COM component. Taát caû code trong .NET ñeàu naèm trong nhöõng assemblies. By default, teân cuûa project ñöôïc duøng laøm namespace. Neáu baïn right click leân

project name NETListbox trong Solution Explorer cuûa program Demo, roài choïn Properties trong popup menu, IDE seõ hieån thò Property Pages dialog nhö döôùi ñaây:

Baïn thaáy Root namespace cuûa project laø NETListbox. Baïn coù theå thay ñoåi

teân namespace aáy neáu baïn muoán.

Page 23: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

20

Namespaces coù theå ñöôïc phaân chia thöù baäc gioáng nhö Folders trong moät File Directory. Noù seõ giuùp user saép ñaët caùc classes theo ñuùng nhoùm cho trong saùng vaø deã ñoïc. Thí duï baïn ñang vieát moät program cho moät haûng saûn xuaát, baïn seõ duøng namespace NhaøSaûnXuaát ôû root level. Beân trong namespace aáy baïn seõ taïo theâm caùc nhaùnh cuûa chöông trình nhö:

1.NhaøSaûnXuaát.ToànKho 2.NhaøSaûnXuaát.SaûnPhaåm 3.NhaøSaûnXuaát.KeáToaùn.ChiPhí 4.NhaøSaûnXuaát.KeáToaùn.ThuNhaäp

Nhö theá ta ñaõ ñònh nghóa moät base namespace teân NhaøSaûnXuaát, vôùi nhöõng namespaces con, chaùu beân trong, moãi namespace coù chöùa classes, modules, enums, structures vaø caùc namespaces khaùc.

Moãi namespace chöùa nhöõng phaàn cuûa code thích hôïp cho noù trong program noùi chung. Trong File Directory, ta coù theå coù hai files duø mang cuøng teân nhöng naèm trong hai folders khaùc nhau. Gioáng nhö vaäy, trong .NET ta coù theå coù hai classes coù cuøng moät teân nhöng naèm trong hai namespaces khaùc nhau. Ñoù laø vì khi ta vieát teân cuûa moät class vôùi caû namespace cuûa noù thì coù theå phaân bieät vôùi moät class khaùc vôùi cuøng teân. • Local vaø Global Namespaces

Khaùc vôùi COM components vôùi "namespace" cuûa chuùng aùp duïng cho khaép caû computer, namespaces cuûa .NET thoâng thöôøng laø Local, chæ coù application program cuûa noù thaáy maø thoâi. .NET cuõng hoå trôï Global namespace, nhöng phaûi ñöôïc kyù teân (digitally signed) vaø ñaêng kyù vôùi.NET runtime ñeå chöùa noù trong global assembly cache.

Coâng vieäc laøm moät namespace Global raéc roái nhö theá ñeå giaûm thieåu tröôøng hôïp ta trôû veà tình traïng DLL hell tröôùc ñaây. • Duøng Namespaces

Ta coù theå duøng namespaces baèng caùch noùi thaúng ra (explicitly) vôùi nguyeân teân (Direct Addressing) hay haøm yù (implicitly) vôùi Import keyword. Nhöng ñieàu tieân quyeát laø ta phaûi reference caùi assembly chöùa namespace maø ta muoán duøng. Ta thöïc hieän vieäc aáy vôùi Menu command Project | Add References. Khi Add References dialog hieän ra, choïn Tab .NET cho standard .NET components hay Tab Projects cho DLL cuûa moät .NET project khaùc , highlight DLL baïn muoán roài click Select button, ñoaïn click OK.

Page 24: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

21

Chaúng haïn ta muoán read vaø write töø studio (caùi console input/output stream).

Caùi namespace ta caàn seõ laø System.Console. Trong caùch Direct Addressing ta seõ code nhö sau ñeå vieát haøng chöõ "Chaøo theá giôùi":

System.Console.WriteLine ("Hello world!") Neáu ta duøng Import keyword baèng caùch nheùt vaøo caâu Imports

System.Console ôû ñaàu code module, ta coù theå code goïn hôn:

WriteLine ("Hello world!") Döôùi ñaây laø moät soá namespaces thoâng duïng:

Namespace Chöùc naêng Classes ñieån hình

System.IO Ñoïc/Vieát files vaøcaùc data streamskhaùc

FileStream, Path, StreamReader,StreamWriter

System.Drawing Ñoà hoïa Bitmap, Brush, Pen Color, Font,Graphics

Page 25: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

22

System.Data Quaûn lyù data DataSet, DataTable, DataRow,SQLConnection, ADOConnection

System.Collection Taïo vaø quaûn lyù caùc loaïi collections

ArrayList, BitArray, Queue,Stack, HashTable

System.Math Tính toaùn Sqrt, Cos, Log, Min

System.Diagnostics Debug Debug, Trace

System.XML Laøm vieäc vôùi XML, Document ObjectModel

XMLDocument, XMLElement,XMLReader, XMLWriter

System.Security Cho pheùp kieåm soaùt an ninh

Cryptography, Permission,Policy

• Aliasing Namespaces (duøng bí danh) Khi hai namespaces truøng teân, ta phaûi duøng nguyeân teân (keå caû goác tích) ñeå

phaân bieät chuùng. Ñieån hình laø khi ta duøng nhöõng namespaces lieân heä ñeán VB6 nhö Microsoft.Visualbasic. Thay vì code:

Microsoft.Visualbasic.Left ( InputString,6) ta tuyeân boá:

Imports VB6= Microsoft.Visualbasic Sau ñoù ta coù theå code:

VB6.Left ( InputString,6)• Duøng Namespaces keyword

Trong thí duï veà program coù Root Namespace laø NhaøSaûnXuaát nhö noùi treân, neáu ta muoán ñaët ra moät namespace con laø ToànKho, ta phaûi duøng NameSpace keyword trong code nhö sau:

' Root Namespace laø NhaøSaûnXuaátNamespace ToànKho Class PhoøngLaïnh ' Code cho Phoøng Laïnh End Class End Namespace

Baây giôø muoán noùi ñeán class PhoøngLaïnh beân trong namespace ToànKho ta seõ code nhö sau:

NhaøSaûnXuaát.ToànKho.PhoøngLaïnh

Page 26: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

23

2.3. Kieåu döõ lieäu Moät thay ñoåi lôùn cho Data Type cuûa VB.NET, laø nhöõng variables duøng Data

Type ñòa phöông nhö Integer, Single, Boolean,.v.v.. ñeàu laø nhöõng Objects. Chuùng ñeàu ñöôïc derived (xuaát phaùt) töø Class caên baûn nhaát teân Object trong VB.NET. Neáu baïn thöû duøng Intellisense ñeå xem coù bao nhieâu Functions/Properties moät Object loaïi Integer coù, baïn seõ thaáy nhö döôùi ñaây:

Danh saùch kieåu döõ lieäu

Kieåu Kích thöôùc

Boolean 4 Bytes

Byte 1 Bytes

Char 2 Bytes

Decimal 12 Bytes

Double 8 Bytes

Integer 4 Bytes

Long 8 Bytes

Object 4 Bytes

Short 2 Bytes

Single 4 Bytes

Page 27: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

24

String 10 Bytes

User-Defined

Toång kích thöôùc cuûa caùc thaønh phaàn

• Coù moät vaøi khaùc bieät giöõa VB vaø VB.NET

o Trong VB6 ta bieát mình seõ gaëp Division by Zero error khi maãu soá baèng 0, nhöng ôû ñaây program seõ vieát trong Output Window chöõ Infinity (voâ cöïc). Töông töï nhö vaäy, neáu ta vieát code:

Dim dValueA As Double Dim dValueB As Double dValueA = 0 dValueB = 0 Console.WriteLine(dValueA / dValueB)

Keát quaû seõ laø chöõ NaN (Not a Number) hieån thò trong Output Window.

o VB.NET duøng Decimal data type vôùi 128 bits ñeå thay theá Currency data type trong VB6. Noù coù theå bieåu dieãn moät soá tôùi 28 digits naèm beân phaûi daáu chaám ñeå cho thaät chính xaùc. Heå caøng nhieàu digits naèm beân phaûi daáu chaám thì taàm trò soá cuûa Decimal caøng nhoû hôn.

o Kieåu Variant khoâng coøn toàn taïi trong VB.NET o Coù theå khôûi taïo bieán khi khai baùo

vd : Dim x as Integer = 5 Dim dblValue as Double = 22.5

2.3.1. Haèng (Constants) Haèng gioáng vôùi bieán nhöng khoâng theå thay ñoåi giaù trò khi ñaõ thay

baùo.Khi khai baùo Constants trong VB.NET ta phaûi khai roõ Data type cuûa noù laø String, Integer, Boolean ..v.v.:

Vd : Public constant myConstantString As String = "happy" Public Const maxStudent As Integer = 30.

2.3.2 Caùc Toaùn Töû vaø Pheùp Toaùn. Caùc toaùn töû trong VB.NET

Phaïm Truø toaùn töû Kyù hieäu

Page 28: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

25

Soá muõ ^ Coäng, Tröø, Nhaân, Chia

+, -, *, /

Chia soá nguyeân \ Modulus Mod Chaép noái & Quan heä =, <>, <, >, <=, >=, Like, Is, TypeOf., .Is Phuû ñònh Not Ñieàu kieän vaø And, AndAlso Ñieàu kieän hoaëc Or , OrElse Ñieåu kieän Xor Xor

VB.NET cho ta theâm caùch vieát pheùp toaùn môùi maø C programmers raát

thích töø laâu nay.

X += 4 töông ñöông vôùi X = X + 4 Mess &= " text" töông ñöông vôùi Mess = Mess & " text"

Arithmetic Operation

Trong VB6 Caùch vieát taéc môùi

Coäng X = X +5 X += 5

Tröø X = X - 10 X -= 10

Nhaân X = X * 7 X *= 7

Chia X = X / 19 X /= 19

Chia Integer X = X \ 13 X \= 13

Luõy thöøa X = X ^ 3 X ^= 3

Gheùp Strings X = X & "more text" X &= "more text"

Ta vaãn coù theå tieáp tuïc duøng caùch vieát trong VB6, nhöng baây giôø coù theâm moät caùch vieát goïn hôn.

Page 29: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

26

2.3.3 Caáu truùc Caáu truùc cho pheùp taïo ra nhöõng loaïi döõ lieäu theo ngöôøi duøng Töø khoaù Type trong Visual Basic ñöôïc thay theá baèng Structure Caùc bieán khai baùo trong caáu truùc phaûi khai baùo vôùi töø khoaù Dim Cuù phaùp : [Public|Private|Friend] Structure varname NonMethod Declarations Method Declarations End Structure Vd :

Public Structure UStudent Public FullName As String Public Age As Integer End Structure

2.3.4 Leänh reõ nhaùnh. 2.3.4.1 Leänh IF�THEN� ELSE

Cuù phaùp : If condition Then [statement] [Else if conditions-n Then [elseifstatements]]. . . [Else [else statement]] End If • Caùc pheùp toaùn so saùnh : =, <, <=, >, >=, <>, • Caùc toaùn töû ñieàu kieän : And, Or, Not . • Caùc kyù töï ñaïi dieän so saùnh khi duøng vôùi töø khoaù Like

Kyù töï Coâng duïng ? Ñaïi dieän cho moät kyù töï * Ñaïi dieän cho nhieàu kyù töï # Ñaïi dieän cho kyù töï soá [DanhSaùchKyùTöï] Ñaïi dieän cho moät kyù töï naèm trong danh saùch

caùc kyù töï [!DanhSaùchKyùTöï] Ñaïi dieän cho moät kyù töï khoâng naèm trong danh

saùch caùc kyù töï

Page 30: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

27

Vd : �abcdefg� Like �a*a� � bieåu thöùc sai �abcdefga� Like �a*a� � bieåu thöùc ñuùng �abc� Like �a?c� �bieåu thöùc ñuùng �a1a� Like �a#a� �bieåu thöùc ñuùng �abcdefga� Like �a[a-z]a �bieåu thöùc sai

• Caùc pheùp toaùn logic : And , Or, Xor, Not. Trong VB6, neáu ta vieát:

Dim myInt As Integer myInt = 0 If (myInt <> 0) And (17 \ myInt < 5 ) Then

Thì seõ bò Division by Zero error, vì maëc daàu phaàn (myInt <>0) laø False, nhöng VB6 vaãn tieáp tuïc tính phaàn (17 \ myInt < 5 ), vaø taïo ra error vì 17 chia cho moät soá 0. Trong vaøi ngoân ngöõ laäp trình khaùc, khi (myInt <>0) laø False thì noù khoâng tính theâm nöõa, töùc laø noù noùi raèng khi moät phaàn cuûa AND laø False thì nhaát ñònh keát quaû cuûa Logical Statement trong IF phaûi laø False. Ñaëc tính naày goïi laø Short-Circuit (ñi taéc).

Neáu ta duøng code noùi treân trong VB.NET, noù vaãn cho Division by Zero error gioáng nhö VB6. Tuy nhieân, neáu ta muoán duøng ñaëc tính Short-Circuit thì ta chæ caàn thay theá chöõ And baèng AndAlso nhö sau:

Dim myInt As Integer myInt = 0 If (myInt <> 0) AndAlso (17 \ myInt < 5 ) Then

Short-Circuit cuõng aùp duïng cho Logical OR khi ta thay theá chöõ Or baèng

OrElse ñeå noùi raèng khi phaàn ñaàu cuûa OR laø True thì nhaát ñònh keát quaû cuûa Logical Statement trong IF phaûi laø True

2.3.4.2 Leänh Switch Case

Cuù phaùp : Select Case testexpression [Case expressionlist-n

[statements-n]].

Page 31: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

28

[Case else [elsestatements]]

End Select Coù theå duøng nhieàu bieåu thöùc hay nhieàu mieàn Vd :

Select case intTest case 1 To 5, 10 To 15, 21 �Do some thing End Select

Select case strTest Case �match1�, �match2� �do something Case �match3� �do something case Else � do somethingelse EndSelect

2.3.5 Leänh Laëp

2.3.5.1 Leänh While Loops

Cuù phaùp : Do [{While | Until} condition ] [statements]

[Exit Do] [statements]

Loop hay Do [statements] [Exit Do]

[statements] Loop [{while | Until} condition]

Theo nhieàu caùch Do/ While vaø Do/Until ñöôïc duøng xen keû. Do/ While seõ thöïc hieän doøng laäp cho ñeán khi ñieàu kieän keát thuùc laø False. Maët khaùc Do/Until seõ thöc hieän doøng leänh keát thuùc laø True.

Vd : Doøng laëp seõ taêng val ñeán 100 seõ döøng .

Page 32: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

29

Dim val as Integer = 0 Dim x as Integer = 0 Do While val <100 val += 1 x += 1 If x == 10 Then Exit Do End If Loop

hoaëc duøng

Dim val as Integer = 0 Do Until val = 100 val += 1 x += 1 If x == 10 Then Exit Do End If Loop

Doøng laëp seõ ngöøng khi val = 100 nhöng noù taêng val tröôùc khi xeùt ñieàu kieän.

Dim val as Integer = 0 Do val += 1 Loop While val < 100

hoaëc Dim val as Integer = 0 Do val += 1 Loop Until val = 100

2.3.5.2 Leänh For Loops

Leänh For Loops Cuù phaùp :

For counter = start To End [Step step] [statements]

Page 33: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

30

[Exit For] [statements]

Next For Each element In Group [statements] [Exit For] [statements] Next [element] For Each duøng cho vôùi maûng hoaëc Taäp hôïp (collection)

vd : Dim I as Integer Dim val as Integer = 0 � Neáu khoâng khai baùo Step : maëc ñònh laø 1 For I = 1 To 10 val = val + 5 Next

Dim objItem, MyCollection as Object For Each objItem in MyCollection If objItem .Val = 5 Then Exit For End If Next

2.3.6 Maûng

• Trong VB.NET, Maûng coù chæ soá baét ñaàu laø 0. • Maûng laø taäp hôïp caùc phaàn töû coù cuøng kieåu döõ lieäu cô baûn (integer,

long, String �). Caùc phaàn töû maûng trong VB.NET coù theå laø caùc ñoái töôïng, caùc giao dieän, caùc caáu truùc.

• Maûng coù theå moät hoaëc nhieàu chieàu (toái ña 60 chieàu ). Soá phaàn töû trong maûng toái ña 264 � 1.

• Coù theå khôûi gaùn khi khai baùo. • Coù theå duøng haøm LBound vaø UBound ñeå laáy chæ soá ñaàu vaø cuoái cuûa

maûng • Töï ñoäng phaùt sinh töø System.Array (söï khaùc bieät roû nhaát giöõa VB va

VB.NET) Caùc phöông thöùc choïn loïc cuûa System.Array

Page 34: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

31

Phöông Thöùc YÙ nghóa BinarySearch() Phöông thöùc tónh naøy tìm phaàn töû trong maûng Clear () Phöông tónh naøy gaùn caùc phaàn töû trong maõng

cuøng giaù trò (baèng 0 cho maûng giaù trò , baèng Null cho maûng tham chieáu ñoái töôïng.

CopyTo() Duøng cheùp caùc phaån töû töø maûng nguoàn sang maûng ñích

Reverse() Phöông phaùp naøy ñaûo ngöôïc caùc noäi dung cuûa moät maûng moät chieàu

Sort() Saép xeáp moät maûng moät chieàu vd : Maûng moät chieàu �Khai baùo maûng coù 11 phaàn töû (0, 1, . . ., 10) Dim arr(10) as Integer hoaëc Dim arr() as Integer = New Integer(10){} �Khai baùo vaø gaùn giaù trò Dim arr() as Integer = {0,1,2,3,4} Dim str() as String = {�aaa�,�bbb�,ccc�, �ddd�} hoaëc Dim str(3) as String str(0) = �aaa� str(1) = �bbb� str(2) = �ccc� str(3) = �ddd� For I = LBound (arr) To UBound(arr) arr(I) = I Next

vd : Maûng ña chieàu.

Page 35: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

32

Dim arr(5,10) as String Dim arr( , ) as String = {{�11�,�12�,�13�},{�21�,�22�, �23�}} Dim arr(3,5,7) as integer Dim I as integer Dim J as Integer Dim K as Integer For I = LBound (arr,1) To UBound (arr,1) For J = LBound (arr,2) To UBound (arr,2) For K = LBound (arr,3) To UBound (arr,3) arr (I,J,K) = 0 Next Next Next

Maûng ñoäng Gioáng nhö VB, maûng coù theå hieäu chænh kích thöôùc baèng töø khoaù Redim(huyû caùc noäi dung hieän haønh cuûa maûng) hoaëc duøng caùc töø khoaù redim Preserve (baûo toaøn caùc giaù trò beân trong maûng hieän haønh). Tuy nhieân khaùc vôøi VB, baïn khoâng theå thay ñoåi kieåu cô sôû cuûa moät maûng baèng töø khoaù As. vd :

Dim arr() as Integer Dim I as Integer Redim arr(I) For I = 0 To 3 arr(I) = 0

Next

2.3.7 Haøm Haøm laø khoái caùc ñoaïn leänh ñöôc goïi (coù theå truyeàn tham soá ). Khi ñoaïn

leänh naøy thöïc thi thì ñoái vôùi Function seõ traû veà giaù trò, coøn Procedure khoâng traû veà giaù trò.

• Cuù Phaùp : [Public | Private | Friend | Protected] [Static ] Function name [(arflist)] [As type] [statements]

Page 36: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

33

[name = expression ] [Exit Function ] [statements] [name = expression] End Function

o Public : Cho pheùp moïi lôùp coù theå truy caäp tôùi. o Private : Chæ coù theå truy caäp bôûi lôùp ñònh nghóa phöông thöùc. o Friend : Chæ coù theå truy caäp coâng coäng trong phaïm vi moät

project. o Protected : Chæ coù theå duøng boåi lôùp ñònh nghóa cuõng nhö caùc

lôùp con. vd : Class SomeClass { �Accessible anywhere Public Sub MethodA() End Sub �Accessible only from SomeClass types Private Sub MethodB() EndSub �Accessible from SomeClass and any Descendent Protected Sub methodc() EndSub �Accessible from within the same assembly Friend Sub MethodD() EndSub }

• Coù 2 caùch ñeå traû veà giaù trò : duøng teân haøm ñeå gaùn hay duøng töø khoaù

Return. • Maët ñònh tham soá cuûa haøm ñöôïc truyeàn baèng trò thay vì truyeàn baèng

bieán nhö trong VB. • Duøng töø khoaù Optional ñeå khai baùo cho nhöõng tham soá maëc ñònh.

Nhöng phaûi khôûi gaùn giaù trò maëc ñònh naøy. • Duøng töø khoaù delegate ñeå goïi con troû haøm. Delegate laø moät caùch giuùp ta pass moät procedure nhö moät parameter vaøo trong moät method. YÙ nieäm naày ñöôïc goïi laø Function Pointer hay

Page 37: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

34

Callback. Moät tröôøng hôïp coå ñieån ta duøng Delegate laø cung caáp moät dataArray ñeå sort vôùi moät Function ñeå so saùnh moãi hai items trong array. Trong VB.NET ta duøng AddressOf operator ñeå pass moät procedure. Ta declare moät Delegate baèng caùch noùi noù laø moät procedure döôùi daïng naøo, coù bao nhieâu parameters, moãi parameter thuoäc loaïi data type naøo. Thí duï: Delegate Function IsGreater (ByVal v1 As Integer, ByVal v2 As Integer) as Boolean Khi vieát code ta cöù yeân taâm seõ ñöôïc cung caáp moät Function coù daïng aáy vaø ñaïi khaùi code nhö sau:

Public Sub DoSort (ByRef DataArray() As Integer, Greater As IsGreater) Dim outer As Integer Dim inner As Integer Dim temp As Integer For outer = 0 To UBound(DataArray) For inner = outer + 1 To UBound(DataArray) If GreaterThan.Invoke( DataArray(outer), DataArray(inner)) Then temp = DataArray(outer) DataArray(outer) = DataArray(inner) DataArray(inner) = temp End If Next Next End Sub

Ñeå yù caùch duøng Method Invoke ñeå goïi moät Delegate. Baây giôø ta chæ caàn cung caáp Delegate routine maø ta ñaõ höùa: Public Function myIsGreater (ByVal v1 As Integer, ByVal v2 As Integer) as Boolean Return ( v1 > v2) End Function Tieáp theo ñaây laø caùch ta duøng Delegate noùi treân:

Dim myData() As Integer = { 2, 5, 8, 13, 26}

Page 38: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

35

DoSort (myData, AddressOf myIsGreater)

Khi moät Subscriber registers vôùi moät Publisher moät routine ñeå Handle moät loaïi Event, ta cuõng duøng delegate nhö sau:

AddHandler Button4.Click, AddressOf Button4_Click Khi moät Event Click xaûy ra ôû Button4, system seõ execute Sub Button4_Click.

Page 39: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

36

Chöông 3

HÖÔÙNG ÑOÁI TÖÔÏNG MÔÙI TRONG VB.NET(OOP)

VB.NET khaéc phuïc nhöõng giôùi haïn veà Ñoái Töôïng (Object-Oriented) cuûa VB6 vaø mang ñeán cho ta moät ngoân ngöõ laäp trình hoaøn toaøn Object-Oriented (OO). Gaàn nhö moïi thöù trong VB.NET ñeàu lieân heä vôùi Object. Ñeå tìm hieåu veà höôùng ñoái töôïng trong VB.NET chuùng ta caàn phaûi naém laïi moät soá vaán ñeà sau. 3.1. Vaán ñeà khaùi quaùt cuûa höôùng ñoái töôïng

3.1.1. Classes vaø Objects, nguyeân taéc Abstraction Theo phöông phaùp ñoái töôïng, program (ngöôøi laäp trình) ñöôïc thieát keá ñeå

moät phaàn code ñaïi dieän cho moät vaät töông ñöông ngoaøi ñôøi. Noù ñöôïc goïi laø Class.

Khi laäp trình VB6 ta ñaõ duøng nhöõng controls töø Toolbox nhö Textbox, Label, Listbox ..v.v.. Textbox laø Class cuûa caùc Objects Text1, Text2. Cuõng nhö Label1, Label2 laø nhöõng Objects taïo ra töø Class Label. Ta hay duøng hai töø Class vaø Object laãn loän nhau. Ñieàu ñoù khoâng quan troïng, mieãn laø ta bieát raèng Class laø moät yù nieäm Tröøu töôïng (Abstraction), coøn Object laø moät vaät thöïc höõu. Gioáng nhö Class CaSó laø moät yù nieäm tröøu töôïng, coøn Object KhaùnhHaø cuûa Class CaSó laø moät ngöôøi baèng da, baèng thòt vôùi tieáng haùt ñöôïc nhieàu ngöôøi ngöôõng moä.

Ta noùi Object laø moät Instance cuûa Class, vaø ta instantiate Class ñeå coù moät Object.

Thöôøng thöôøng khi ta phaân tích moät vaán ñeà ñeå thieát keá chöông trình thì caùc Danh töø (Nouns) laø nhöõng Classes. Giaû duï ta phaân tích hoaït ñoäng cuûa

Page 40: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

37

moät Nhaø Kho. Ta coù phoøng chöùa, ngaên tuû, baõi nhaän haøng, xe naâng haøng, nhaân vieân ..v.v., moãi thöù ñeàu coù theå laø moät Object neân ta seõ thieát keá moät Class cho noù.

3.2. Fields, Properties, Methods vaø Events, nguyeân taéc Encapsulation Class CaSó dieãn taû CaSó laø ngöôøi nhö theá naøo. Nhö SoáBaøiHaùt laø moät

Public Variable cuûa Class, ñöôïc goïi laø Field coù theå ñöôïc ñoïc/vieát tröïc tieáp. Coøn Kieåu toùc (daøi, ngaén, maøu ñen, coù soïc naâu ...), Gioïng haùt (cao, traàm, ..). laø nhöõng Properties. Chuùng cuõng gioáng nhö Field nhöng ñöôïc implemented (thi haønh) baèng caùch duøng procedures Property Get vaø Property Set. Property Set coù theå ñöôïc coded ñeå kieåm soaùt neáu "Kieåu toùc" khoâng thích hôïp thì seõ bò loaïi boû. Ngöôïc laïi, neáu "Kieåu toùc" thích hôïp vaø ñöôïc aùp duïng thì ta seõ thaáy keát quaû ngay laø CaSó laïi ñeïp theâm ra. Thöôøng thöôøng Fields vaø Properties laø caùc Danh töø (Nouns).

Moät CaSó coù khaû naêng ÑônCa, KyùTeânLöuNieäm, TrìnhDieãn. Ta goïi ñoù laø nhöõng Methods maø ta implemented baèng Subs vaø Functions (thí duï nhö Function KyùTeânLöuNieäm seõ return moät chöõ kyù). Thöôøng thöôøng Methods laø nhöõng Ñoäng töø (Verbs)

Ñoái vôùi code beân trong Class thì Property gioáng nhö moät Method coøn ñoái vôùi Client (töùc laø program ñang duøng Class) thì Property gioáng nhö Field. Ñoâi khi, neáu trình dieãn laâu, CaSó caàn moät ly nöôùc. CaSó seõ Raise Event KhaùtNöôùc ñeå nhaân vieân trong haäu tröôøng phuïc vuï.

Ta goïi chung Fields, Properties, Methods vaø Events laø nhöõng Class Members (Caùc Thaønh vieân cuûa Class)

Coù moät ngoaïi leä veà söï khaùc bieät giöõ Class vaø Member, ñoù laø khi ta duøng caùc Shared Class Members cuûa moät Class thì ta khoâng nhaát thieát phaûi instantiate moät Object. Ta coù theå duøng thaúng teân cuûa Class nhö moät Object. Caùi lôïi ñieåm cuûa Object Oriented Programming laø ta coù theå goùi taát caû nhöõng ñaëc ñieåm, khaû naêng cuûa moät Class vaøo trong moät Unit of Code (Ñôn vò maõ) töï tuùc. Khi chuùng ta lòch söï yeâu caàu thì CaSó ÑônCa. Ta bieát CaSó ca thì thu huùt loøng ngöôøi, nhöng ta khoâng caàn bieát laøm sao CaSó ñaït ñeán trình ñoä nhö vaäy. Ñoù khoâng phaûi laø chuyeän ñeå chuùng ta quan taâm.

Ñoái vôùi ta Class CaSó laø moät Black Box, ta khoâng bieát vaø khoâng caàn bieát chuyeän gì xaûy ra beân trong. Neáu sau naày CaSó thay ñoåi kyõ thuaät ñôn ca ñeå haùt deã vaø hay hôn, ñieàu ñoù khoâng aûnh höôûng gì ñeán chuùng ta. Ñaëc tính OO aáy goïi laø Encapsulation (Goùi kín).

Page 41: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

38

Hình Encapsulation (Goùi kín).

Caùch ta laäp trình vôùi Class chæ khaùc caùch ta laäp trình tröôùc ñaây moät chuùt thoâi. Neáu tröôùc ñaây ta phaûi töï laøm, thì baây giôø ta instantiate moät Object cuûa Class chuyeân trò nhöõng chuyeän ta muoán laøm, roài baûo noù laøm cho ta. So vôùi ngoaøi ñôøi, thí duï baïn coù môû moät tieäm photocopy. Sau moät naêm baïn töï troâng coi, coâng chuyeän laøm aên oån ñònh vaø coù keát quaû toát. Baïn muoán môû theâm moät tieäm photocopy nöõa ôû choã khaùc. Tröôùc khi ñi lo choã khaùc baïn huaán luyeän ngheà photocopy cho moät ngöôøi laøm coâng trung thaønh, roài giao cho ngöôøi aáy laøm quaûn lyù ñeå thay theá baïn. Ngöôøi ñoù laø moât Object cuûa Class QuaûnLyùTieämPhotoCopy. Trôû laïi caùch laäp trình, nhöõng coâng vieäc baïn laøm haèng ngaøy trong tieäm photocopy laø nhöõng Methods. Taát caû ñoà ñaïc, soå saùch cuûa tieäm laø nhöõng Properties. Baïn ñaõ saép ñaët moãi tuaàn phaûi goïi ngöôøi laïi queùt doïn tieäm, moãi thaùng phaûi baûo trì caùc maùy photocopiers, ñoù laø nhöõng Events. Baây giôø baïn goùi taát caû nhöõng thöù aáy laïi thaønh Class QuaûnLyùTieämPhotoCopy. Laàn ñaàu baïn instantiate Class QuaûnLyùTieämPhotoCopy laøm thaønh ChuùA ngöôøi seõ thay theá baïn laøm quaûn lyù tieäm photocopy ñaàu tieân. Khi baïn muoán môû theâm tieäm thöù ba, baïn seõ instantiate Class QuaûnLyùTieämPhotoCopy moät laân nöõa laøm thaønh DìB , ngöôøi seõ thay theá baïn laøm quaûn lyù tieäm photocopy thöù nhì.

Page 42: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

39

Khi ñaõ phaân chia traùch nhieäm caùc phaàn code thaønh nhöõng Class, baïn coù theå taäp trung tö töôûng vaøo töøng Class moät, khoâng caàn phaûi coá nhôù moïi thöù trong ñaàu khi giaûi quyeát chuyeän gì. Vì code cuûa Class naøo chæ laøm vieäc vaø aûnh höôûng trong phaïm vi hoaït ñoäng cuûa noù, khoâng ñuïng chaïm ñeán ai khaùc. Neáu coù gì truïc traëc, thöôøng thöôøng ta coù theå xaùc ñònh ñoù laø loãi cuûa Class naøo töông ñoái deã daøng. Coù moät caâu hoûi ñuøa raèng theo phöông phaùp OO thì: "Thay moät boùng ñeøn caàn bao nhieâu programmers?". Ñaùp: "Khoâng caàn programmer naøo heát, baïn baûo ñeøn töï thay boùng cuûa noù." (Lôøi ñaùp khaùc: "Khoâng caàn programmer naøo heát, Microsoft ñaõ ñoåi tieâu chuaån ra boùng ñeâm.") Do ñoù, neáu tröôùc kia baïn laäp trình ñeå töï mình lo lieäu coâng chuyeän thì baây giôø haõy giao cho caùc Objects töï lo cho chuùng. Töùc laø tröôùc ñaây, neáu baïn laø chuû ñieàn moãi naêm baïn phaûi ñi goùp luùa ruoäng, thì baây giôø baïn baûo caùc taù ñieàn phaûi töï ñem noäp luùa vaøo trong kho cho baïn.Hay khoâng?. Chæ ôû trong theá giôùi laäp trình OO, ta môùi coù theå laøm ñöôïc chuyeän nhö vaäy. 3.2.1. Inheritance (Thöøa Keá)

Nguyeân taéc Encapsulation noùi treân cho pheùp ta duøng nhieàu Objects cuûa moät hay nhieàu Classes moät caùch an toaøn, töùc laø khoâng sôï Methods cuûa caùc Objects choàng leân nhau.

Giaû söû ta muoán duøng laïi moät Class ñeå laøm moät Class môùi, ñaëc bieät hôn, thí duï nhö ta muoán laøm neân moät Class CaSó töø Class NgheäSó. Caùch laøm aáy goïi laø Inheritance (Thöøa keá). Coâng vieäc thöøa keá naày ñöôïc thöïc hieän qua moät quaù trình goïi laø Subclassing.

ÔÛ ñaây ta duøng laïi Class NgheäSó maø hoaøn toaøn khoâng ñuïng ñeán Source Code (Nguoàn Maõ) cuûa Class NgheäSó. Nguyeân taéc aáy goïi laø Reusability (Duøng laïi). Löu yù laø neáu ta duøng laïi Source code maø coù söûa ñoåi moät chuùt trong Source Code thì khoâng theå goïi laø Reuse ñöôïc vì coù theå vieäc söûa ñoåi Source Code ñoù seõ gaây ra bugs( loãi kyõ thuaät ) môùi. Ta phaûi chæ caàn Inherit töø Object Code cuûa moät Class cuõng ñöôïc thì môùi thaät söï laø Reuse.

Ta duøng Inheritance ñeå cho theâm caùc Class Members, töùc laø theâm ñaëc tính vaø chöùc naêng. Thí duï NgheäSó thì coù Property TaâmHoàn (NhaïyCaûm (Sentitive) , ThôMoäng (Romantic),...), vaø Methods KyùTeânLöuNieäm, TrìnhDieãn. Class CaSó seõ giöõ y caùc ñaëc tính vaø chöùc naêng aáy vaø theâm Sub ÑônCa, Function HaùtNhaïcYeâuCaàu, .v.v..

Töông töï nhö vaäy, ta cuõng coù theå thöøa keá töø Class NgheäSó ñeå taïo ra Class HoïaSó. Class HoïaSó seõ giöõ y caùc ñaëc tính vaø chöùc naêng cuûa Class NgheäSó nhöng theâm Function VeõChaânDung, Sub TrangTrí.

Page 43: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

40

Trong thí duï noùi treân, ngöôøi ta goïi Class NgheäSó laø Parent Class, Super Class hay Base Class. Coøn Class CaSó vaø Class HoïaSó ñöôïc goïi laø Child Class hay SubClass. Neáu ta laïi Inherit Class CaSó ñeå taïo ra Class CaSóTaânNhaïc vaø Class CaSóCoåNhaïc thì trong tröôøng hôïp naày CaSó laø Parent Class vaø CaSóTaânNhaïc vôùi CaSóCoåNhaïc laø Child Classes. Moãi Casó laø moät NgheäSó neân ta coù moái lieân heä "IS (Laø)" giöõa hai classes naày. Noù khaùc vôùi moái lieân heä "HAS (Coù)". Thí duï neáu trong Class CaSó coù moät Object thuoäc Class ÑaàuBeáp, thì moät CaSó coù theå cho ta moät böûa aên ngon nhöng khoâng haún cho chính CaSó naáu. Noù gioáng nhö ngoaøi ñôøi CaSó KhaùnhHaø möôùn moät ñaàu beáp ñeå ñaõi khaùch. Ta seõ noùi Class CaSó coù moái lieân heä HAS (Coù) vôùi Class ÑaàuBeáp trong tröôøng hôïp naày, chôù khoâng phaûi Class CaSó IS (Laø) moät Class ÑaàuBeáp. Trong .NET ta chæ coù Single (Ñôn) Inheritance, töùc laø moät Class khoâng theå Inherit töø hai hay ba Classes khaùc. Gioáng nhö noùi Con thöøa keá töø Cha vaø Cha thöøa keá töø OÂngNoäi, khoâng coù nhaéc gì ñeán Meï hay BaøNoäi. Moät Child Class chæ coù moät Parent Class, ngöôïc laïi, moät Parent Class coù theå coù nhieàu Child Classes.

Hình : inheritanse(thöøa keá)

Page 44: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

41

3.2.2. Polymorphism (Ña daïng) Polymorphism laø khaû naêng duøng Class Members truøng teân cuûa Objects thuoäc veà caùc Classes khaùc nhau. Thí duï Objects KhaùchHaøng vaø NhaânVieân ñeàu coù Property Name. Neáu ta coù theå laäp trình ñeå duøng Name maø khoâng caàn noùi roõ noù thuoäc veà Object KhaùchHaøng hay NhaânVieân thì ñoù laø Polymorphism. Polymorphism theå hieän döôùi nhieàu hình thöùc:

' Late Binding (Hieäu löïc treå): Coù nghóa laø ñôïi ñeán giôø choùt, khi thöïc thi, thì code môùi bieát noù ñang laøm vieäc vôùi loaïi Object naøo. Chöõ binding noùi ñeán "hieäu löïc", late binding laø coù hieäu löïc treå. Ñieàu naày ñöôïc thöïc hieän baèng caùch höùa heïn moät Object thuoäc Parent Class ñeå trong luùc runtime ta coù theå giao cho code moät Object thuoäc Child Class. Thí duï ta höùa vôùi khaùn giaû seõ coù moät CaSó trình dieãn, luùc môû maøn ta coù theå cung caáp moät CaSóTaânNhaïc hay moät CaSóCoåNhaïc.

Hình: late binding(hieäu löïc treã)

' Overloading (Quaù taûi, ñaõ coù roài maø coøn cho theâm) : Overloading cho pheùp ta vieát trong cuøng moät Class nhieàu versions khaùc nhau cuûa Property hay Method. Chuùng ñöôïc phaân bieät nhôø duøng parameters khaùc data type hay con soá parameters khaùc nhau. Thí duï moät version cuûa Sub ñöôïc passed cho moät Integer Parameter, moät version khaùc ñöôïc passed cho moät String Parameter, moät version khaùc laïi ñöôïc passed cho hai parameters. Khi ta goïi moät Method cuûa Class, noù seõ döïa vaøo data type cuûa parameters ta pass vaø soá parameters ta pass ñeå execute ñuùng version cuûa Method. Moät thí duï veà Overloading ngoaøi ñôøi laø khi ta yeâu caàu CaSó ñôn ca ta ñöôïc pheùp ñeà nghò CaSó haùt theo Karaoke, hay ñöôïc Ban Nhaïc Soáng phuï hoïa, hay theâm caû moät nhoùm ca só khaùc phuï hoïa .v.v..

Page 45: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

42

' Overriding (Laán quyeàn) : Overriding aùp duïng cho Child Class ñoái vôùi Parent Class. Trong Child Class ta cung caáp moät Method cuøng teân, cuøng soá parameters vaø cuøng parameter data type vôùi moät Method trong Parent Class (ôû ñaây khoâng nhaát thieát phaûi laø Cha, coù theå laø OÂngNoäi hay nhieàu ñôøi tröôùc) ñeå duøng noù thay theá cho Parent Class Method. Ta noùi Child Class thay ñoåi behaviour (taùnh tình, caùch xöû söï) cuûa Parent Class. Ñaïi khaùi gioáng nhö cuï LöõLieân tröôùc ñaây Haùt nhaïc haøi höôùc, baây giôø coâ KhaùnhHaø thöøa keá töø cuï nhöng override Method Haùt cuûa cuï vaø coâ implement moät Method Haùt môùi duøng cho nhaïc tröõ tình. Luùc runtime, neáu moät Object khoâng coù implementation cuûa moät Method thì CLR (Common Language Runtime) seõ duøng Method cuûa Parent Class cuûa noù. Trong thí duï treân vì coâ KhaùnhHaø coù moät implementation cho method Haùt neân system seõ duøng method ñoù, thay vì duøng method Haùt cuûa cuï LöõLieân.

3.3. Duøng höôùng ñoái töôïng trong VB.NET 3.3.1. Taïo moät Class môùi

Baïn taïo moät Class môùi trong VB.NET IDE baèng caùch duøng Menu Command Project | Add Class. Dialog Add New Item seõ hieän ra, choïn Class trong soá hình caùc Icons naèm trong khung beân phaûi cuûa Dialog.

Source code cuûa Class môùi naày seõ ñöôïc chöùa trong moät VB source file vôùi extension vb. Trong VB.NET taát caû moïi VB source files ñeàu coù

Page 46: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

43

extension .vb. System seõ nhaän dieän ra loaïi VB file (form, class, module,.v.v..) nhôø ñoïc content cuûa file, chôù khoâng döïa vaøo file extension. Neáu baïn muoán ñaët teân cho Class môùi naày laø TheClass chaúng haïn, thì baïn coù theå söûa teân noù trong Dialog. Khi baïn click button Open moät file môùi seõ ñöôïc cho theâm vaøo trong Project vaø noù chöùa hai haøng code sau:

Public Class TheClass End Class

3.3.1.1. Class Keyword Trong moät .vb file ta coù theå vieát nhieàu Classes, code cuûa moãi Class

naèm trong moät Class ... End Class block. Thí duï: Public Class TheClass Public Sub Greeting()

Box.Show("Hello world", MsgBoxStyle.Information, "TheClass") End Sub End Class MessageBox.Show vaø MsgBoxStyle.Information trong VB.NET thay theá

MsgBox vaø vbInformation trong VB6.

3.3.1.2. Classes vaø Namespaces Nhaéc laïi laø .NET duøng Namespace ñeå saép ñaët caùc Classes cho thöù

töï theo nhoùm, loaïi. Namespaces ñöôïc declared vôùi moät Block Structure gioáng nhö sau:

Namespace DoAnVB_NET Public Class TheClass Public Sub Greeting() MessageBox.Show("Hello world",

MsgBoxStyle.Information, "TheClass") End Sub End Class End Namespace

Muoán noùi ñeán baát cöù Class, Structure, hay thöù gì ñöôïc declared beân trong moät Namespace...End Namespace block ta phaûi duøng teân Namespace tröôùc. Thí duï:

Private myObject As DoAn_VB_NET.TheClass Moät source file coù theå chöùa nhieàu Namespaces, vaø beân trong moãi

Namespace laïi coù theå coù nhieàu Classes. Ngoaøi ra, Classes thuoäc veà cuøng moät Namespace coù theå naèm trong nhieàu

Page 47: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

44

files khaùc nhau trong moät VB.NET project. Thí duï ta coù moät source file vôùi code nhö sau:

Namespace DoAn_VB_NET Public Class TheClass ' Code End Class End Namespace

Laø moät source file khaùc trong cuøng project vôùi code:

Namespace DoAn_VB_NET Public Class TheOtherClass ' Code End Class End Namespace Vaäy thì trong Namespace DoAn_VB_NET ta coù hai Classes

TheClass vaø TheOtherClass. Nhôù laø, by default, Root Namespace cuûa moät VB.NET project laø teân cuûa project aáy. Khi ta duøng Namespace block structure laø chuùng ta ñang theâm moät taàng teân vaøo Root Namespace. Do ñoù, trong thí duï treân neáu teân project laø MyProject thì, töø beân ngoaøi project aáy, ta coù theå declare moät variable nhö sau:

Private myObject As MyProject. DoAn_VB_NET.TheClass 3.3.1.3. Taïo ra Methods

Methods trong VB.NET coù hai thöù: Sub vaø Function. Function thì phaûi return moät keát quaû. By default, parameters cuûa Method laø ByVal chôù khoâng phaûi ByRef. Töùc laø neáu muoán parameter naøo ByRef thì phaûi nhôù khai ra roõ raøng. Nhaéc laïi laø khi moät variable ñöôïc passed vaøo trong moät method baèng ByVal thì system cho method ñoù moät copy (baûn sao) cuûa variable, do ñoù, trò soá cuûa variable khoâng bò thay ñoåi bôûi coâng taùc cuûa method. Ngöôïc laïi, neáu moät variable ñöôïc passed vaøo trong moät method baèng ByRef thì method duøng chính variable ñoù, do ñoù, trò soá cuûa variable coù theå bò thay ñoåi bôûi coâng taùc cuûa method. Ta coù theå giôùi haïn vieäc söû duïng moät method baèng caùch aùp ñaët moät Access Modifier (söûa ñoåi quyeàn truy nhaäp) hay coøn goïi laø Scoping keyword (phaïm vi hoaït ñoäng):

' Private - chæ cho pheùp code trong cuøng Class ñöôïc goïi.

Page 48: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

45

' Friend - chæ cho pheùp code trong cuøng project/component ñöôïc goïi. ' Public - cho pheùp ai goïi cuõng ñöôïc. ' Protected - cho pheùp code trong subclasses (classes con, chaùu)

ñöôïc goïi. ' Protected Friend - cho pheùp code trong cuøng project/component

hay code trong subclasses ñöôïc goïi. 3.3.1.4. Taïo ra Properties

Trong VB.NET ta chæ duøng moät routine duy nhaát cho moãi Property, vôùi hai chöõ Get vaø Set nhö sau (khoâng coøn duøng chöõ Let cuûa VB6 nöõa):

Private mdescription As String Public Property Description() As String Set (ByVal Value As String) mdescription = Value End Set Get Description = mdescription End Get End Property

3.3.1.5. ReadOnly vaø WriteOnly property Baây giôø neáu Property laø ReadOnly ta seõ laáy phaàn Get ra vaø vieát:

Public ReadOnly Property Age() As Integer Get Age = 3 End Get End Property

hay WriteOnly ta seõ aáy phaàn Set ra vaø vieát: Private _data As Integer Public WriteOnly Property Data() As Integer Set (ByVal Value As Integer) _data = Value End Set End Property

3.3.1.6. Default Properties Default Property laø property cuûa Object maø program duøng khi ta

chæ cho teân cuûa Object vaø khoâng noùi roõ property naøo. Thí duï trong VB6 khi ta code:

TextBox1 = "The house of rising sun"

Page 49: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

46

VB6 hieåu raèng ta muoán duøng Default Property text cuûa Textbox1 neân code aáy töông ñöông vôùi:

TextBox1.text = "The house of rising sun" Trong VB6 khi ta duøng keyword Set vôùi teân cuûa Object, thí duï nhö:

Dim myTextBox As Textbox Set myTextBox = TextBox1

Program seõ hieåu laø ta muoán noùi ñeán chính Object myTextBox . Neáu khoâng thì noù bieát ta muoán noùi ñeán Object Default Property maø laøm bieán code cho roõ ra. Trong VB.NET Default Property phaûi laø moät Property array. Moät Property array laø moät property ñöôïc Indexed (noùi ñeán töøng Item baèng con soá Index) gioáng nhö moät array. Lyù do chính cuûa söï baét buoäc naày laø ñeå khoûi laãn loän giöõa hai tröôøng hôïp ta noùi ñeán Default property cuûa moät Object hay chính Object aáy, vì trong VB.NET ta khoâng coøn duøng Set keyword cho Object assignment nöõa (ta chæ coøn duøng keyword Set trong Property maø thoâi). Baây giôø heå muoán noùi ñeán Default Property cuûa Object thì phaûi duøng Index. Thí duï ñeå noùi ñeán chính Object, ta code:

myValue = myObject ñeå noùi ñeán Default Property Item 3 cuûa Object, ta code:

myValue = myObject(3) Söï thay ñoåi töø VB6 naày coù nghóa laø moät property array procedure phaûi nhaän moät parameter. Thí duï:

Private theData(100) As String Default Public Property Data(ByVal Index As

Integer) As String Get Data = theData(Index) End Get Set(ByVal Value As String) theData(Index) = Value End Set End Property

Töø nay ta khoâng theå code: TextBox1 = "Good morning!"

nhö trong VB6 ñöôïc nöõa, maø phaûi code: TextBox1.text = "Good morning!"

Page 50: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

47

Vì Property Text khoâng coøn laø Default Property cuûa TextBox. 3.3.2. Overloading methods(phöông thöùc quaù taûi)

Moät trong nhöõng chöùc naêng ña dieän (Polymorphism) huøng maïnh nhaát cuûa VB.NET laø overload (quaù taûi, coù roài maø coøn cho theâm) moät method. Overloading coù nghóa laø ta coù theå duøng cuøng moät teân cho nhieàu methods - mieãn laø chuùng coù danh saùch caùc parameters khaùc nhau, hoaëc laø parameter duøng data type khaùc nhau (td: method naày duøng Integer, method kia duøng String), hoaëc laø soá parameters khaùc nhau (td: method naày coù 2 parameters, method kia coù 3 parameters).

Overloading khoâng theå ñöôïc thöïc hieän chæ baèng caùch thay ñoåi data type cuûa Return value cuûa Function. Phaûi coù parameter list khaùc nhau môùi ñöôïc. Döôùi ñaây laø thí duï ta duøng Overloading ñeå code hai Functions tìm data, moät caùi cho String, moät caùi cho Integer:

Public Function FindData(ByVal Name As String) As ArrayList ' find data and return result End Function Friend Function FindData(ByVal Age As Integer) As ArrayList ' find data and return result End Function

Ñeå yù laø ta coù theå cho moãi overloading Function moät phaïm vi hoaït ñoäng (Scope on implementation) khaùc nhau. Trong thí duï treân ta duøng Access Modifier Public cho Function ñaàu vaø Friend cho Function sau. 3.3.3. Object Lifecycle (cuoäc ñôøi cuûa ñoái töôïng).

Object Lifecycle (cuoäc ñôøi cuûa Object) ñöôïc duøng ñeå noùi ñeán khi naøo Object baét ñaàu hieän höõu vaø khi naøo noù khoâng coøn nöõa. Sôø dó ta caàn bieát roõ cuoäc ñôøi cuûa moät Object baét ñaàu vaø chaám döùt luùc naøo laø ñeå traùnh duøng noù khi noù khoâng hieän höõu, töùc laø chöa ra ñôøi hay ñaõ khuaát boùng roài.

3.3.3.1. New method(taïo phöông thöùc môùi) Trong VB6, khi moät Object thaønh hình thì Sub Class_Initialize ñöôïc

thöïc thi (executed). Töông ñöông nhö vaäy, trong VB.NET ta coù Sub New(), goïi laø Constructor. VB.NET baûo ñaûm Sub New() seõ ñöôïc CLR(Common Language Runtime) goïi khi Object ñöôïc instantiated vaø noù chaïy tröôùc baát cöù code naøo trong Object.

Neáu Sub Class_Initialize cuûa moät Class Object trong VB6 khoâng nhaän parameter thì Sub New() trong VB.NET chaúng nhöõng coù nhaän parameters maø coøn cho pheùp ta nhieàu caùch ñeå goïi noù. Söï khaùc bieät trong Constructors cuûa VB6 vaø VB.NET raát quan troïng.

Page 51: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

48

Töôûng töôïng ta coù moät Khuoân laøm baùnh boâng lan; khuoân laø Class coøn nhöõng baùnh laøm ra töø khuoân seõ laø caùc Objects baùnh boâng lan. Neáu ta muoán laøm moät caùi baùnh boâng lan vôùi moät lôùp soâ-coâ-la treân maët thì coâng taùc seõ goàm coù hai böôùc:

' Duøng khuoân (Class) nöôùng moät caùi Object baùnh boâng lan (duøng Sub Class_Initialize) .

' Ñoå leân maët baùnh moät lôùp soâ-coâ-la (duøng class Public Sub ThoaSoâcoâla) .

Ñeán ñaây, moïi chuyeân töông ñoái oån thoûa. Baây giôø, neáu khaùch haøng muoán moät caùi baùnh boâng lan duøng tröùng vòt thay vì tröùng gaø thì ta chòu thua thoâi, vì khoâng coù caùch naøo baûo Sub Class_Initialize duøng tröùng vòt thay vì tröùng gaø ngay trong luùc ñang taïo döïng ra Object baùnh boâng lan.

Sub New() trong VB.NET coù theå nhaän parameters neân noù coù theå nhaän chæ thò ñeå duøng tröùng vòt ngay trong luùc nöôùng caùi Object baùnh boâng lan.

Caùi daïng ñôn giaûn nhaát cuûa Sub New() maø ta coù theå duøng laø khoâng pass parameter naøo caû (trong tröôøng hôïp naày thì gioáng nhö Sub Class_Initialize cuûa VB6). Ta code Sub New() trong Class nhö sau:

Public Class BanhBongLan Public Sub New() ' Code to initialise object here End Sub End Class

Ta instantiate moät Object baùnh boâng lan nhö sau: Dim myBanhBongLan As New BanhBongLan()

Ñeå cho Users coù söï löïa choïn khi instantiate Object, ta coù theå code theâm nhöõng Sub New khaùc, moãi Sub duøng moät danh saùch parameter khaùc nhau. Thí duï:

Page 52: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

49

Public Class BanhBongLan Public Sub New() ' Code to initialise object here End Sub Public Sub New(ByVal LoaiTrung As String) Select Case LoaiTrung Case "Vit" ' Code for TröùngVòt here Case "Ga" ' Code for TröùngGaø here End Select End Sub End Class

Duøng cuøng moät teân method ñeå thöïc thi(implement) nhieàu methods khaùc nhau ñöôïc goïi laø overload. Ñoù laø moät tröôøng hôïp ña daïng (polymorphism) cuûa OO programming. Trong thí duï treân neáu TröùngVòt vaø TröùngGaø laø hai loaïi Data Types khaùc nhau thì ta cuõng coù theå duøng:

Sub New (ByVal TröùngVòt As TröùngVòtDataType) ñeå instantiate baùnh TröùngVòt vaø

Sub New (ByVal TröùngGaø As TröùngGaøDataType) ñeå instantiate baùnh TröùngGaø.

Nhö theá ta khoûi baän taâm vôùi Select Case LoaiTrung khi chæ duøng moät Sub New duy nhaát vôùi 1 parameter.

Trong VisualStudio.NET, khi ta duøng teân cuûa moät overloaded method, IntelliSense seõ hieån thò ñeå höôùng daãn ta ñaùnh vaøo parameter list khaùc nhau tuøy theo method ta choïn. 3.3.3.2. Termination(söï hoaøn thaønh, keát thuùc)

Trong VB6 moät Object seõ bò huyû dieät khi caùi reference (choã duøng ñeán Object) cuoái cuøng bò laáy ñi. Töùc laø khi khoâng coù code naøo khaùc duøng Object nöõa thì Object seõ bò töï ñoäng huyû dieät. System giöõ moät counter ñeå ñeám soá clients ñang duøng Object. Caùch naày hay ôû choã khi counter trôû thaønh 0 thì Object bò huyû dieät ngay. Ta noùi noù coù deterministic finalization, nghóa laø ta bieát roõ raøng khi naøo Object bieán maát.

Tuy nhieân, neáu ta coù hai Object duøng laãn nhau (goïi laø circular references), thì ngay caû ñeán luùc chuùng khoâng coøn hoaït ñoäng nöõa, chuùng

Page 53: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

50

vaãn hieän höõu maõi trong boä nhôù vì caùi Reference counter cuûa caû hai Objects khoâng bao giôø trôû thaønh 0. Neáu tröôøng hôïp naày xaûy ra thöôøng laàn laàn system khoâng coøn memory nöõa, ta goïi ñoù laø memory leak (bò ræ boä nhôù) .

.NET duøng phöông phaùp khaùc ñeå quaûn lyù chuyeän naày. Cöù moãi choác, moät program seõ chaïy ñeå kieåm xem coù Object naøo khoâng coøn reference nöõa ñeå huyû dieät. Ta goïi ñoù laø Garbage Collection (nhaët raùc). Ngay caû tröôøng hôïp hai Objects coù circular references nhöng neáu khoâng coù code naøo khaùc reference moät trong hai Objects thì chuùng cuõng seõ ñöôïc huyû dieät. Coù ñieàu, coâng taùc nhaët raùc chaïy in the background (phía sau haäu tröôøng) vôùi öu tieân thaáp, khi CPU raûnh rang, neân ta khoâng bieát chaéc moät Object seõ bò huûy dieät ñeán bao giôø môùi thaät söï bieán maát. Ta noùi noù coù nondeterministic finalization.

Ta coù theå eùp CLR nhaët raùc laäp töùc baèng code: System.GC.Collect()

Tuy nhieân, ta chæ laøm vieäc aáy khi keït quaù thoâi. Toát hôn, ta duyeät laïi design cuûa mình ñeå cho pheùp caùc Objects heát xaøi coù theå ngoài chôi trong boä nhôù chôø ñeán luùc ñöôïc huûy dieät. 3.3.3.3. Duøng Dispose Method

Neáu ta coù moät Object duøng nhieàu taøi nguyeân (resources) nhö boä nhôù, database connection, file handle,.v.v. vaø ta caàn phaûi thaû caùc taøi nguyeân ra ngay sau khi Object khoâng coøn hoaït ñoäng nöõa, ta caàn thi haønh (implement) moät Interface teân IDisposable vôùi Implements keyword nhö sau:

Public Class TheClass Implements IDisposable

Baïn phaûi vieát code cho Sub Dispose gioáng nhö sau: Private Sub Dispose() Implements IDisposable.Dispose ' Vieát clean up code ôû ñaây ñeå thaû caùc taøi nguyeân ra End Sub

Sau ñoù baïn vaãn phaûi vieát code cho Client ñeå noù goïi Dispose Method trong IDisposable interface. Baïn caàn phaûi duøng CType ñeå (loaïi khoûi)cast Object Class khi goïi Dispose.

Dim objObject As New TheClass() CType (objObject, IDisposable).Dispose()

Ñeå laáy ñi Reference ñeán moät Object (goïi laø Dereference Object) baïn coù theå duøng:

Page 54: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

51

myObject = Nothing Ñeå yù laø ta khoâng coù duøng (töø khoùa)keyword Set nhö trong VB6. Nhôù laø

sau khi trình baøy (statement) treân ñöôïc thöïc thi (executed) thì myObject khoâng bieán maát ngay nhöng noù ñôïi Garbage Collector ñeán giaûi quyeát.

3.3.4. Thöøa keá Thöøa keá (Inheritance) laø khaû naêng cuûa moät Class ñaït ñöôïc interface

(giao dieän) vaø behaviours (thoùi quen,tiùnh tình) cuûa moät Class coù saün. Caùi quaù trình ñeå laøm neân vieäc aáy ñöôïc goïi laø Subclassing. Khi ta taïo ra moät Class môùi thöøa keá caû interface laãn behaviours töø moät Class coù saün laø chuùng ta ñaõ taïo ra moät subclass cuûa Class nguyeân thuûy. Ngöôøi ta noùi ñoù laø moät moái lieân heä is-a (laø moät), yù noùi Class môùi laø moät loaïi Class nguyeân thuûy.

Ta phaân bieät moái lieân heä is-a vôùi moái lieân heä has-a (coù moät). Trong moái lieân heä has-a, Object chuû coù theå laøm chuû moät hay nhieàu Objects tôù, nhöng Object tôù laø moät loaïi coù theå hoaøn toaøn khaùc vôùi Object chuû.

Ñeå bieåu dieãn ñaëc tính Inheritance ta haõy xeùt tröôøng hôïp moät coâng ty cung caáp Saûn phaåm vaø Dòch vuï. Ta coù theå code moät Class cho Saûn phaåm (ProductLine) vaø moät Class cho Dòch vuï (ServiceLine) , rieâng reõ nhau. Nhöng vì thaáy chuùng coù nhieàu ñieåm töông ñoàng neân ta seõ code moät Class goïi laø Moùn haøng (LineItem), roài inherit töø LineItem ra ProductLine vaø ServiceLine.

LineItem coù caùc properties ID, Item, Price (giaù) vaø Quantity (soá löôïng). Noù cuõng coù moät Public Function ñeå cho Amount (soá tieàn).

(Xem ví duï 3.1) Public Class LineItem Private mintID As Integer Private mstrItem As String Private msngPrice As Single Private mintQuantity As Integer Public Property ID() As Integer Get Return mintID End Get Set (ByVal Value As Integer) mintID = Value End Set End Property

Page 55: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

52

Public Property Item() As String Get Return mstrItem End Get Set (ByVal Value As String) mstrItem = Value End Set End Property Public Property Price() As Single Get Return msngPrice End Get Set (ByVal Value As Single) msngPrice = Value End Set End Property Public Property Quantity() As Integer Get Return mintQuantity End Get Set (ByVal Value As Integer) mintQuantity = Value End Set End Property Public Function Amount() As Single Return mintQuantity * msngPrice End Function End Class

Ñeå taïo Class ProductLine töø Class LineItem ta phaûi duøng Inherits keyword. Moãi Object ProductLine laø moät Object LineItem vôùi ProductID vaø Description. ProductID cuûa ProductLine ñöôïc pass vaøo Sub New luùc instantiate Object ProductLine. Coøn Description laø moät ReadOnly property cuûa ProductLine. Ta coù theå code Class ProductLine nhö sau:

Public Class ProductLine

Page 56: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

53

Inherits LineItem Private mstrDescription As String Public ReadOnly Property Description() As String Get Return mstrDescription End Get End Property Public Sub New(ByVal ProductID As String) Item = ProductID mstrDescription = "No description yet" ' Default description ' Vieát code ôû ñaây ñeå ñoïc chi tieát cuûa Product töø Database ' trong ñoù coù theå coù Description cuûa Product End Sub End Class

Statement Inherits LineItem khieán ProductLine thöøa keá moïi interface vaø behaviours cuûa LineItem. Do ñoù ta coù theå code moät Sub BtnProduct_Click ñeå hieån thò chi tieát cuûa ProductLine trong moät Listbox nhö sau:

Protected Sub BtnProduct_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnProduct.Click Dim pl As ProductLine pl = New ProductLine("P1234") ListBox1.Items.Add("ProductItem:" & pl.Item) ListBox1.Items.Add("Description: $" & pl.Description) End Sub

Trong code beân treân ta duøng caû property Item cuûa Class LineItem laãn property Description cuûa Class ProductLine. Caû hai ñeàu laø property cuûa ProductLine vì noù laø moät SubClass cuûa LineItem.

Gioáng nhö vaäy, moät ServiceLine coù theå coù ghi ngaøy giôø cung caáp service. Ta code Class ServiceLine nhö sau:

Public Class ServiceLine Inherits LineItem Private mdtDateProvided As Date

Page 57: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

54

Public Sub New() ' Make 1 as default number of services of this kind for invoice Quantity = 1 End Sub Public Property DateProvided() As Date Get Return mdtDateProvided End Get Set (ByVal Value As Date) mdtDateProvided = Value End Set End Property End Class

Moät laàn nöõa ta duøng Statement Inherits ñeå noùi raèng ServiceLine laø moät SubClass cuûa LineItem. Ta theâm property DateProvided vaøo interface thöøa keá töø Class LineItem. 3.3.5. Ngaên caûn Thöøa keá

Bình thöôøng (By default) class naøo cuõng coù theå ñöôïc duøng laøm base class ñeå töø ñoù ta thöøa keá. Nhöng ñoâi khi ta khoâng muoán cho ai thöøa keá töø moät Class naøo ñoù, ñeå laøm vieäc aáy ta duøng keyword NotInheritable khi declare class:

Public NotInheritable Class KhoângCon End Class

Khi ta ñaõ duøng keyword NotInheritable roài thì khoâng class naøo coù theå duøng keyword Inherits ñeå taïo moät subclass töø class aáy. 3.3.6. Thöøa keá vaø Phaïm vi hoaït ñoäng

Khi ta duøng ñaëc tính thöøa keá ñeå taïo moät SubClass thì class môùi naày coù ñuû moïi methods, properties vaø variables vôùi Access Modifier Public hay Friend cuûa SuperClass. Baát cöù thöù gì declared laø Private trong SuperClass thì SubClass khoâng thaáy hay duøng ñöôïc. Coù moät ngoaïi leä laø New method. Caùc Constructor methods caàn phaûi ñöôïc implemented(ñònh nghóa) laïi trong moãi SubClass.Ta seõ baøn vaøo chi tieát veà ñieåm naày beân döôùi.

Ñeå laøm saùng toû vaán ñeà SubClass coù theå duøng Class Members naøo cuûa SuperClass, ta thöû code laïi Function Amount trong LineItem class baèng caùch

Page 58: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

55

khieán noù goïi moät Private Function teân CalculateAmount ñeå tính ra Amount thay vì ñeå noù tính tröïc tieáp nhö tröôùc ñaây:

Public Function Amount() As Single Return CalculateAmount End Function Private Function CalculateAmount() As Single Return mintQuantity * msngPrice End Function

Khi ta SubClass LineItem ñeå taïo ra ServiceLine class, baát cöù Object ServiceLine naøo cuõng thöøa keá Function Amount vì Function aáy ñöôïc declared Public trong BaseClass LineItem. Ngöôïc laïi, vì Function CalculateAmount laø Private neân caû ServiceLine class laãn baát cöù client code naøo duøng moät LineItem Object ñeàu khoâng truy caäp noù ñöôïc.

Nhö theá, maëc daàu ta goïi Function Amount ñöôïc, nhöng ñeán phieân noù goïi Private Function CalculateAmount thì coù bò trôû ngaïi khoâng? Khoâng sao caû. Vì Function Amount naèm trong cuøng Class vôùi Private Function CalculateAmount neân noù coù theå goïi ñöôïc, duø raèng ta goïi Function Amount töø ServiceLine hay client code.

Thí duï trong client code ta coù nhöõng haøng code nhö sau: Protected Sub BtnShowAmount_Click(ByVal sender AsSystem.Object, _ ByVal e As System.EventArgs) HandlesBtnShowAmount.Click Dim Service As ServiceLine Service = New ServiceLine() Service.Item = "Delivery" Service.Price = 50 Service.DateProvided = Now MessageBox.Show (Service.Amount.ToString, "Amount",MessageBoxButtons.OK, MessageBoxIcon.Information) End Sub

Keát quaû seõ ñöôïc hieån thò trong message box, cho thaáy Function CalculateAmount ñöôïc Function Amount goïi duøm cho client code duø raèng caû client code laãn ServiceLine code ñeàu khoâng theå goïi tröïc tieáp ñöôïc.

Ví duï nhö nhaø baïn coù moät maùy hieän ñaïi (maùy vi tính chaúng haïn), vaø taát nhieân laø nhöõng ngöôøi trong nhaøn baïn coù theå söû duïng noù ñöôïc deã daøng. Nhöng toâi ñeán söû duïng thì khoâng ñöôïc. Bôûi vì Access Modifier cuûa maùy tính laø

Page 59: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

56

Private trong nhaø baïn. Nhöng baïn coù theå söû duïng ñöôïc bôûi vì baïn laø Public, neân toâi coù theå nhôø baïn hoaït ñoäng noù duøm. 3.3.7. Protected Methods

Ñoâi khi Public hay Private thoâi chöa ñuû. Neáu ta declare thöù gì Private thì noù hoaøn toaøn giôùi haïn trong class, ngöôïc laïi neáu ta declare noù Public (hay Friend) thì noù coù theå ñöôïc duøng trong subclasses hay client code.

Tuy nhieân, coù luùc ta muoán moät class member chæ coù theå ñöôïc duøng trong subclasses thoâi, chôù khoâng cho client code duøng. Trong tröôøng hôïp aáy ta duøng keyword Protected. Thí duï:

Public Class FatherClass Protected DiSaûn As Single End Class Public Class SonClass Inherits FatherClass Public Function ChiaCuûa() As Single Return Disaûn End Function End Class

ÔÛ ñaây ta coù BaseClass FatherClass vôùi Protected Field Disaûn. Khoâng coù client code naøo coù theå thaáy Field DiSaûn ñöôïc. Theá nhöng baát cöù SubClass naøo cuûa FatherClass cuõng ñeàu thöøa keá vaø duøng ñöôïc DiSaûn.

Trong thí duï treân, moät laàn nöõa SubClass coù moät Public method (ChiaCuûa) coù theå return moät protected value - nhöng chính value aáy, DiSaûn, khoâng tröïc tieáp cho pheùp client code duøng. 3.3.8. Overriding Methods

Chuùng ta bieát raèng ñaëc tính quan troïng cuûa Inheritance laø moät SubClass chaúng nhöõng thöøa keá behaviours cuûa ParentClass maø coøn coù theå override (laán quyeàn) caùc behaviours aáy nöõa. Chuùng ta ñaõ thaáy moät SubClass coù theå extend (theâm ra) ParentClass baèng caùch cho theâm caùc methods Public, Protected vaø Friend. Hôn nöõa, khi duøng overriding, moät SubClass coù theå alter (söûa ñoåi) behaviours cuûa caùc methods trong ParentClass.

Bình thöôøng (By default), ta khoâng theå override methods trong ParentClass tröø khi caùc methods aáy ñöôïc declared vôùi keyword Overridable trong ParentClass. Thí duï:

Public Class ClassCha Public Overridable Sub ChaøoHoûi() MessageBox.Show("Chaøo caùc chaùu", "Class Cha") End Sub

Page 60: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

57

End Class Tieáp theo, khi taïo moät SubClass, neáu muoán ta coù theå override behaviour cuûa Sub ChaøoHoûi baèng caùch duøng keyword Overrides nhö sau:

Public Class ClassCon Inherits ClassCha Public Overrides Sub ChaøoHoûi() MessageBox.Show("Thöa caùc Baùc", "Class Con") End Sub End Class

Baây giôø ta coù theå vieát client code nhö sau: Private Sub BtnSubClassObject_Click(ByVal sender AsSystem.Object, _ ByVal e As System.EventArgs) HandlesBtnSubClassObject.Click Dim obj As New ClassCon() obj.ChaøoHoûi() End Sub

Khi ta click button BtnSubClassObject program seõ hieån thò message dialog döôùi ñaây:

3.3.8.1. Virtual Methods Tuy nhieân, haõy xem tröôøng hôïp ta code nhö sau:

Private Sub BtnParentClassObject_Click(ByVal sender AsSystem.Object, _ ByVal e As System.EventArgs) HandlesBtnParentClassObject.Click Dim obj As ClassCha obj = New ClassCon() obj.ChaøoHoûi() End Sub

Page 61: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

58

Tröôùc heát, ôû ñaây coù veû kyø kyø, taïi sao declare moät variable loaïi ClassCha maø laïi instantiate moät object ClassCon. Chuyeän ñoù hoaøn toaøn bình thöôøng, vì ClassCon laø moät ClassCha. Töùc laø moät variable loaïi ClassCha hay ClassCon ñeàu coù theå chöùa, thaät ra laø hold references to (point to, chæ tôùi), moät instance cuûa ClassCon.

Ñieåm naày aùp duïng toång quaùt khi ta duøng Inheritance. Moät variable loaïi SuperClass coù theå hold reference to baát cöù SubClass Object naøo thöøa keá töø SuperClass aáy. Ñoù laø moät caùch ñeå ta implement tính ña daïng (polymorphism).

Ñeàu coù theå laøm ta ngaïc nhieân laø khi ta click button BtnParentClassObject ta cuõng thaáy hieån thò message " Thöa caùc Baùc".

(Xem ví duï 3.2)

Sao laï vaäy? Variable obj ñöôïc declared laø ClassCha taïi sao message khoâng phaûi laø "Chaøo caùc chaùu"? Lyù do laø Sub ChaøoHoûi cuûa ClassCon ñöôïc goïi thay vì Sub ChaøoHoûi cuûa ClassCha. Ta noùi Sub ChaøoHoûi laø Virtual method. Taát caû methods trong VB.NET ñeàu laø virtual.

YÙ nieäm virtual ñeå noùi raèng caùi implementation cuûa con chaùu treû nhaát trong doøng hoï ñöôïc duøng - khoâng caàn bieát laø variable coù data type laø class cuûa theá heä naøo trong doøng hoï. Töùc laø, neáu variable duøng trong client code hold references to ClassOÂngNoäi, ClassCha, ClassCon hay ClassChaùu thì method trong ClassChaùu ñöôïc goïi. Neáu trong ClassChaùu khoâng coù implementation cuûa method thì ta goïi method trong ClassCon, neáu khoâng coù thì goïi method trong ClassCha .v.v.. theo thöù töï töø beà döôùi leân beà treân. 3.3.8.2. Keyword Me

Keyword Me ñöôïc duøng khi ta muoán noùi roõ (explicitly) raèng ta muoán duøng method cuûa chính caùi Class ñang chöùa code aáy, chôù khoâng phaûi moät implementation naøo khaùc cuûa method aáy.

Cuõng coù tröôøng hôïp ta phaûi duøng keyword Me ñeå noùi ta muoán duøng class-level variable chôù khoâng phaûi procedure-level variable coù cuøng teân. Moät procedure-level variable, töùc laø local variable cuûa moät method, coù

Page 62: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

59

cuøng teân vôùi moät class-level variable ñöôïc goïi laø shadowed variable. Thí duï:

Public Class TheClass Private strName As String Public Sub DoSomething() Dim strName As String strName = "Hieáu" End Sub End Class

ÔÛ ñaây, variable strName ñöôïc declared ôû class-level vaø beân trong Sub DoSomething. Beân trong method aáy local variables (keå caû shadowed variables) seõ ñöôïc duøng vì chuùng che ñaäy class-level variables tröø khi ta noùi roõ raèng phaûi duøng variable cuûa class-level baèng caùch duøng keyword Me:

Public Class TheClass Private strName As String Public Sub DoSomething() Dim strName As String strName = "Hieáu" ' thay ñoåi value cuûa local

(shadowed) variable Me.strName = "Anh" ' thay ñoåi value cuûa class-level

variable End Sub End Class

3.3.8.3. Keyword MyBase Keyword Me raát tieän duïng khi ta muoán duøng Class members cuûa chính

Class chöùa code. Töông töï nhö vaäy, ñoâi khi ta muoán duøng Class method cuûa BaseClass (cuõng goïi laø SuperClass), chôù khoâng phaûi moät implementation cuûa method aáy trong SubClass. Nhôù laø moät virtual method luoân luoân goïi caøi ñaët (implementation) cuûa Class treû nhaát.

Töø trong moät SubClass, neáu muoán goïi moät method cuûa BaseClass ta duøng keyword MyBase nhö sau:

Public Class ClassCon Inherits ClassCha Public Overrides Sub ChaøoHoûi() MessageBox.Show("Thöa caùc Baùc", "Class Con") MyBase.ChaøoHoûi() End Sub

Page 63: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

60

End Class Baây giôø neáu ta chaïy Sub ChaøoHoûi cuûa ClassCon ta seõ coù hai

messages, moät caùi töø ClassCon theo sau bôûi moät caùi töø ClassCha. MyBase chæ noùi ñeán BaseClass tröïc tieáp, töùc laø Class cha thoâi chôù

khoâng noùi ñeán Class oâng noäi. Khoâng coù caùch naøo ñeå noùi ñeán hôn moät theá heä.

Daàu vaäy, keyword Mybase coù theå ñöôïc duøng cho baát cöù thöù gì ñaõ ñöôïc declared Public, Friend hay Protected trong ParentClass. Ñieàu naày keå luoân caû nhöõng thöù maø ParentClass thöøa keá töø caùc theá heä tröôùc trong gia ñình, töùc laø ClassOÂngNoäi, ClassOÂngCoá .v.v..

3.3.8.4. Keyword MyClass

Vì lyù do virtual method, ta seõ gaëp nhöõng tröôøng hôïp raéc roái nhö khi code cuûa ParentClass laïi chaïy code cuûa SubClasses. Khi vieát code cuûa moät class, töø method naày ta thöôøng goïi nhöõng methods khaùc naèm trong cuøng class. Thí duï nhö:

Public Class ClassCha Public Sub VoâÑeà() ChaøoHoûi() End Sub Public Overridable Sub ChaøoHoûi() MessageBox.Show("Chaøo caùc chaùu", "Class Cha") End Sub End Class

Trong tröôøng hôïp naày, VoâÑeà goïi Sub ChaøoHoûi ñeå ñoùn tieáp. Ñeå yù laø vì ChaøoHoûi ñöôïc declared Overridable neân raát coù theå moät SubClass seõ implement method ChaøoHoûi vaø laán quyeàn noù. Thí duï:

Public Class ClassCon Inherits ClassCha Public Overrides Sub ChaøoHoûi() MessageBox.Show("Thöa caùc Baùc", "Class Con") End Sub End Class

Vì ñaëc tính virtual cuûa ChaøoHoûi neân ta töôûng ClassCha execute chính Sub ChaøoHoûi cuûa noù nhöng teù ra noù laïi execute code cuûa ChaøoHoûi trong ClassCon. Trong code döôùi ñaây, moät Object ClassCon goïi Sub VoâÑeà cuûa ClassCha:

Page 64: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

61

Private Sub BtnSubClassObject_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSubClassObject.Click Dim obj As New ClassCon() obj.VoâÑeà() End Sub

Trong ClassCha, Sub VoâÑeà goïi ChaøoHoûi cuûa chính noù, tuy nhieân Sub ChaøoHoûi aáy bò overridden bôûi caøi ñaët (implementation) cuûa ChaøoHoûi trong ClassCon. Do ñoù, program seõ hieån thò message "Thöa caùc Baùc".

Neáu ta khoâng muoán nhö vaäy, ta muoán VoâÑeà execute chính code cuûa ChaøoHoûi trong ClassCha thì phaûi duøng keyword MyClass nhö sau:

Public Class ClassCha Public Sub VoâÑeà() MyClass.ChaøoHoûi() End Sub Public Overridable Sub ChaøoHoûi() MessageBox.Show("Chaøo caùc chaùu", "Class Cha") End Sub End Class

ÔÛ ñaây ta khoâng theå duøng keyword Me vì VoâÑeà coù goïi ChaøoHoûi ôû class-level trong ClassCha chôù khoâng phaûi trong moät SubClass, nhöng bò overridden. Hình döôùi ñaây minh hoïa quaù trình goïi VoâÑeà töø client code:

Sub VoâÑeà thaät ra naèm trong ClassCha maø ClassCon thöøa keá neân

VoâÑeà ñöôïc thöïc thi (executed) trong ClassCha vaø goïi Sub ChaøoHoûi

Page 65: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

62

trong cuøng class ( ClassCha). Nhöng vì ClassCon coù moät caøi ñaët (implementation) cuûa Sub ChaøoHoûi neân noù overrides ChaøoHoûi cuûa ClassCha.

3.3.9. Overridding Method New Chuùng ta ñaõ thaáy ta coù theå override methods vaø duøng caùc keywords Me,

MyBase vaø MyClass ñeå goïi caùc overriden methods trong daây chuyeàn thöøa keá. Tuy nhieân, ñoái vôùi Constructor cuûa class thì coù nhöõng luaät leä ñaëc bieät daønh rieâng cho method New.

Nhöõng methods New khoâng töï ñoäng di truyeàn töø BaseClass xuoáng SubClass. Moãi SubClass phaûi coù moät caøi ñaët (implementation) rieâng cho Constructor duø raèng, neáu muoán, noù coù theå goïi vaøo BaseClass vôùi keyword MyBase:

Public Class ClassCon Inherits ClassCha Public Sub New() MyBase.New() ' ñeå theâm caùc code khaùc ñeå initialise taïi ñaây End Sub End Class

Khi goïi Constructor cuûa BaseClass, ta phaûi goïi noù tröôùc nhaát - neáu khoâng seõ bò error. Tuy nhieân ta khoâng caàn goïi Constructor cuûa BaseClass vì Constructor cuûa BaseClass ñöôïc goïi töï ñoäng.

Coù moät luaät ñaëc bieät laø neáu taát caû methods New trong BaseClass ñeàu ñoøi hoûi parameters thì ta phaûi implement ít nhaát moät method New trong SubClass vaø ta phaûi ñaët statement MyBase.New ngay phía ñaàu.

Dó nhieân laø ta coù theå Overload method New trong SubClass, nhöng ta phaûi töï lo lieäu caùch goïi moät method New thích hôïp trong BaseClass. 3.3.10. Taïo BaseClasses vaø Abstract Methods

Cho ñeán giôø ta ñaõ baøn veà virtual method vôùi ñaëc tính override trong nguyeân taéc thöøa keá. Trong caùc thí duï tröôùc ñaây BaseClass ñöôïc instantiated thaønh Object ñeå laøm chuyeän naày, chuyeän kia. Nhöng ñoâi khi ta muoán taïo moät BaseClass chæ ñeå duøng cho thöøa keá maø thoâi.

3.3.10.1. Keyword MustInherit (Phaûi ñöôïc Thöøa Keá) Trôû laïi caùi thí duï veà Inheritance vôùi Class LineItem. Sôû dó ta ñaët ra

Class LineItem laø vì noù chöùa nhöõng thöù chung cho caû hai classes ProductLine vaø ServiceLine. Chôù thaät ra moät Object cuûa Class LineItem khoâng chöùa ñuû moïi ñaëc tính ñeå laøm moät vieäc gì thöïc teá. Neáu ta muoán noùi

Page 66: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

63

roõ raèng Class LineItem chæ ñöôïc duøng ñeå taïo nhöõng SubClasses baèng caùch thöøa keá töø noù, ta coù theå declare nhö sau:

Public MustInherit Class LineItem Töùc laø ta chæ theâm keyword MustInherit thoâi, chôù khoâng thay ñoåi gì

khaùc. Keát quaû laø töø nay Client code khoâng theå instantiate moät Object töø Class LineItem. Do ñoù doøng code sau seõ bò syntax error:

Dim myObject As New LineItem() Thay vaøo ñoù, neáu muoán duøng LineItem ta phaûi taïo SubClass töø noù.

3.3.10.2. Keyword MustOverride (Phaûi bò Laán Quyeàn) Töông töï vôùi yù nieäm Phaûi-ñöôïc-thöøa-keá trong Class, ta cuõng coù

MustOverride cho moät method. Coù theå trong BaseClass ta khai baùo moät method, nhöng ta ñoøi hoûi method aáy phaûi coù moät caøi ñaët (implementation) trong SubClass. Ta declare nhö sau:

Dim MustOverride Sub CalculatePrice Ñeå yù laø ôû ñaây khoâng coù thaân theå cuûa Sub CalculatePrice hay statement

End Sub gì caû. Khi duøng MustOverride ta khoâng ñöôïc pheùp cung caáp moät caøi ñaët (implementation) cho method trong BaseClass. Moät method nhö theá ñöôïc goïi laø abstract method (phöông thöùc tröøu töôïng) hay pure virtual function (haøm thuaàn aûo), vì noù chæ coù phaàn khai baùo chôù khoâng coù phaàn ñònh nghóa. Nhöõng abstract methods phaûi ñöôïc overridden trong baát cöù SubClass naøo cuûa BaseClass thì môùi duøng ñöôïc. Neáu khoâng, ta seõ khoâng coù phaàn caøi ñaët (implementation) cuûa method ñaâu caû vaø khi compile seõ gaëp syntax error. 3.3.10.3. Abstract Base Classes

Neáu hôïp caû hai yù nieäm MustInherit vaø MustOverride laïi ta seõ taïo ra moät abstract base class. Ñaây laø moät Class chæ coù khai baùo chôù hoaøn toaøn khoâng coù caøi ñaët (implementation). Ta phaûi SubClass töø noù thì môùi laøm vieäc ñöôïc, thí duï nhö:

Public MustInherit Class ClassCha Public MustOverride Sub VoâÑeà() Public MustOverride Sub ChaøoHoûi() End Class

Kyõ thuaät naày raát thích hôïp ñeå ta code caùi söôøn hay boá cuïc cuûa program ngay trong luùc thieát keá. Class naøo thöøa keá ClassCha thì phaûi implement caû Sub VoâÑeà laãn Sub ChaøoHoûi, neáu khoâng seõ bò syntax error.

Nhìn veà moät phöông dieän, abstract base class raát gioáng khai baùo Interface. Neáu duøng Interface, chuùng ta coù theå khai baùo nhö sau:

Page 67: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

64

Public Interface ICha Sub VoâÑeà() Sub ChaøoHoûi() End Interface

Baát cöù class naøo chòu implement interface ICha thì phaûi implement caû Sub VoâÑeà laãn Sub ChaøoHoûi, neáu khoâng seõ bò syntax error - do ñoù, ta thaáy Interface raát gioáng moät abstract base class.

Söï khaùc bieät chính giöõa abstract base class vôùi Interface laø ôû choã thöøa keá. Khi ta taïo moät class con baèng caùch SubClass töø ClassCha, chính class con aáy laïi cuõng coù theå ñöôïc SubClassed. Maáy class chaùu naày seõ töï ñoäng thöøa keá VoâÑeà vaø ChaøoHoûi töø class con.

Trong khi aáy noùi veà Interface, moãi class phaûi töï implement ICha moät caùch ñoäc laäp vaø phaûi cung caáp hai Subs VoâÑeà vaø ChaøoHoûi cuûa chính noù. Vì theá, neáu ta khoâng coù yù ñònh duøng laïi code cuûa caùc Subs khi ta taïo caùc classes môùi thì ta coù theå duøng interface. Ngöôïc laïi neáu ta muoán duøng laïi code trong SubClass theo nguyeân taéc thöøa keá thì ta neân duøng abstract base class.

3.3.11. Shared class members ( Caùc thaønh vieân ñeå duøng chung cuûa class)

Maëc duø Object raát hieäu naêng vaø höõu ích, coù khi ta chæ muoán truy caäp caùc variables hay methods cuûa moät class ñeå laøm vieäc maø khoâng caàn phaûi instantiate moät Object naøo caû. Töùc laø y nhö trong quaù khöù, khi vieát VB6, ta duøng caùc variables hay methods cuûa moät BAS Module. Ñaïi khaùi gioáng nhö thay vì kyù giao keøo vôùi moät thaàu (Object) ñeå thöïc hieän moät coâng trình, ta chæ muoán möôùn thôï hay chuyeân vieân laøm vieäc gia coâng ( goïi caùc methods) thoâi.

3.3.11.1. Shared Methods Trong VB.NET chaúng nhöõng moät Class coù caùc methods vaø properties

thoâng thöôøng nhö ta ñaõ thaáy - töùc laø nhöõng methods vaø properties cuûa moät Object ta coù theå duøng ngay sau khi Object aáy thaønh hình qua quaù trình instantiation - maø coøn coù caùc methods vaø properties ta coù theå duøng maø khoâng caàn phaûi taïo ra moät instance naøo töø Class. Chuùng ñöôïc goïi laø shared methods. ( Trong caùc ngoân ngöõ laäp trình khaùc caùc methods naày coøn ñöôïc goïi laø static methods hay class methods).

Ta khoâng theå truy caäp moät shared method qua moät Object nhö method bình thöôøng, nhöng phaûi duøng tröïc tieáp teân cuûa class. Thí duï sau ñaây seõ minh hoïa ñieàu naày:

Public Class Math Shared Function Add( ByVal x As Single, ByVal y As

Page 68: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

65

Single) As Single Return x + y End Function End Class

Sau khi ñònh nghóa Class Math, ta coù theå duøng Shared Function Add maø khoâng caàn instantiate moät Object thuoäc class Math nhö sau:

Dim Result As Single result = Math.Add(12.5, 36.8)

Ñeå yù thay vì duøng moät object variable ta duøng thaúng teân cuûa class Math ñeå truy caäp method Add. Vôùi moät method bình thöôøng thì laøm nhö theá seõ bò syntax error, nhöng trong tröôøng hôïp naày thì khoâng sao.

Ta cuõng coù theå overload shared methods, töùc laø coù theå code nhieàu shared methods vôùi cuøng moät teân nhöng coù nhöõng parameter lists khaùc nhau.

Phaïm vi hoaït ñoäng bình thöôøng (Default Scope) cuûa shared methods laø Public. Tuy nhieân ta coù theå giôùi haïn vieäc truy caäp chuùng baèng caùch duøng nhöõng Access Modifiers nhö Friend, Protected hay Private. Thaät ra khi overloading moät shared method ta coù theå duøng nhöõng scopes khaùc nhau cho moãi shared method.

Coù moät thí duï veà shared method töø .NET system class libraries. Ñeå môû moät text file theo mode input, ñieån hình ta duøng shared method trong File class nhö sau:

Dim inFile As StreamReader = File.OpenText("words.txt") Dim strIn As String strIn = inFile.ReadLine()

ÔÛ ñaây khoâng coù object File naøo ñöôïc taïo ra. Method OpenText laø moät shared Function, noù môû input text file words.txt vaø cho ta moät object loaïi StreamReader teân inFile ñeå ta duøng sau ñoù. 3.3.11.2. Shared Variables

Ñoâi khi ta muoán taát caû objects cuûa cuøng moät class ñeàu duøng chung moät variable. Ta coù theå thöïc hieän vieäc aáy vôùi shared variables.

Moät shared variable ñöôïc khai baùo vôùi keyword shared gioáng nhö shared method:

Public Class MyCounter Private Shared mintCount As Integer End Class

Page 69: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

66

Ta coù theå cho shared variable moät scope Public hay Private tuøy yù, nhöng By Default, scope cuûa shared variables laø Private, khaùc vôùi shared methods thì By Default laø Public.

Ñieåm quan troïng cuûa shared variables laø chuùng ñöôïc duøng chung giöõa moïi instances (objects) cuûa cuøng moät class. Döôùi ñaây laø moät thí duï trong ñoù ta giöõ caùi counter coù trò soá taêng theâm 1 moãi laàn coù moät instance môùi cuûa class MyCounter. Baát cöù luùc naøo ta cuõng coù theå bieát coù bao nhieâu objects ñaõ ñöôïc taïo ra baèng caùch ñoïc property Count:

(Xem ví duï 3.3) Public Class MyCounter Private Shared mintCount As Integer Public Sub New() mintCount += 1 End Sub Public ReadOnly Property Count() As Integer Get Return mintCount End Get End Property End Class

Nhö theá, neáu ta chaïy client code döôùi ñaây noù seõ hieån thò keát quaû laø 3: Protected Sub Button1_Click( ByVal sender As Object,ByVal e As System.EventArgs) Handles Button1.Click Dim obj As MyCounter obj = New MyCounter() obj = New MyCounter() obj = New MyCounter() MsgBox(obj.Count, MsgBoxStyle.Information, "Counter") End Sub

Neáu ta chaïy code theâm hai laàn nöõa, ta seõ coù 6 vaø 9. Heå ta coøn chaïy chöông trình thì caùi counter coøn laøm vieäc. Khi ta chaám döùt chöông trình thì caùi counter seõ bieán maát. 3.3.11.3. Global values

Moät caùch duøng raát thoâng duïng khaùc cuûa shared variable laø xem noù nhö moät loaïi Global variable. Khi duøng scope Public ta seõ coù moät daïng töông ñöông vôùi VB6 Global variable trong moät BAS Module. Thí duï nhö:

Public Class GlobalData Public Shared TotalCost As Single

Page 70: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

67

End Class Sau ñoù ta coù theå duøng variable naày khaép nôi trong client code:

GlobalData.TotalCost += 45.60 3.3.12. Events (Söï kieän)

3.3.12.1. Raising Event ñeå xöû lyù trong moät Project khaùc VB.NET khoâng hoå trôï Events töø ñôøi cha ñeán ñôøi con theo ñuùng nguyeân

taéc thöøa keá. Neáu moät BaseClass ñònh nghóa moät Public Event thì ta chæ coù theå raise event aáy trong code cuûa BaseClass thoâi chôù khoâng theå raise event aáy trong SubClass naøo cuûa BaseClass aáy.

Khaùc vôùi methods, ta khoâng theå overload moät Event, töùc laø khoâng theå duøng moät teân cho hai Events coù parameter list khaùc nhau.

Ta coù theå taïo moät Class Library Project vôùi moät Class trong ñoù coù raise moät Event roài taïo moät project khaùc trong ñoù coù code ñeå ñoùn nhaän vaø xöû lyù Event aáy.

Ñeå thöû vieäc naày baïn haõy taïo moät Class Library Project môùi vôùi teân ClassLibrary1 veà vieát nhöõng doøng code ñònh nghóa Class Class1 vôùi Event TheEvent vaø Sub LaømVieäc ñeå raise Event nhö sau:

Public Class Class1 Public Event TheEvent() Public Sub LaømVieäc() RaiseEvent TheEvent() End Sub End Class

Keá ñoù baïn duøng Menu command File | Add Project | New Project ñeå theâm moät project môùi vôùi teân EventClass. Ñeå coù theå duøng Class1, baïn caàn phaûi reference noù vôùi Menu command Project | Add Reference..., choïn Tab Projects vaø click Browse ñeå choïn ClassLibrary1.DLL töø subfolder ClassLibrary1\bin cuûa solution nhö trong hình döôùi ñaây:

Page 71: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

68

Moät khi ñaõ referenced ClassLibrary1 vôùi Class1 trong aáy, baây giôø baïn coù theå doubleclick leân Form1 ñeå code nhö sau:

Private WithEvents obj As ClassLibrary1.Class1 Private Sub Form1_Load( ByVal sender As System.Object, _ ByVal e As System.EventArgs) HandlesMyBase.Load obj = New ClassLibrary1.Class1() End Sub

Nhôù laø ta phaûi declare variable obj thuoäc loaïi ClassLibrary1.Class1 vôùi WithEvents. Ñaët moät Button teân BtnLaømVieäc vaø doubleclick leân noù ñeå code nhö sau:

Private Sub BtnLaømVieäc_Click( ByVal sender AsSystem.Object, _ ByVal e As System.EventArgs) HandlesBtnLaømVieäc.Click obj.LaømVieäc() End Sub

Ñeå xöû lyù Event cuûa obj baïn choïn teân töø combobox phía treân beân traùi, roài choïn TheEvent töø ComboBox beân phaûi nhö trong hình döôùi ñaây:

Page 72: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

69

ÔÛ ñaây ta handle Event baèng caùch hieån thò moät message ñôn giaûn: Ñang xöû lyù moät Event töø Class1. Baây giôø baïn coù theå chaïy program. Khi baïn click Button BtnLaømVieäc program seõ hieån thò message ñeå chöùng minh raèng töø moät Application ta coù theå handle event trong Class cuûa moät Project khaùc. (xem ví duï 3.4)

Ghi chuù :

Baïn duøng chöõ Vieät Unicode trong program thì nhôù set up Advanced Save Option vôùi Menu command File nhö trong hình döôùi ñaây:

Page 73: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

70

Khi Dialog hieän ra, baïn choïn Unicode (UTF-8) cho Encoding:

Neáu baïn queân set up Advanced Save Option nhö treân, chöõ Vieät seõ bò löu tröõ döôùi daïng ANSI neân moät soá seõ maát daáu chöõ Vieät vaø thay vaøo ñoù baèng nhöõng daáu ?.

3.3.12.2. Shared Events

Events coù theå ñöôïc declared laø Shared. Shared methods chæ coù theå raise shared events, chuùng khoâng theå raise non-shared events. Thí duï nhö:

Public Class NguoànEvent Shared Event EventDuøngChoSharedMethods() Public Shared Sub DuøngChung()

Page 74: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

71

RaiseEvent EventDuøngChoSharedMethods() End Sub End Class

Moät shared event coù theå ñöôïc raised bôûi caû shared methods laãn non-shared methods:

Public Class NguoànEvent Public Event TheEvent() Shared Event EventDuøngChoSharedMethods() Public Shared Sub DuøngChung() RaiseEvent EventDuøngChoSharedMethods() End Sub Public Sub LaømVieäc() RaiseEvent TheEvent() RaiseEvent EventDuøngChoSharedMethods() End Sub End Class

Neáu baïn tìm caùch raise moät non-shared event töø moät shared method thì seõ bò syntax error.

3.3.13. Early Binding hay Late Binding (Hieäu löïc Sôùm hay Treå) Early Binding coù nghóa laø program bieát roõ ngay töø ñaàu loaïi Object (thuoäc

Class naøo) seõ ñöôïc duøng trong hoaøn caûnh naøo. Noù cho pheùp IntelliSense hieån thò cho ta thaáy nhöõng class members naøo ta coù theå duøng vaø compiler kieåm xem nhöõng methods ta duøng coù hieän höõu khoâng. Early Binding code ñöôïc compiled ra IL raát hieäu naêng vì compiler bieát roõ raøng data types cuûa caùc parameters.

Ngöôïc laïi Late Binding coù nghóa laø ta laøm vieäc caùch linh ñoäng vôùi moät Object luùc run-time, töùc laø program khoâng bieát tröôùc Object aáy thuoäc loaïi naøo. Late Binding cho ta söï uyeån chuyeån chæ laøm sao Object cung caáp ñuùng method caàn thieát laø ñuû. Do ñoù, ta khoâng höôûng ñöôïc söï sang troïng IntelliSense cung caáp vaø compiler khoâng theå kieåm soaùt loaïi Object tröôùc duøm cho ta ñöôïc. Maëc daàu Late Binding code chaïy chaäm hôn nhöng noù cho ta söï töï do gioáng nhö khi laøm vieäc ngoaøi ñôøi, ñeå ñeán giôø choùt môùi xaùc nhaän.

By Default, moïi objects trong VB.NET ñeàu laø Late Bound. Visual Studio.NET IDE vôùi Option Strict Off by default aùp ñaët luaät ñoù. Neáu muoán aùp ñaët Early Binding ta caàn phaûi nheùt caâu Option Strict On ôû ñaàu moät source file.

Page 75: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

72

3.3.13.1. Duøng Object Type Ta coù Late Binding khi compiler khoâng theå xaùc ñònh loaïi Object ta ñang

goïi. Ta coù theå thöïc hieän ñieàu naày baèng caùch duøng Object Type ñeå tuyeân boá moät caùch mô hoà raèng ta seõ duøng moät loaïi Object naøo ñoù, vì moät variable vôùi Object type coù theå hold-reference-to baát cöù moät Object naøo. Do ñoù, nhöõng doøng code sau ñaây coù theå ñöôïc duøng cho baát cöù Object naøo maø Class cuûa noù coù implement Sub CoângTaùcToâi vaø khoâng duøng parameter naøo caû:

Option Strict Off Module LateBind Public Sub LaømVieäc( ByVal obj As Object) obj.CoângTaùcToâi() End Sub End Module

Neáu obj passed vaøo Sub LaømVieäc khoâng coù moät Sub CoângTaùcToâi chaúng duøng parameter naøo heát thì program seõ bò error luùc run-time. Do ñoù, ta neân luoân luoân duøng moät Try Structure ñeå baét caùi error ñoù. Thí duï nhö:

Option Strict Off Module LateBind Public Sub LaømVieäc( ByVal obj As Object) Try obj.CoângTaùcToâi() Catch e As Exception ' Code ñeå xöû lyù tröôøng hôïp Object khoâng thích hôïp Console.WriteLine("Invalid Object passed to

LaømVieäc") End Try End Sub End Module

3.3.13.2. Late Binding vaø Reflection .NET framework hoå trôï moät yù nieäm goïi laø reflection. Noù noùi ñeán khaû

naêng cuûa program kieåm tra .NET code ñeå bieát trong code coù nhöõng thöù gì. Ta duøng namespace System.Reflection ñeå vieát code laøm chuyeän aáy.

Vôùi System.Reflection ta coù theå vieát code ñeå khaùm phaù nhöõng classes naèm trong moät assembly, ñeå bieát moãi class coù nhöõng methods, properties vaø events naøo. Tieáp theo ñoù, ta coù theå duøng reflection ñeå instantiate vaø

Page 76: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

73

duøng nhöõng objects töø caùc classes aáy. Caû quaù trình naày hoaøn toaøn linh ñoäng - gioáng heät nhö Late Binding.

Thaät ra, CLR (Common Language Runtime) duøng reflection ñeå implement Late Binding duøm cho chuùng ta. Thay vì baét chuùng ta phaûi töï duøng reflection ñeå code Late Binding, .NET ñaõ töû teá lo laéng chuyeän aáy moät caùch töï ñoäng cho chuùng ta. 3.3.13.3. Duøng Function CType

Daàu ta coù duøng Late Binding hay khoâng, nhieàu khi raát tieän ñeå ta pass reference ñeán moät object naøo ñoù, töø choã naày ñeán choã khaùc, baèng caùch duøng Data Type Object toång quaùt - khi naøo caàn duøng noù thì ta ñoåi noù ra ñuùng loaïi Object trong hoaøn caûnh. Ta thöïc hieän vieäc convert data type baèng caùch duøng Function CType, ñieàu ñoù cho pheùp ta noùi tröôùc Data Type Object seõ ñöôïc converted ra object cuûa class naøo ñeå goïi moät method theo caùch Early Bound:

Module LateBind Public Sub LaømVieäc( ByVal obj As Object) CType(obj, TheClass).CoângTaùcToâi() End Sub End Module

Trong thí duï treân duø raèng ta ñang laøm vieäc vôùi variable thuoäc type Object - treân nguyeân taéc thì coù veõ laø Late Bound - nhöng chuùng ta ñang duøng Function CType ñeå convert obj ra moät object thuoäc class TheClass.

Kyõ thuaät naày ñöôïc goïi laø casting (ñoå khuoân). Neáu ta xem TheClass nhö moät caùi khuoân, khi ta eùp obj vaøo khuoân aáy thì gioáng nhö ñoå khuoân ñeå cho obj coù daïng cuûa TheClass.

Function CType raát höõu duïng khi ta laøm vieäc vôùi nhöõng objects coù implement nhieàu interfaces, vì ta coù theå duøng cuøng moät object cho nhöõng interfaces khaùc nhau. Giaû duï nhö ta coù moät object thuoäc loaïi TheClass vaø noù cuõng coù implement moät interface teân MyInterface, ta coù theå duøng interface aáy trong code sau ñaây:

Dim obj As TheClass obj = New TheClass CType(obj, MyInterface).DoSomething()

Theo caùch treân ta coù theå goïi methods theo caùch Early Bound trong nhieàu interfaces cuûa moät object maø khoâng caàn phaûi declare moät variable môùi.

Page 77: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

74

3.3.14. Thöøa keá töø moät ngoân ngöõ khaùc VB.NET code ñöôïc compile ra IL (Intermediate Language) managed code,

töùc laø code seõ ñöôïc CLR (Common Language Runtime) chaïy trong .NET Framework. Moïi managed code, khoâng caàn bieát ñöôïc compiled töø ngoân ngöõ naøo ñeàu coù theå laøm vieäc chung nhau, töùc laø ta coù theå taïo moät class trong ngoân ngöõ naày vaø duøng noù trong moät ngoân ngöõ khaùc, keå caû vieäc thöøa keá. Thaät ra haàu nhö ta luoân luoân laøm vieäc aáy khi vieát VB.NET. Ñoù laø vì phaàn lôùn .NET system library ñöôïc vieát baèng C#, nhöng ta duøng hay thöøa keá töø noù thöôøng xuyeân trong VB.NET

3.3.14.1. Taïo moät VB.NET BaseClass Trong thí duï veà thöøa keá töø moät ngoân ngöõ khaùc, tröôùc heát ta thöû taïo moät

Class Library Project trong VB.NET teân vblib vaø theâm vaøo ñoù moät class ñôn giaûn teân Parent gioáng nhö sau:

(xem ví duï 3.5) Public Class Parent Public Sub SayHello() MsgBox("Hello from Parent Class",MsgBoxStyle.Information, "Parent Class in VB.NET") End Sub End Class

Ta seõ duøng Parent laøm BaseClass ñeå thöøa keá thaønh moät SubClass trong C#. 3.3.14.2. Taïo moät C# SubClass Duøng File | Add Project ñeå theâm moät C# Class Library project môùi vaø ñaët teân noù laø cslib. Reference vblib baèng caùch duøng Menu command Project | Add Reference... vaø choïn Tab Projects, click Browse ñeå tìm vblib.dll trong vblib\bin subfolder. Löu yù laø ta vöøa môùi reference vblib.dll, caùi assembly cuûa Class Parent, chôù ta khoâng ñuïng ñeán hay caàn VB.NET source code cuûa Class Parent. Trong C#, ta seõ thöøa keá Class Parent qua reference BaseClass trong vblib.dll assembly. Baây giôø code C# nhö sau: (xem ví duï 3.5)

namespace cslib { using System.Windows.Forms; using vblib;

Page 78: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

75

public class cSharpclass : Parent { public cSharpclass() { MessageBox.Show("Instantiating cSharpclass object,inheriting VB.NET Parent class", "CSharp Class"); } } }

Code C# beân treân coù nhieàu ñieåm töông ñoàng vôùi VB.NET. Tuy nhieân vì C# ñeán töø ngoân ngöõ laäp trình C vaø C++ neân noù coù syntax hôi khaùc moät chuùt:

• Moïi statement trong C# phaûi chaám döùt baèng daáu ; ñeå ñaùnh daáu cuoái haøng • Caëp daáu ngoaëc cong queo { .. } ñöôïc duøng ñeå ñaùnh daáu ñaàu vaø cuoái cuûa

moät Statement Block thay vì duøng End Sub. • Keyword using ñöôïc duøng thay vì keyword Imports trong VB.NET • C# thì case sensitive, töùc laø phaân bieät chöõ hoa, chöõ thöôøng - thí duï obj thì

khaùc vôùi Obj. • Constructor method mang cuøng teân vôùi class thay vì teân New nhö trong

VB.NET. Ta haõy thöû ñi qua caùc doøng code. Caâu thöù nhaát ñònh nghóa namespace cho source file. Trong C#, moïi namespace phaûi ñöôïc tuyeân boá roõ raøng (explicitly declared) trong moãi code module.

namespace cslib Keá ñoù laø hai caâu tuyeân boá ta nhaäp khaåu System.Windows.Forms vaø vblib:

using System.Windows.Forms; using vblib;

Caâu keá ñoù tuyeân boá cSharpclass thöøa keá töø class Parent, ñeå yù caùch duøng daáu : thay vì keyword Inherits:

public class cSharpclass : Parent Sau cuøng laø Constructor duøng chính teân cuûa class:

public cSharpclass() { MessageBox.Show("Instantiating cSharpclass object,inheriting VB.NET Parent class", "CSharp Class"); }

Ñeå yù caùch duøng MessageBox.Show gioáng heät nhö trong VB.NET ñeå hieån thò moät message.

Page 79: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

76

3.3.14.3. Taïo moät program Client Duøng menu command File | Add Project ñeå theâm moät VB.NET Windows Application project môùi cho solution. Trong project môùi naày ta duøng menu command Project | Add Reference... ñeå theâm references cho cslib vaø vblib. Right-click leân project trong Solution Explorer vaø choïn noù laøm Set As Startup Project ñeå project naày chaïy khi ta baám F5.

Baây giôø ñaët moät Button teân BtnStartDemo leân Form vaø vieát code döôùi ñaây ñeå xöû lyù Event Click:

Private Sub BtnStartDemo_Click( ByVal sender AsSystem.Object, _ ByVal e As System.EventArgs)Handles BtnStartDemo.Click Dim objCS As New cslib.cSharpclass() objCS.SayHello() End Sub

Khi ta chaïy program vaø click button StartDemo ta seõ thaáy moät dialog cho bieát Constructor cuûa cSharpclass ñang ñöôïc goïi ñeå instantiate object objCS: (xem ví duï 3.5)

Tieáp theo ñoù moät dialog thöù nhì hieån thò message töø Sub SayHello maø objCS thöøa keá töø BaseClass Parent:

Page 80: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

77

Page 81: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

78

Chöông 4

LAØM VIEÄC VÔÙI ÑOÁI TÖÔÏNG ÑOÀ HOÏA(GDI+)

Trong chöông naøy, chuùng ta tìm hieåu khaùi quaùt nhieàu khoâng gian teân lieân quan ñeán hình veõ, vaø xem xeùt tieán trình ñaùp öùng(vaø khôûi phaùt) cuûa caùc vieäc sôn veõ. Ngoaøi ra baïn coù theå phaùt trieån nhieàu caùch khaùc nhau ñeå coù ñöôïc moät ñoái töôïng Graphics. Sau khi hieåu roõ boá cuïc chung cuûa phong caûnh GDI+, phaàn coøn laïi chöông seõ ñeà caäp ñeán caùch ñieàu taùc [multipulate] caùc maøu, caùc phoâng chöõ, caùc hình daùng caùc hình, vaø caùc aûnh bitmap.

(Xem caùc ví duï trong chöông 4) 4.1. So saùnh giöõa ñoà hoaï cuûa VB.NET vaø VB 6.0

Baát chaáp söï vieäc Visual basic ñaõ luoân laø moät coâng cuï khaùc thöôøng ñeå xaây döïng caùc Giao dieän ngöôøi duøng ñoà hoaï[graphical user interfaces] ngoân ngöõ vaãn thieáu phaàn chuyeån ñaït ñoà hoaï naêng löïc cao.

Ñoái VB 6.0, ñöôïc cung caáp moät soá kieåu ñieàu khieån GUI haïn cheá (chaúng haïn nhö ñieàu khieån Shape) cuõng nhö moät vaøi haøm GDI khaù baát tieän. Ngoaøi ra, caùc phieân baûn tröôùc ñaây cuûa VB ñaõ chuû yeáu vaän duïng moät cheá ñoä ñoà hoaï coù teân �twip� trong khi ñoù haàu heát caùc ngoân ngöõ khaùc treân theá giôùi laïi chuyeån ñaït caùc hình aûnh baèng daïng thöùc �pixel�chung hôn. Noùi chung, neáu caàn thöïc baát kyø kieåu taùc duïng chuyeån ñaït cao caáp vaøo trong VB, baïn phaûi ra ngoaøi ngoân ngöõ ñeå ñieàu taùc (töông taùc vôùi API).

Ñoái VB.NET, baây giôø baïn coù theå xaây döïng caùc öùng duïng cöïc kyø maïnh laáy hình veõ laøm troïng taâm. Thöïc teá caùc laäp trình vieân coù khaû naêng taïo caùc öùng duïng ñoà hoaï khoâng thua keùp gì caùc ñeà aùn ñöôïc xaây döïng baèng C++. VB.NET vaän duïng moät soá khoâng gian teân .NET ñeå cung caáp caùc dòch vuï chuyeån ñaït theo laäp trình. Söï thaät cuûa vaán ñeà ñoù laø khoâng coøn leäch chuyeån ñaït (hoaëc caùc ñieàu khieån) VB 6.0 cuõ quen thuoäc naøo coøn soáng trong theá giôùi cuûa .NET. Thay vaøo ñoù laø coâng ngheä môùi coù teân GDI+ ñöôïc taát caû caùc ngoân ngöõ nhaém vaøo .NET söû duïng. Muïc tieâu cuûa chöông naøy giôùi thieäu veà söï phong phuù cuûa GDI+, neân bieát raèng ñaây laø moät lónh vöïc maø VB 6.0 vaø VB.NET khaùc nhau roõ raät. 4.2. Khaûo saùt Khoâng gian Ñoà hoïa GDI+

.NET Framework cung caáp moät soá khoâng gian teân chuyeân daønh ñeå chuyeån ñaït ñoà hoaï hai chieàu. Ngoaøi nhöõng chöùc naêng mong ñôïi tìm thaáy moät goùi ñoà hoaï(ví duï maøu, phoâng chöõ, buùt , coï,ñieàu taùc aûnh�.). Noùi chung Khoâng gian teân naøy taïo thaønh ñaëc cuï .NET coù teân GDI+

Caùc khoâng gian teân GDI+ Khoâng gian GDI+ Moâ taû

Page 82: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

79

System.Drawing Ñaây laø khoâng gian teân GDI+ loõi, ñònh nghóa nhieàu kieåu ñeå chuyeån ñaït cô baûn (phoâng chöõ , caùc buùt coï sôn cô baûn,�) cuõng nhö kieåu Graphics cöïc maïnh

System.Drawing.Drawing2D Khoâng gian naøy cung caáp caùc kieåu duøng cho coâng naêng ñoà hoaï hai chieàu cao caáp hôn(ví duï nhö caùc coï sôn gradient vaø caùc bieán theà hình hoïc)

System.Drawing.imaging Khoâng gian naøy ñònh nghóa caùc kieåu cho pheùp baïn tröïc tieáp ñieàu taùc caùc aûnh ñoà hoaï( ví duï thay ñoåi baûng palete cuûa aûnh, trích döõ lieäu meta aûnh, vaø ñieàu taùc caùc taäp tin).

System.Drawing.Print Khoâng gian naøy ñònh nghóa caùc kieåu cho pheùp baïn chuyeån daït caùc aûnh thaønh trang in, töông taùc vôùi chính maùy in vaø ñònh daïng daùng veû cuûa moät cuûa moät khoái in ñaõ cho.

System.Drawing.Text Khoâng gian naøy cho pheùp baïn ñieàu taùc caùc söu taäp phoâng chöõ.

4.3. Khaùi quaùt veà Khoâng gian teân System.Drawing

Haàu heát caùc kieåu ñöôïc duøng khi laäp trình caùc öùng duïng GDI+ ñeàu coù trong khoâng gian teân System.Drawing. Nhö vaäy, ta coù lôùp bieåu thò caùc aûnh, caùc sôn coï, caùc buùt veõ, vaø caùc phoâng chöõ. Hôn nöõa, System.Drawing coøn ñònh nghóa moät soá kieåu höõa quan khaùc chaúng haïn nhö : Color, Point, vaø Ractange. Baûng sau lieät keâ moät soá kieåu loõi cuûa System.Drawing(xem ví duï 4.2)

Baûng caùc thaønh vieân coát loõi cuûa khoâng gian System.Drawing Kieåu System.Drawing Moâ taû

Bitmap Goùi rieâng moät aûnh ñaõ cho vaø ñònh nghóa moät soá phöông phaùp ñeå ñieàu taùc döõ lieäu ñoà hoïa cô sôõ.

Brush, Brushes, SolidBrush, SystemBrushs, TextureBrush

- Caùc ñoái töông Brush ñöôïc duøng ñeå ñieàn caùc phaàn beân trong cuûa caùc hình daùng ñoà hoaï, chaúng haïn nhö caùc hình chöõ nhaät, caùc hình eâlip, vaø caùc ña giaùc.

- Caùc kieåu naøy bieåu thò moät soá bieán theå coï sôn, vôùi Brush vaän haønh nhö lôùp cô sôõ tröøu töôïng [abstract base class] cho caùc kieåu coøn laïi. Caùc kieåu Brush boå sung ñöôïc ñònh nghóa trong khoâng gian teân System.Drawing.Drawing2D.

Page 83: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

80

Color, SystemColors, ColorTranlator

- Kieåu Color coù theå ñònh nghóa moät soá tröôøng coù theå duøng ñeå caáu hình maøu caùc cuûa caùc phoâng chöõ, caùc coï sôn, caùc buùt veõ�

- Kieåu ColorTranlator cho pheùp baïn xaây döïng moät kieåu Color .NET môùi töø caùc phaàn bieåu thò maøu khaùc( win 32 , Kieàu OLE-COLOR, caùc haèng maøu HTML,�)

Font , FontFamily - Kieåu Font goùi rieâng caùc ñaëc tính cuûa moät

phoâng chöõ ñaõ cho (töùc laø teân kieåu, ñaäm, nghieâng, co chöõ,�)

- FontFamily cung caáp khaû naêng tröø töôïng cho moät nhoùm caùc phoâng chöõ coù moät thieát keá chung töông töï nhöng coù moät soá bieán theå nhaát ñònh veà kieåu daùng.

Graphics Lôùp loõi naøy bieåu thò moät beà maët veõ hôïp leä, cuõng nhö

moät soá phöông phaùp ñeå chuyeån ñaït caùc vaên baûn, caùc aûnh, vaø caùc khuoân maãu hình hoïc [geometric patterns]. Haõy xem kieåu naøy laø daïng töông ñöông vôùi Win32 HDC cuûa .NET

Icon, SystemIcon Lôùp naøy bieåu thò caùc bieåu töôïng tuyø bieán [custom icons], cuõng nhö loaït caùc bieåu töôïng chuaån do heä thoáng cung caáp.

Image, ImageAnimator - Image laø lôùp cô sôõ tröøu tröôïng cung caáp coâng naêng cho caùc kieåu nhö Bitmap, Icon, vaø Cursor

- ImageAnimator cung caáp moät caùch ñeå laëp laïi qua moät soá kieåu phaùi sinh töø Image theo quaûng thôøi gian ñaõ chæ ñònh.

Pen, Pens, SystemPens Pen laø ñoái töôïng ñeå veõ caùc ñöôøng keõ vaø caùc ñöôøng cong[curves]. Kieåu Pens ñònh nghóa moät soá tính chaát duøng chung traû veà moät Pen môùi theo moät maøu ñaõ cho.

Point PointF Caùc caáu truùc naøy bieåu thò moät toaï ñoä (x,y) aùnh xaï moät soá nguyeân hoaëc float (daáu chaám ñoäng ) cô sô.õ

Ractangle RactangleF Caáu truùc naøy bieåu thò moät chieàu kích chöõ nhaät (moät laàn nöõa aùnh xaï theo soá nguyeân hay float cô sôõ).

Size SizeF Caùc caáu truùc naøy bieåu thò moät chieàu cao / roäng ñaõ

Page 84: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

81

cho(moät laàn nöõa aùnh xaï theo moät soá nguyeân hay float cô sôõ).

StringFormat Kieåu naøy ñöôïc duøng ñeå goùi rieâng nhieàu tính naêng khaùc nhau cuûa boá cuïc vaên baûn (töùc: caùch caêng thaúng haøng, khoaûng caùch doøng,..vv).

Region Moâ taû beân trong moät hình aûnh hình hoïc goàm coù caùc hình chöõ nhaät vaø caùc loä caïnh [paths]

Nhieàu kieåu coát loõi naøy vaän duïng moät soá tính chaát ñaëc tröng (ñieåm danh) höõu

quan., haàu heát noù ñöôïc ñònh nghóa beân trong khoâng gian System.Drawing. Nhieàu kieåu ñaëc tröng (ñieåm danh )naøy ñöôïc duøng ñeå caáu hình daùng veõ vaø caûm nhaän cuûa caùc coï sôn vaø caùc buùt veõ.

Baûng caùc kieåu ñaëc tröng (ñieåm danh) trong khoâng gian System.drawing Kieåu ñaëc tröng (ñieåm

danh) cuûa System.Drawing

Moâ taû

ContentAlignment Chæ ñònh caùch caêng thaúng haøng noäi dung theo moät beà maët veõ[drawing surface] (giöõa , traùi, phaûi,vv..)

FontStyle Chæ ñònh thoâng tin kieåu daùng aùp duïng cho vaên baûn nhö in ñaäm , nghieâng v.v�

GraphicsUnit Chæ ñònh ñôn vò ño cuûa muïc ñaõ cho (gioáng nhö caùc haèng cheá ñoä aùnh xaï Win32)

KnownColor Chæ ñònh caùc teân thaân thieän cho caùc maøu heä thoáng ñaõ bieát.

StringAlignment Chæ ñònh caùch caêng thaúng haøng cuûa moät chuoãi vaên baûn töông ñoái vôùi hình chöû nhaät boá cuïc cuûa noù.

StringFormatFlags Chæ ñònh thoâng tin boá cuïc vaø hieån thò cho caùc chuoãi vaên baûn (ví duï : Nwap, LineLimit )

Stringtrimming Chæ ñònh caùch tæa caùc kyù töï ra khoûi moät chuoãi khoâng vöøa loït trong moät hình daùng boá cuïc.

String Unit Chæ ñònh caùc ñôn vò ño cuûa moät chuoãi vaên baûn. 4.4. Xaây döïng moät khoâng gian laøm vieäc vôùi GDI+

Khi muoán vaän duïng GDI+ baïn phaûi aán ñònh tham chieáu ñeán System.Drawing.dll. taäp tin naøy chöùa caùc kieåu cuûa moät khoâng gian teân GDI+ coát loõi. Neân bieát raèng neáu löïa moät khoâng gian ñeà aùn öùng duïng Windows môùi baèng VB.NET, tham chieáu naøy töï ñoäng aán ñònh nhaân danh baïn. Sau khi aán ñònh tham chieáu naøy, baïn chæ vaãn duïng töø khoaù �Imports� cuûa VB.NET vaø coi nhö ñaõ saún

Page 85: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

82

saøng ñeå chuyeån ñaït. Ñeå xaây döïng moät öùng GDI+ ta haõy xem xeùt caùc tieän ích [utility type] maø khoâng gian teân System.Drawing ñònh nghóa.

4.4.1 Caùc kieåu tieän ích cuûa Sytem.Drawing Nhieàu phöông phaùp veõ maø ñoái töôïng graphics ñònh nghóa yeâu caàu baïn chæ

ñònh vò trí hoaëc vuøng nôi baïn chuyeån ñaït moät muïc baïn ñaõ cho. Ví duï : duøng phöông phaùp DrawingString() yeâu caàu baïn chæ ñònh vò trí ñeå chuyeån ñaït chuoãi vaên baûn treân kieåu phaùt sinh töø control. Vì raèng DrawString() ñaõ ñöôïc quaù taûi moät soá laàn , tham soá vò trí naøy coù theå ñöôïc chæ ñònh baèng moät toaï ñoä hoaëc vò trí cuûa moät �hoäp� ñeå veõ trong ñoù. Caùc phöông phaùp kieåu GDI+ khaùc coù theå yeâu caàu baïn chæ ñònh chieàu roäng vaø chieàu cao cuûa moät muïc ñaõ cho hoaëc caùc bieân noäi boä trong moät aûnh hình hoïc.

Ñeå chæ ñònh thoâng tin nhö vaäy, khoâng gian teân System.Drawing ñònh nghóa caù kieåu Point, Rectange, Region, vaø Size. Hieån nhieân, moät Point bieåu hieän moät toïa ñoä (x ; y). caùc kieåu Rectangle choát giöõ moät caëp ñieåm bieåu thò caùc bieân beân traùi vaø döôùi phaûi cuûa vuøng chöõ nhaät. Caùc kieåu size töông töï Rectangle � tuy nhieân, caùc caáu truùc naøy bieåu thò moät chieàu kích ñaõ cho duøng moät chieàu cao vaø chieàu roäng ñaõ cho. Caùc Region cung caáp moät caùch ñeå bieåu thò vaø ñieàu taùc beà maët veõ phi chöõ nhaät [nonrectangular].

Caùc bieán thaønh vieân maø caùc kieåu Point, Rectangle, vaø Size söû duïng ñeàu ñöôïc bieåu thò noäi boä döôùi daïng caùc kieåu döõ lieäu soá nguyeân. Tuy nhieân, neáu caàn chi tieát hôn, baïn coù toaøn quyeàn vaän duïng caùc kieåu PointF, rectangleF, vaø SizeF töông öùng, maø ( nhö baïn coù theå ñoaùn ) seõ aùnh xaï theo moät daáu chaám ñoäng ( hay daáu phaåy ñoäng = floating point number_ND ) cô sôû ( bieåu thò döôùi daïng moät kieåu döõ lieäu Single VB.NET ). Baát chaáp phaàn bieåu thò döõ lieäu cô sôû, moãi kieåu coù moät loaït caùc thaønh vieân gioáng nhau. Döôùi ñaây neâu khaùi quaùt.

4.4.1.1 Kieåu Point(F) Kieåu tieän ích ñaàu tieân caàn löu yù ñoù laø System.Drawing.Point(F). baûng

coù neâu khaùi quaùt vaøi thaønh vieân loõi. Baûng caùc thaønh vieân kieåu Point(F)

THAØNH VIEÂN POINT VAØ POINTF

YÙ NGHÓA

X Y Phöông phaùp naøy phieân dòch moät kieåu Point ñaõ

cho theo moät kích thöôùc ñaõ cho. IsEmpty Tính chaát naøy traû veà True neáu X vaø Y ñöôïc aán

ñònh laø 0. Offset() Caùc tính chaát naøy cho pheùp baïn tìm vaø aán ñònh

caùc giaù trò (x , y) cô sôû. Baûng : Caùc thaønh vieân cuûa kieåu point

Page 86: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

83

4.4.1.2 Kieåu Rectangle(F) Gioáng nhö Point, caùc Rectangle cuõng höõu ích trong moïi öùng duïng (goác

GUI hoaëc caùc daïng khaùc ). Baûng lieät keâ caùc thaønh vieân loõi caàn löu yù. THAØNH VIEÂN RECTANGLE

VAØ RECTANGLEF

YÙ NGHÓA

Inflate() Intersect() Union()

Caùc phöông phaùp chung naøy cho pheùp baïn môû roäng moät hình chöõ nhaät, cuõng nhö taïo caùc hình chöõ nhaät môùi laø keát quaû cuûa moät pheùp giao hoaùn [intersection] hoaëc hoäi [union].

Top Left Bottom Right

Caùc tính chaát naøy aán ñònh caùc chieàu kích cuû moät kieåu Rectangle môùi.

Height Width

Caáu hình chieàu cao vaø chieàu roäng cuûa moät rectangle ñaõ cho.

X Y

Caùc tính chaát naøy traû veà toaï ñoä x hoaëc y cuûa goùc beân traùi Rectangle

Contains()

Coù theå duøng phöông phaùp naøy ñeå xaùc ñònh theâm moät Point (hoaëc Rectangle) ñaõ cho coù naèm trong caùc bieân cuûa Rectangle hieän haønh hay khoâng. Tuyeät vôøi ñeå kieåm tra ñuïng [hit testing] moät ñieåm beân trong hình chöõ nhaät

Baûng : Baûng caùc thaønh vieân cuûa kieåu Ractangle Trong đó phương pháp hữu ích nhất của Ractangle đó là Contains().

Phương pháp này cho phép bạn xác định xem một Point hoặc Ractangle đã cho có nằm trong các biên hiện hành của một đối tượng Ractangle khác hay không. 4.4.1.3 Kieåu Size(F) vaø Region

Laø kieåu khaù ñôn giaûn ñeå ñieàu taùc. Ngoaøi caùc thaønh vieân ñöôïc thöøa keá, caùc kieåu naøy ñònh nghóa caùc tieåu thaønh vieân ví duï nhö Hight , Width�. 4.4.1.4 Lôùp Region

Kieåu naøy bieåu thò beân trong cuûa moät hình daùng hình hoïc [geomatric shape]. Ví duïbaïn taïo moät hình chöõ nhaät 100x100 pixel. Neáu muoán naém quyeàn truy caäp vuøng beân trong hình chöõ nhaät baïn coù theå vieát nhö sau: � get the interior of this Ractangle

Page 87: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

84

Dim r as ractangle = New Ractangle(0,0, 100,100) Dim rgn as Regon = New Region (r)

Sau khi coù caùc chieàu kích beân trong cuûa hình daùng ñaõ cho (bao goàm caùc hình hoïc phöùc taïp hôn). Baïn coù theå ñieàu taùc hình hoïc ñoù baèng moät soá tính chaát cuûa caùc thaønh vieân coát loõi cuõa lôùp Region (xem baûng sau ñaây:)

Thaønh vieân

Rigion YÙ nghóa

Complement() Caáp nhaät phaàøn rigion naøy theo phaàn ñoái töông ñoà hoaï ñaõ chæ ñònh khoâng giao hoaùn vôùi Region naøy.

Exclude() Caäp nhaät Region naøy theo phaàn beân trong cuûa noù khoâng giao hoaùn vôùi ñoái töôïng ñoà hoaï ñaõ chæ ñònh.

GetBounds() Traû veà RactangleF bieåu thò moät vuøng chöõ nhaät ñònh bieân Region naøy.

Intersect() Ñöôïc quaù taûi. caäp region naøy theo phaàn giao hoaùn cuûa chính noù vôùi ñoái töôïng ñoà hoaï ñaõ chæ ñònh.

IsEmpty() MakeEmpmty()

Kieåm tra xem Region naøy coù moät phaàn beân trong troáng [empty interior] treân beà maët veõ ñaõ chæ ñònh hay khoâng (hoaëc aán ñònh Region hieän haønh laø troáng).

IsInfinite() MakeInfinite()

Kieåm tra xem Region naøy coù moät phaàn beân trong voâ haïn treân beà maët veõ ñaõ chæ ñònh veõ hay khoâng (hoaëc aán ñònh region hieän haønh).

Transform() Bieán ñoåi Region naøy theo matrix ñaõ chæ ñònh. Translate() Ñònh vò toaï ñoä cuûa Region theo khoái löôïng ñaõ chæ

ñònh. Union() Caäp nhaät Region naøy theo phaàn hoäi cuûa chính noù vaø

ñoái töïông ñoà hoaï ñaõ chæ ñònh. Xor() Caäp nhaät region naøy theo phaàn hoäi tröø phaàn giao

hoaùn cuûa chính noù vôùi ñoái töôïng ñoà hoaï ñaõ chí ñònh. Baûng : Thaønh vieân cuûa lôùp Region

4.4.2 Trình ñieàu khieån Paint() Nhö ta ñaõ bieát, lôùp control ñònh nghóa moät phöông phaùp coù theå chaïy ñeø

[overriable method] teân laø OnPaint(). Khi moät form (hoaëc laø moät haäu dueä baát kyø cuûa lôùp control ) muoán chuyeån ñaït noäi dung ñoà hoaï, moät caùch tieáp caäp ñoù laø chaïy ñeø phöông phaùp naøy vaø trích moät ñoái töôïng �graphics� töø tham soá PaintEventArgs ñeán (taát nhieân laø duøng tính chaát graphics):

Public Class Form1

Page 88: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

85

Inherits System.Windows.Forms.Form Public Sub New() Mybase.New() � this call is required by the windows form designer InitializeComponent() CenterToScreen() Me.Text = �Basic paint form (Click on me)� End sub Protected Overridees Sub OnPaint (Byval e as System.Windows.Forms.PaintEventArgs) Dim g as Graphics = e.graphics � Rendeer a string directly into the form using a givent font and _ color. g.DrawString(�Hello GDI+ �, New font (�Times new Roman�, _ 20),New SolidBrush(color.Black),0,0) End sub End Class

' Chuyeån ñaït caùc ñoái töôïng GDI+ beân ngoaøi caùc tieåu trình Paint

Baïn coù theå chuyeån ñaït moät aûnh beân ngoaøi phaïm vi cuûa moät trình ñieàu quaûn söï kieän Paint chuaån. Ví duï, maëc nhaän baïn muoán veû moät voøng troøn nhoû taïi vò trí (x,y) maø baïn nhaép chuoät. Baïn phaûi laøm nhö sau : Böôùc ñaàu tieân laø coù moät ñoái töôïng Graphics hôïp leä maø baïn coù theå coù ñöôïc baèng phöông phaùp Graphics.FormHwnd() duøng chung. Löu yù baïn ñang chuyeån handle hieän haønh cuûa baïn laøm tham soá duy nhaát.

Private Class Form1 MouseDown (Byval sender as object , _ Byval e as System.Windows.Forms.MouseEventArgs) _ Handle Mybase.MouseDown � grad a new graphic Object Dim g as Graphics = e.graphics � Now draw 10 x10 circle at the mouse click g.drawEllipes(new Pen(color.Green),e.X,e.Y,10,10) End sub

Giôø ñaây , trong khi logic naøy chuyeån ñaït moät hình beân ngoaøi moät trình ñieàu quaûn söï kieän Onclick(), baïn phaûi bieát raèng neáu form ñöôïc thoâi pheâ chuaån [invalidated] (vaø nhö vaäy seõ ñöôïc veõ laïi) thì moãi hình troøn seõ ñöôïc

Page 89: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

86

xoaù. Ñieàu naøy coù yù nghóa laø tuyeán trình chuyeån ñaït naøy chæ xaûy ra trong ngöõ caûnh cuûa moät cuù phaùp nhaép chuoät.

Caùch tieáp caän toát hôn ñoù laø ñeå Logic MouseUp boå sung moät Point môùi vaøo moät boä söu taäp noäi boä (chaúng haïn nhö : ArrayList) goàm caùc Point, theo sau laø moät leänh goïi invalidate(). Phöông phaùp OnPaint() coù theå ñôn giaûn laëp laïi qua söu taäp vaø veõ töøng muïc.

Public Class Form1 Inherits System.Windows.Forms.Form � use to hold all the point Private myPsts as arrayList = new ArrayList() � Private sub Form1_MouseDown(Byval sender as Object, _ Byval e as System.Windows.Forms.MoucseDown) _ Handle Mybase.MouseDown � Grad a new Graphics Object � Dim g as graphics = Graphics.FromHwnd(Me.Handle) � Now draw 10 x10 circle at mouse click . �g.drawEllipes(new Pen(color.Green),e.X,e.Y,10,10) �add to point collection myPst.Add(New Point (e.X,e.Y)) End Sub Private Form1_Paint (Byval sender as Object, _ Byval e as System.Windows.Forms.MoucseDown) _ Handle Mybase.Paint Dim g as Graphics = e.graphics g.DrawString(�Hello GDI+ �, New font (�TimesnewRoman�_ , 20),New SolidBrush(color.Black),0,0) New SolidBrush((color.Back),0,0) � Draw each point in the ArrayList dim p as Point For Each p in myPsts g.DrawEllipse(New Pen (color.Green),p.X,p.Y,10,10) next end sub End class

Page 90: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

87

4.4.3 Lôùp Graphics Naèm trong ñoái töôïng System.Drawing. Graphics , laø ngoû thoâng cuûa baïn vôùi

khaû naêng chuyeån ñaït GDI+. Lôùp naøy bieåu thò moät ngöõ caû thieát bò thích hôïp [valid device context] (ví duï , moät Win 32 HDC thoâ). Phöông phaùp naøy cho pheùp baïn chuyeån ñaït vaên baûn, caùc aûnh( caùc bieåu töôïng, caùc aûnh bitmap, vvv ), cuõng nhö nhieàu khuoân maãu hình hoïc khaùc.

Caùc thaønh vieân cuûa lôùp graphics Caùc thaønh vieân YÙNghóa

From Hdc() FromHwnd() FromImage()

Caùc phöông phaùp duøng chung naøy cung caáp moät caùch ñeå coù moät ñoái töôïng graphics hôïp leä töø moät aûnh ñaõ cho(ví duï : bieåu töôïng ,aûnh bitmap,� ) hoaëc tieåu cuï GUI

Clear() Ñieàn moät ñoái töôïng graphics baèng moät maøu ñaõ chæ ñònh, xoaù beà maët veõ hieän hình trong tieán trình.

DrawArc() DrawBezier() DrawBeziers() DrawCurve() DrawEllipse() DrawIcon() DrawLine() DrawLines() DrawPie() DrawPath() DrawRactangle() DrawRactangles() DrawString()

Caùc phöông phaùp naøy ( trong soá nhöõng phöông phaùp khaùc ) ñöôïc duøng ñeå chuyeån ñaït hình aûnh hoaëc khuoân maãu hình hoïc ñaõ cho.

FillEllipse() FillPath() FillPie() FillPolygon() FillRactangle()

Caùc phöông phaùp naøy (trong soá nhöõng phöông phaùp khaùc ) ñöôïc duøng ñeå ñieàn phaàn beân trong [interior] cuûa moät hình daùnh hình hoïc ñaõ cho.

MeasureString() Traû veà moät caáu truùc Size bieåu thò caùc bieân cuûa moät khoái vaên baûn ñaõ cho.

Song song vôùi vieäc cung caáp moät soá phöông phaùp chuyeån ñaït, lôùp graphics coøn ñònh nghóa caùc thaønh phaàn boå sung goùi rieâng caùc chi tieát veà daùng veû rieâng vaø caûm nhaän cuûa taùc vuï chuyeån ñaït hieän haønh. Vaø xem baûng sau (caùc tính chaát höõu duïng cuûa lôùp graphics).

Page 91: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

88

Tính chaát Graphics YÙ nghóa Clip ClipBounds VisibleClipBounds IsClipEmpty IsVisibleClipEmpty

Caùc tính chaát naøy cho pheùp baïn aán ñònh caùc tuyø choïn caét [ clipping options] ñöôïc duøng vôùi ñoái töôïng Graphics hieän haønh

Transform Cho pheùp baïn bieán ñoåi toaï ñoä PageUnit PageScale DpiX DpiY

Caùc tính chaát naøy cho pheùp baïn caáu hình ñieåm goác [point of origin] cho caùc taùc vuï chuyeån ñaït cuûa baïn cuõng nhö caáu hình ñôn vò ño

SmoothingMode PixelOffsetMode TextRenderingHint

Caùc tính chaát naøy cho pheùp baïn caáu hình söï baèng phaúng cuûa caùc ñoái töïông hình hoïc vaø vaên baûn. Chuùng ñöôïc aán ñònh baèng caùc kieåu ñieåm danh töông öùng ñöôïc ñònh nghóa trong caùc khoâng gian teân System.Drawing vaø System.Drawing.Drawing2D

CompositingMode CompositingQuality

Tính chaát CompositingMode xaùc ñònh hình veõ seõ ñöôïc ghi ñeø neàn hay hay hoaø xen vôùi neàn. Giaù trò ñöôïc aán ñònh baèng kieåu ñieåm danh CompositingMode töông öùng ñöôïc ñònh nghóa trong caùc khoâng gian teân System.Drawing.Drawing2D Tính chaát CompositingQuality chæ ñònh ñoä phöùc taïp cuûa tieán trình hoaø xen [blending process]. Noù vaän duïng kieåu ñòeåm danh CompositingQuality cuõng naèm trong heä thoáng System.Drawing.Drawing2D

InterpolationMode Chæ ñònh caùch xen döõ lieäu vaøo giöõa caùc ñieåm cuoái duøng moät kieåu ñieåm danh huöõ quan.

4.5. Tìm hieåu veà maøu (color)

Lôùp Graphics yeâu caàu baïn chæ ñònh maøu seõ ñöôïc duøng trong khi veõ. Caáu truùc Color bieåu thò moät haèng maøu ARGB(alpha � red � green - blue). Haàu heát caùc kieåu color coù ñöôïc thoâng qua moät soá tính chaát chung, traû veà moät kieåu color môùi

Caùc thaønh vieân cuûa kieåu Color Thaønh Vieân

Color YÙ nghóa

FromArbg() Traû veà moät ñoái töôïng color môùi döïa vaøo caùc trò soá Red, Green, Blue

From Traû veà moät ñoái töôïng color môùi döïa vaøo moät teân chuoãi

Page 92: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

89

KnownColor() (ví duï �Red�) A,R,G,B Caùc tính chaát traû veà giaù trò ñöôïc gaùn cho khía caïnh

alpha, red , green, blue IsNamedColor() Name

Coù theå aùp duïng cho caùc thaønh vieân naøy cho moät ñoái töôïng coù kieåu color ñeå xaùc ñònh xem caùc giaù trò ARGB hieän haønh coù coù moät teân ñònh saün (ví duï �Red�) hay khoâng, vaø neáu vaäy, ta coù theå tìm noù thoâng qua tính chaát Name

GetBrightness() GetHue() GetStaturation()

Caùc kieåu color GDI+ coù moät giaù trò Hue � Saturation � Brightness (HSB) keát hôïp. Caùc phöông phaùp truy tìm caùc phöông phaùp cuï theå.

TbArgb() ToknownColor()

Traû veà giaù trò ARGB cuûa kieåu Color hoaëc giaù trò kieåu ñieåm danh KnownColor döïa vaøo ñoái Color hôïp leä.

( Lôùp ColorDialog Khoâng gian teân System.Windows.Forms coøn cung caáp moät lôùp hoäp thoaïi

ñònh saün (ColorDialog) coù theå duøng ñeå nhaéc ngöôøi duøng veà söï löïa choïn maøu cuûa hoï. Trong hoäp thoaïi ñoù ta coù theå löïa choïn kieåu hieãn thò mau theo HSB hay RGB . Xem hình sau :

Xem ví duï 4.1

Hoäp thoaïi maøu

Page 93: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

90

Khi ñoù ta dung maøu

Ñeå theå hieän ta duøng ñoaïn leân sau

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e_ As System.EventArgs) Handles Button1.Click If (cldlg.ShowDialog() <> DialogResult.Cancel) Then Me.BackColor = cldlg.Color End If End Sub

4.6. Laøm vieäc vôùi Phoâng chöõ Khoâng gian teân System.Drawing cung caáp moät kieåu ñoù laø System.Dawing.Font bieåu thò moät phoâng chöõ ñaõ cho ñöôïc caøi ñaët treân maùy cuûa ngöôøi duøng.

Caùc kieåu cuûa font chöõ : Caùc kieåu cuûa Font Dieån giaûi

Bold Vaên baûn in ñaäm Italic Vaên baûn in nghieâng

Page 94: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

91

Regular Vaên baûn bình thöôøng Strickeut Vaên baûn coù moät vaïch ngang ôû döôùi Underline Vaên baûn coù gaïch döôùi ( Veà ñoä ño font chöõ: Taát caû chieàu kích cuûa font chöõ ñeàu döïa vaøo giaù trò

ñöôøng cô sôõ[base line] laø ñöôøng keû töôûng töôïng maø moãi kyù töï ñaët treân ñoù. ( Khoâng gian teân cuõng ñònh nghiaõ kieåu FontFamily tröøu töôïng hoaù moät nhoùm

caùc maët chöõ [typefaces] coù moät thieát keá cô baûn töông töï nhöng vôùi moät bieán theå kieåu daùn (ví duï : font size, chaúng haïn moät hoï caùc font chöõ, gioáng nhö Verdana , coù theå goâp vaøi phoâng chöõ khaùc bieät veà kieåu daùng vaø kích kôõ nhö Verdana co 12 in ñaäm, vaø Verdana co 12 in nghieâng.) vaø ta coù theå taïo moät ñoái font nhö sau: ' Make a family of font Dim myFamily As System.Drawing.FontFamily = _ New System.Drawing.FontFamily("Verdana") ' Pass a family into font Dim myFont As Font = New Font(myFamily, 12) e.Graphics.DrawStrign("Hello ?", myFont, Brushes.Blue,_ 10, 10)

( Lôùp FontDialog Ñeå taïo thuaän tieän cho ngöôøi duøng choïn font Lôùp Control cung caáp lôùp

ForntDialog . Xem ví duï 4.3 Hình:

4.7. Khoâng gian teân System.Drawing.Drawing2D

Trong khoâng gian System.Drawing.Drawing2D cuõng chaúng khaùc gì so vôùi khoâng gian System.Drawing, song chuùng ta caàn nhaän thöùc raèng nhieàu caáu hình buùt veõ(Pen) vaø coï sôn (Brush) �haáp daãn� hôn. Ví duï nhö sôn coï gradient.

Caùc lôùp cuûa System.Drawing.Srawing2D Caùc lôùp cuûa

System.Drawing.Drawing2D YÙ Nghóa

Page 95: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

92

AdjectableArrowCap CustomlineCape

Caùc muõi buùt ñöôïc duøng ñeå sôn veõ caùc ñieåm ñaàu vaø ñieåm cuoái cuûa moät ñöôøng thaúng ñaõ cho. Caùc kieåu naøy bieåu thò caùc muõi teân do ngöôøi duøng ñònh nghóa vaø coù hình muõi teân ñieàu chænh ñöôïc.

Blend ColorBlend

Duøng ñeå ñònh nghóa moät khuoân maãu (vaø caùc maøu hoaøn xen [blend] )ñöôïc duøng ñeå keát hôïp vôùi moät LinearGradientBrush.

GraphicsPath GraphicsPathIterator PathData

Moät ñoái töôïng GraphicsPath bieåu thò moät loaït caùc ñöôøng keû vaø ñöôøng cong lieân thoâng. Lôùp naøy cho baïn cheøn haàu heát moïi khuoân maãu hình hoïc (caùc cung ,caùc hình chöõ nhaät , caùc ñöôøng keû , caùc chuoãi , caùc ña giaùc ,v,v) vaøo maãu bieåu thò. PathData löu giöõ döõ lieäu ñoà hoaï taïo thaønh moät maåu bieåu thò.

HatchBrush LinearGradientBrush

Caùc kieåu coï sôn laï maét.

Ngoaøi ra khoâng gian teân System.Drawing.Drawing2D coøn boå sung moät loaït caùc phöông thöùc khaùc ñöôïc duøng ñeå keát hôïp vôùi nhau. Caùc phöông thöùc cuûa System.Drawing.Drawing2D

Caùc Phöông thöùc cuûa System.Drawing.Drawing2D

YÙ nghóa

DashStyle Chæ ñònh kieåu daùn cuûa ñöôøng gaïch caùch ñöôïc veõ baèng moät pen

FillMode Chæ ñònh caùc toâ phaàn beân trong cuûa moät loä trình kheùp kín.

HatchStyle Chæ ñònh caùc khuoân maãu khaùc nhau saün coù cho caùc ñoái töôïng HatchBrush

LinearGradientMode Chæ ñònh höôùng aùp duïng moät gradient tuyeán tính.

LineCap Chæ ñònh caùc kieåu daùng muõi hieän haønh ñöôïc duøng bôûi moät Pen

PenAlignment Chæ ñònh caùc caêng thaúng haøng cuûa moät pen töông quan vôùi ñöôøng keõ ñang veû.

PenType Chæ ñònh kieåu khuoân toâ maø moät pen söû duïng ñeå ñieàn caùc doøng.

QualityMode Chæ ñònh chaát löôïng chung duøng ñeå chuyeån

Page 96: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

93

SmoothingMode RenderingHint

ñaït moät aûnh ñoà hoaï.

4.8. Chuyeån ñaït caùc aûnh. Khoâng gian System.Drawing.Image ñònh nghóa moät soá caùc phöông phaùp vaø

tính chaát löu tröõ nhieàu thoâng tin khaùc nhau veà loaïi pixel cô sôõ cuûa noù bieåu thò ví duï nhö Width, Height� .

Ngoaøi ra System.Drawing.Image coøn ñònh nghóa moät loâ caùc kieåu taïo ñieàu kieän thuaän lôïi cho cho moät soá pheùp bieán ñoåi hình aûnh cao caáp.

Caùc thaønh vieân cuûa kieåu Image( Trong System.Drawing.image) Teân thaønh vieân Image YÙ nghóa

FormFile() Taïo moät aûnh töø moät taäp tin chæ ñònh FromHBitmap() Taïo moät Bitmap töø Window FromStream() Taïo moät aûnh töø luoàng döõ lieäu ñaõ chæ ñònh . Height Width Size PhysicalDemensions HorizontalResolution VirticalResolution

Caùc tính chaát traû veà thoâng tin lieân quan ñeán caùc chieàu kích côõ cuûa aûnh naøy.

Palete Traû veà moät kieåu döõ lieäu ColorPalete bieåu thò baûng choïn maøu cô sôõ duøng cho aûnh naøy.

GetBounds() Traû veà moät hình chöõ nhaät bieåu thò kích côõ hieän haønh cuûa aûnh.

Save() Löu moät aûnh ra taäp tin. • Lôùp PictureBox

Ñeå coù theå chuyeån moät aûnh bitmap leân form thieát keá tröïc ta duøng control ñoù laø PictureBox (xem ví duï 4.4:)

Page 97: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

94

Chöông 5

NHAÄP, XUAÁT vaø Namespace SYSTEM.IO

Trong cô caáu .NET, namespace System.IO laø vuøng cuûa caùc thö vieän lôùp cô sôõ chuyeân daønh cho dòch vuï nhaäp xuaát taäp tin (vaø boä nhôù). Gioáng nhö caùc namespace khaùc , namespace cung caáp nhieàu lôùp, kieåu ñònh danh, caáu truùc, �Vaø sau ñaây laø baûng caùc kieåu loõi cuûa System.IO

Kieåu loõi System.IO YÙ nghóa BinaryReader BinaryWrite

Cho pheùp baïn löu tröõ vaø truy xuaát caùc kieáu döõ lieäu nguyeân thuûy [primitive data types] (caùc soá nguyeân , chuoãi, �) döôùi daïng caùc giaù trò nhò phaân.

BufferedStream Cung caáp kho löu tröõ taïm thôøi cho moät luoàng byte coù theå ñöôïc chuyeån y ra kho löu tröõ veà sau.

Directory DirectoryInfo File FileInfo

Duøng ñeå ñieåu taùc caùc tính chaát cho thö muïc hoaëc taäp tin vaät lyù ñaõ cho cuõng nhö taïo caùc taäp tin môùi vaø môõ roäng caáu truùc thö muïc hieän haønh. Caùc kieåu Directory vaø Type chuû yeáu phoâ dieãn coâng naêng cuûa chuùng döôùi daïng duøng chung. Caùc kieåu DirectoryInfo vaø FileInfo phoâ dieãn töông töï moät minh duï ñoái töôïng hôïp leä.

FileStream Cho pheùp truy caäp taäp tin ngaãu nhieân (töùc caùc khaû naêng tìm kieám ) vôùi döõ lieäu ñöôïc bieåu thò döôùi daïng moät luoàng byte.

MemotyStream Cho pheùp truy caäp ngaãu nhieân döõ lieäu ngaãu nhieân ñöôïc phaân luoàng[Streamed Data] ñöôïc löu tröõ trong boä nhôù thay vì trong moät taäp tin vaät lyù.

Streamwriter StreamReader

Duøng ñeå löu tröõ vaø truy tìm thoâng tin vaên baûng vaøo (hoaëc töø) moät taäp tin. Caùc kieåu naøy khoâng hoã trôï khaû naêng truy caäp taäp tin ngaãu nhieân.

StringWriter StringReader

Gioáng nhö caùc kieåu StreamReader/StreamWriter, caùc lôùp naøy cuõng khoâng laøm vieäc vôùi thoâng tin vaên baûn . Tuy nhieân, kho löu tröõ cô sôõ laø moät vuøng ñeäm chuoãi[string Buffer] thay vìmoät taäp tin vaät lyù.

Xem caùc ví duï chöông 5 (caùc ví vuï goïp chng caùc noäi dung chöông 5) Baây giôø ta tìm hieåu moät vaøi kieåu loõi cuûa System.IO 5.1. Kieåu Directory(Info)

Lôùp naøy chöùa moät loaït caùc thaønh vieân ñöôïc duøng ñaå taïo, xoùa, nhaän bieát qua caùc thö muïc vaø caùc thö muïc con. Caùc thaønh vieân ñöôïc neâu ra ôû baûng sau:

Page 98: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

95

Caùc thaønh vieân DirectoreyInfo

YÙ nghóa

Create() CreateSubdirectory()

Taïo moät thö muïc (hoaëc caùc thö muïc con ) caên cöù vaøo teân ñöôøng daãn.

Delete() Xoùa thö muïc vaø taát caû noâi dung cuûa noù. GetDirectories() Traû veà moät maûng caùc chuoãi bieåu thò taát caû caùc thö

muïc coù trong thö muïc hieän haønh. GetFile() Laáy caùc taäp tin trong thö muïc ñaõ chæ ñònh(döôùi daïng

maûng caùc kieåu FileInfo) MoveTo() Dôøi moät thö muïc vaø caùc noäi dung cuûa noù ñeá moät

ñöôøng daãn môùi Parent Truy tìm thö muïc cha cuûa ñöôøng daãn chæ ñònh.

Ví duï Taïo thö muïc 'Ta phai: Imports system.IO � Tao thu muc ngay vi tri hien hanh Dim dir1 As DirectoryInfo = New DirectoryInfo(".") ' Tao thu muc co ch duong dan Dim dir2 As DirectoryInfo = New DirectoryInfo("C:\Hieu")

Ví duï taïo vaø ñoïc hieån thò thoâng tin thö muïc 'Ta phai: Imports system.IO Dim dir2 As DirectoryInfo = New DirectoryInfo("C:\Hieu") Console.WriteLine("FullName : {0}", dir2.FullName) Console.WriteLine("Name: {0}", dir2.Name) Console.WriteLine("Parent : {0}", dir2.Parent) ' Thoi gian(date) tao thu muc Console.WriteLine("Creation : {0}", dir2.CreationTime) Console.WriteLine("Root : {0}", dir2.Root)

5.2. Kieåu FileInfo Vai troø cuûa FileInfo laø goùi rieâng veà moät soá chi tieát veà caùc taäp tin hieän coù treân

oå ñóa cöùng(thôøi gian taïo, kích côõ , thuoäc tính,�) Cuõng nhö taïp giuùp taïo vaø huûy caùc taäp tin môùi. Vaø FileInfo coù caùc thaønh vieân loõi sau:

Thaønh vieân FileInfo YÙ nghóa AppendText() Taïo moät kieåu StreamWriter(ñöôïc ñeà caäp ôû phaàn sau)

Page 99: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

96

noái vaên baûn vôùi moät taäp tin CopyTo() Cheùp moät taäp tin hieän coù sang moät taäp tin môùi Create() Taïo moät taäp tin môùi vaø traû veà moät kieåu FileStream

(ñöôïc ñeà caäp ôû phaàn sau)ñeå töông taùc vôùi taäp tin ñöôïc taïo.

CreateText() Taïo moät kieåu StreamWrite ghi moät taäp tin vaên baûn môùi.

Delete() Xoùa moät taäp tin keát gaùn vôùi moät minh duï FileInfo Directory Laáy thö muïc cuûa File DirectoryName Laáy ñöôøng daãn ñaày ñuû taäp tin Length Laáy kích côõ cuûa taäp tin hoaëc thö muïc MoveTo() Dôøi moät taäp tin chæ ñònh ñeán vò trí môùi Name Laáy teân taäp tin Open() Môû moät taäp tin coù

quyeàn öu tieân chia seõ vaø ñoïc ghi khaùc nhau OpenRead() Taïo moät FileStream chæ ñoïc OpenText() Taïo moät kieåu StreamReader (ñöôïc moâ taû sau) ñoïc töø

moät taäp tin vaên baûn hieän coù OpenWrite() Taïo moät kieåu FileStream ñoïc /ghi

Ví duï taïo vaø xoùa moät file Imports system.IO ' Make a fileInfo Dim f As FileInfo = New FileInfo("C:\Test.txt") Dim fs As FileStream = f.Create ' Print some basic traints Console.WriteLine("Creation: {0}", f.CreationTime) Console.WriteLine("Full name: {0}", f.FullName) Console.WriteLine("File Attribute: {0}", f.Attributes.ToString) console.WriteLine("Press a key to delete a file" Console.Read() fs.Close() f.Delete()

5.3. Xem xeùt phöông phaùp FileInfo.Open() Ñeå môû taäp tin maø duøng phöông phaùp FileInfo.Open() ta phaûi bieát sô veà 3 tham soá cuûa phöông thöùc ñoù.

Ví duï veà FileInfo.Open() 'Dung FileInfo.Open() ' open (or Create) a filewith read/Write Attributes (no sharing) ' and store file handle in a FileStream

Page 100: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

97

object Dim file As FileInfo = New FileInfo("C:\Test1.txt") Dim s As FileStream = f.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite, _ FileShare.None) s.Close() file.Delete()

Phöông thöùc Open naøy caàn coù 3 tham soá : Tham soá ñaàu (laø kieåu môõ): kieåu FileMode Tham soá thöù 2 : duøng ñeå xaùc ñònh caùch ñoïc / ghi cuûa luoàng cô sô coù kieåu laø FileAccess tham soá thöù 3 : Chæ ñònh caùch chia seõ taäp tin hieän haønh giöõa caùc caùch quaûn tri taäp tin khaùc nhau. Coù kieåu laø FileShare 5.4. Kieåu FileStream

Lôùp FileStream cung caáp thöïc thi caùc thaønh vieân Stream tröøu töôïng. Töùc laø FileStream cung caáp khaû naêng môû caùc taäp tin hieän ñang coù cuõng nhö taïo taäp tin môùi. FileStream thöôøng ñöôïc taïo baèng kieåu FileMode,FileAccess,FileShare 5.5. Kieåu Streamwriter & StreamReader

Streamwriter & StreamReader laø nhöõng lôùp höõu ích moãi khi baïn caàn ñoïc hoaëc ghi döõ lieäu goác kyù töï (ví duï : caùc chuoãi). Theo ngaàm ñònh caû hai kieåu naøy laøm vieäc vôùi caùc kyù töï Unicode.Tuy nhieân, baïn coù theå thay ñoåi baèng caùch cung caáp moät tham chieáu ñoái töôïng System.Text.Encoding ñöôïc caáu hình ñuùng ñaéng.

Page 101: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

98

Vaø hình sau ñaây coù neâu ra moái quan heä giöõa moäi kieåu vôùi Object trong IO

Hình :Caùc boä phaän ñoïc vaø boä phaän ghi

Object

TextReader TextWriter

StreamReader

StringReader

StreamWriter

StringWriter

Page 102: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

99

Chöông 6

GIÔÙI THIEÄU WINDOWS FORMS

Chöông naøy seõ giôùi thieäu veà khoâng gian teân System.Windows.Forms. Taïi ñaây ta seõ tìm hieåu chi tieát caùch xaây döïng moät cöûa soå chính (form). Ñoàng thôøi, ta cuõng tìm hieåu moät soá lôùp lieân quan ñeán cöûa soå, bao goàm Application, MenuItem, ToolBar vaø StartusBar. Chöông naøy cuõng xöû lyù caùch naém baét vaø ñaùp öùng nhaäp lieäu ngöôøi duøng ( töùc quaûn lyù caùc söï kieân nhö chuoät, phím ) trong moâi tröôøng GUI. Qua ñoù ta thaáy VB.NET laø theâm nhieàu naêng löïc hôn VB coå ñieån. 6.1. Hai khoâng gian teân GUI

Khoâng gian .NET cung caáp hai boä coâng cuï GUI(GUI toolkits): Windows.Forms vaø Web forms. Khoâng teân teân Windows.Forms chöùa moät soá kieåu cho pheùp baïn xaây döïng caùc öùng duïng �ñeå baøn� truyeàn thoáng [traditional desktop. Applications] cuõng nhö caùc taàng trình baøy giaøu tính naêng khaùc [featre � rich presentation layers] hoaëc heä phaân caáp ñeå duøng trong moät öùng duïng xí nghieäp coù phaân phoái. Windows.Forms (gioáng nhö VB 6.0 ) che daáu caùc Win32 API thoâ , cho pheùp baïn taäp trung vaøo chöùc naêng cuûa öùng duïng , duøng heä thoáng kieåu .NET quen thuoäc.

Maëc khaùc, Web Forms(tìm hieåu ôû chöông sau) laø moät boä coâng cuï GUI ñöôïc duøng trong khi phaùt trieån ASP.NET. Phaàn lôùn caùc kieåu Web Forms ñeàu naèm trong khoâng gian teân System.Web.UI vaø System.Web.UI.WebControls. Duøng caùc kieåu naøy, baïn coù theå xaây döïng caùc trình tieàn tieâu ñoäc laäp trình duyeät(Browser � independet front ends)döïa vaøo nhieàu coâng ngheä chuaån khaù nhau nhö : HTML , HTTP,�

Ngoaøi ra, Windows Forms vaø Web Forms chöùa moät kieåu coù teân gioáng nhau (ví duï : Button vaø checkBox ) vôùi caùc thaønh vieân töông töï (ví duï : BackColor vaø Text) chuùng khoâng theå chia seõ moät thöïc thi chung vaø khoâng theå xöû lyù ñöôïc nhö nhau. 6.2. Khaùi quaùt veà Windows.Forms

Windows.Forms laø taäp hôïp caùc lôùp ,caáu truùc, giao dieän , kieåu ñieåm danh. Noù chöùa moät soá löôïng lôùn caùc kieåu hoå trôï trong tieán trình xaây döïng caùc giao dieän ngöôøi duøng (user interface) phong phuù. 6.3. Taïo moät Form

Caùch taïo moät deå nhaát laø ta söû duïng thieát keá cuûa Windows.Forms trong VB.NET. Cuõng gioáng nhö VB 6.0, VisualStudio.NET cung caáp moät soá wizard taïo maãu khôûi ñaàu, vaø caùc coâng cuï caáu hình (ToolBar) giuùp ta laøm vieäc vôùi Windows Forms ñôn giaûn. Maët khaùc ta cuõng coù theå xaây döïng moät öùng duïng Windows Forms

Page 103: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

100

vieát hoaùn baèng maõ (duøng Notepad chaúng haïn) vaø löu vôùi ñuoâi *.vb.Sau ñoù gôûi taäp tin *.vb keát quaû vaøo trình bieân dòch VB.NET baèng côø /target:winexe.

6.3.1. Taïo form vôùi VB.NET • Choïn File -> New -> Project. Moät hoäp thoaïi New Project xuaát hieän nhö

hình sau:

Figure 1. The New Project dialog box

• Choïn Visual Basic Project beân khung beân traùi hoäp thoaïi. • Choïn Windows Application beân khung beân traùi cuûa hoäp thoaïi. • Ñaùnh teân vaøo trong TextBox Name . • Choïn ñöôøng daãn chöùa taäp Windows Application. • Choïn OK. Thì VB.NET taïo ra moät project chöùa moät form beân trong noù

vaø theå hieän noù cho vieäc thieát keá (xem hình sau)

Page 104: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

101

Hình 2. The Windows Forms Designer

Ta coù theå xem code taïo form trong Windows Forms, ta click phaûi chuoät vaøo form designer choïn View Code vaø theå hieän nhö sau: Public Class Form1 Inherits System.Windows.Forms.Form Windows Form Designer generated code End Class Noù taïo ra moät lôùp teân Form1 keá thöø töø lôùp Form. Windows Forms Designer noù chöùa moät ñoaïn code (maëc ñònh sau ta New Project ) khôûi taïo class Form1.Beân tröôùc cuûa Windows Forms coù daáu �+ � ñoù laø caùi hay trong VB.NET nhaèm laøm cho vieäc vieát code thuaän tieän , khoâng thaáy roái vaø khoâng thaáy nhieàu code(duøng caây theå hieän).Khi click vaøo daáu + thì bung roäng vaø theå hieän nhö hình sau(töï ñoäng taïo): Public Class Form1 Inherits System.Windows.Forms.Form #Region " Windows Form Designer generated code " Public Sub New() MyBase.New() 'This call is required by the Windows Form Designer. InitializeComponent() 'Add any initialization after the InitializeComponent() call End Sub 'Form overrides dispose to clean up the component list. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If

Page 105: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

102

End If MyBase.Dispose(disposing) End Sub 'Required by the Windows Form Designer Private components As System.ComponentModel.IContainer 'NOTE: The following procedure is required by the Windows Form Designer 'It can be modified using the Windows Form Designer. 'Do not modify it using the code editor. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() components = New System.ComponentModel.Container() Me.Text = "Form1" End Sub #End Region End Class

• PhöôngThöùc InitializeComponent() Lôùp Form1 ñöôïc phaùt sinh töø System.Windows.Forms.From. Phöông

thöùc InitializeCompont() ñöôïc bao boïc bôûi moät caëp chæ thò #Region vaø #End Rigion. Khi moät khoái maõ ñöôïc bao boïc baèng caùc chæ thò #Region, noù coù theå ñöôïc löôïc goïn vaø ñöôïc thay ñoåi baèng moät khoái chuù giaûi (trong tröôøng hôïp naøy laø, laø �Windows Forms Designer generated code�).

Phöông thöùc InitializeCompont() ñöôïc töï ñoäng caäp nhaät bôûi trình thieát keá bieåu maãu ñeå phaûn aùnh caùc cöûa soã maø baïn thöïc hieän vôùi Form vaø caùc ñieàu khieån cuûa noù baèng Visual Studio.NET IDE ví duï, haõy xem cöûa soã Properties trong hình sau:

Hình: Cöûa soå Properties VB.NET IDE

Page 106: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

103

Neáu duøng cöûa soå söõa ñoåi caùc tính chaát Text vaø BackColor cuûa Form , baïn thaáy InitializeComponent() ñaõ ñöôïc söõa ñoåi cho phuø hôïp :

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() ' 'Form1 ' Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.BackColor = System.Drawing.SystemColors.Desktop Me.ClientSize = New System.Drawing.Size(292, 273) Me.Name = "Form1" Me.Text = "Form1" End Sub

Lôùp do Form phaùt sinh seõ goïi InitializeComponent() beân trong hoaït vi

caáu töû ngaàm ñònh. Ta cuõng neân bieát raèng �caùch an toaøn nhaát � ñeå caäp nhaät maõ xuaát

hieän beân trong phöông phaùp initializeComponent() ñoù laø vaân duïng cöûa soå Properties cuûa Visual Studio.NET thay vì phaûi tröïc tieáp ñieàu taùc maõ beân trong phöông thöùc. Neáu boå sung vaøi maõ hö trong phöông thöùc InitializeCompnent() coù theå laøm teâ lieät khaû naêng cuûa IDE hieån thò form vaøo thôøi gian thieát keá.

Ngoaøi ra, cuõng neân bieát raèng vai troø cuûa InitializeComponent() ñoù laø söu lieäu caùc chi tieát söõu ñoåi maõ trong thôøi gian thieát keát cuûa baïn. • Phöông thöùc Dispose()

Ñieåm ñaùng quan taâm trong ñoaïn code treân ñoù laø phöông thöùc Dispose(). Phöông thöùc thöùc naøy ñöôïc töï ñoäng goïi khi Form cuûa baïn saép huyû, vaø noù laø moät nôi an toaøn ñeå huyû moïi taøi nguyeân ñöôïc phaân boå. Baây giôø ta quay laïi vieäc thieát keá moät ví duï Hello Windows Khi ôû maøn hình dialog Form designer ta tieán haønh nhö sau:

) Hieäu chænh form laïi , choïn maximizeBox =�false�, MinimizeBox = �false�, text = �Hello Windows�.

) Treân thanh coâng cuï ToolBox choïn Label keùo thaû vaøo form vaø choïn thuoäc tính Label.text =�Hello Windows� vaø size = 26.

) Cuõng treân thanh coâng cuï TollBox choïn Button keùo thaû vaøo form vaø ñaët nhaõn cuûa button noù laïi(Text = �OK�).

Page 107: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

104

) Double click vaøo button vaø ñaùnh code vaøo

Me.Close( )// Dong cua so Me.Dispose( )// goi phuong thuc huy

) Nhaán F5 hoaëc choïn Debug -> Start Hieån thò dialog nhö sau:

Xem ví duï 6.1

6.3.2. Laøm vieäc nhieàu form trong moät Project vôùi VB.NET Project coù nhieàu form bao 1 form main vaø nhieàu form phuï

Ví duï 6.2

Page 108: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

105

Trong ví duï naøy ta taïo ra 3 form (MainForm, Age DialogBox vaø form Auxiliary ) trong ñoù MainForm laø form chính. Ñeå goïi caùc form thaønh vieân trong form main ta phaûi khôûi taïo noù Dim DLG As New AgeDialog()

Dim WithEvents FRM As New AuxiliaryForm() Treân form main coù hai button ñeå goïi hai form thaønh vieân: Ñoái vôùi Button

Show Dialog Box ta phaûi khôûi taïo caùc thaønh phaàn roài sau ñoù môùi goïi phöông thöùc LG.ShowDialog() vaø source nhö sau: Private Sub bttnAge_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttnAge.Click DLG.cmbDay.Text = "4" DLG.cmbMonth.Text = "November" DLG.cmbYear.Text = "1980" DLG.ShowDialog() If DLG.DialogResult = DialogResult.OK Then MsgBox(DLG.cmbMonth.Text & " " & DLG.cmbDay.Text & ", " & DLG.cmbYear.Text) Else MsgBox("OK, we'll protect your vital personal data") End If

End Sub Vaø dialog hieån thò (hình)

Page 109: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

106

6.4. Theâm moät söï kieän ñieàu khieån vaøo Form(Event Handler)

Trong lôùp control cuõng ñònh nghóa moät soá söï kieän coù theå ñöôïc gom nhoùm theo logic thaønh hai phaïm truø ñoù laø : Caùc söï kieän chuoät vaø caùc söï kieän baøn phím.

Caùc söï kieän coát loõi cuûa kieåu Control Söï Kieän ConTrol YÙ nghóa

Click, Double Click, MouseEnter, MouseLeave, MouseDown, MouseUp, MouseMove, MouseHover, MouseWheel.

Lôùp Control ñònh nghóa nhieàu söï kieän ñöôïc öùng taùc ñeå ñaùp öùng laïi nhaäp lieäu chuoät.

KeyPress, KeyUp, KeyDown

Lôùp Control cuõng ñònh nghóa nhieàu söï kieän ñaùp öùng laïi nhaäp lieäu phím.

6.4.1. Laøm vieäc vôùi caùc söï kieän chuoät: Ví duï baïn caàn chaën moät söï kieän MouseUp, nuùt chuoät naøo nhaán . Muïc

tieâu ñoù laø hieän thò moät vò trí (x,y) taïi nôi söï kieän MouseUp ñaõ xaûy ra. Khi muoán ñaùp öùng caùc söï kieän töø trong moät öùng duïng WindowsForms, Ta coù hai caùch tieáp caän chung.

( Caùch 1: Caùch tieáp caän ñaàu tieân (quen thuoäc) ñoù laø : vaän duïng cô cheá söï kieän

[event mechanis] VB.NET. Gioáng nhö VB 6.0 VB.NET hoã trôï 2 hoäp lieät keâ thaû ñöôïc noái taïi ñænh

cöûa soå maõ. Khi khai baùo moät ñoái töôïng baèng töø khoaù WithEvent baïn coù theå thaáy teân bieán naøy neâu trong danh saùch beân traùi sau khi löïa choïn tieåu cuï maø baïn muoán laøm vieäc, danh saùch thaû beân phaûi cho pheùp baïn choïn caùc söï kieän muoán söû duïng noù laøm moät vieäc gì ñoù.

Khi muoán ñaùp öùng söï kieän treân Form chính, baïn söï duïng tieáp caän. Tuy nhieân Form khoâng ñöôïc neâu theo teân danh saùch thaû ñoái töôïng (Object drop � down list). Thay vì theá, baïn caàn löïa choïn (Base Class Events) xem hình :

Page 110: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

107

Khi click vaøo MouseUp thì VB.NET tao saün moät haøm nhö sau: Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp Me.vtri.Text = e.X & "," & e.Y End Sub Vaø khi chaïy:

ví duï 6.3

Xaùc ñònh nuùt chuoät nhaán: Cuõng xem xeùt söï kieän MouseUp(hoaëc MouseDown) ñöôïc gôûi. Neáu muoán xaùc ñònh chính xaùc nuùt naøo ñaõ ñöôïc nhaán, Baïn caàn xem xeùt tính chaát Button cuûa MousewEventArgs. Giaù trò cuûa nuùt ñöôïc nhaán ñöôïc xaùc ñònh bôûi kieåu ñieåm danh MouseButtons ví duï:

Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp Me.vtri.Text = e.X & "," & e.Y

Page 111: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

108

If (e.Button = MouseButtons.Left) Then MessageBox.Show("Left click !") ElseIf (e.Button = MouseButtons.Right) Then MessageBox.Show("Right click") Else ' MouseButtons.Middle MessageBox.Show("Middle click") End If End Sub

Nhö vaäy khi nhaép nuùt traùi, baïn thaáy hoäp thoaïi nhö hình sau:

Hình: Dialog hieån thò söï kieän click chuoät.

( Caùch 2: Caùch tieáp caän khaùc ñeå ñieàu khieån caùc söï kieän chuoät trong moät kieåu

phaùt sinh töø control ñoù laø chaïy ñeø ñuùng phöông phaùp cô sôõ, maø trong tröôøng hôïp cuûa baïn laø OnMouseUp vaø OnMouseMove. Kieåu control ñònh nghóa moät soá phöông thöùc coù theå chaïy ñeø[ overridable method ] ñöôïc töï ñoäng goïi khi söï kieän töông öùng ñöôïc töông taùc. Ñeå chaïy ñeø moät phöông thöùc lôùp cô sôõ baèng VS.NET IDE , baïn löïa tuyø yù choïn (overrides) töø danh saùch thaû beân traùi. Sau khi thöïc hieän, danh saùch beân phaûi hieån thò taát caû caùc thaønh vieân Overridable maø baïn coù theå thao taùc vaø quaûn lyù trong lôùp ñöôïc phaùt sinh[derived class] xem hình döôùi ñaây:

Page 112: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

109

Neáu caäp nhaät form theo kyõ thuaät naøy, baïn khoâng caàn chæ ñònh moät trình ñieàu khieån vaø quaûn trò söï kieän tuyø bieán theo thuû coâng, vaø thay vì theá baïn coù theå vieát maõ sau ñaây: Protected Overrides Sub OnMouseUp(ByVal e As System.Windows.Forms.MouseEventArgs) If (e.Button = MouseButtons.Left) Then MessageBox.Show("Left Click") Else If (e.Button = MouseButtons.Right) Then MessageBox.Show("Right Click") Else MessageBox.Show("Middle Click") End If Me.OnMouseUp(e) End Sub Protected Overrides Sub OnMouseMove(ByVal e As System.Windows.Forms.MouseEventArgs) Vtri.Text = e.X & �,� & e.Y Me.OnMouseMoves(e) End Sub

Löu yù caùch caùc kyù danh(signatures) cuûa moãi phöông phaùp chaáp

nhaän moät tham soá ñôn leû cuûa kieåu MouseEventArg, thay vì hai tham soá tuaân thuû theû uyû quyeàn MouseEventHandler. Neáu chaïy chöông trình moät laàn nöõa, baïn seõ khoâng thaáy coù ñieàu thay ñoåi (laø ñieàu toát nhaát).Vaäy ñaâu laø kyõ thuaät maø ta phaûi duøng khi muoán ñieàu quaûn moät söï kieän caáp form. Thoâng thöôøng Ta chæ caàn chaïy ñeø moät phöông phaùp �OnXXX()� neáu coù coâng vieäc boå sung caàn thöïc hieän tröôùc khi phaùt ñoäng söï kieän. Caùch tieáp caän öa duøng (vaø laø caùch tieáp caän ñöôïc Visual Studio.NET söû duïng theo nhaàm ñònh ) ñoù laø kieåu quaûn trò söï kieän tröïc tieáp duøng töø khoaù Handles ñaõ ñöôïc thöïc hieän trong ví duï chuoät ñaàu tieân.

6.4.2. Laøm vieäc vôùi caùc söï kieän baøn phím Tieán trình xöû lyù nhaäp lieäu baøn phím cuõng gioáng nhö vieäc söû lyù chuoät. Maõ

sau ñaây choát giöõ söï kieän KeyUp vaø hieån thò teân vaên baûn cuûa kyù töï ñaõ ñöôïc nhaán. Taïi ñaây, baïn choát giöõ söï kieän naøy baèng kyõ thuaät uyû quyeàn [delegation] (coù moät phöông thöùc teân OnKeyUp() coù theå ñöôïc chaïy ñeø nhö moät caùch thay theá) :

Ví duï 6.4

Page 113: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

110

Khi ta nhaán phím �A� thì coù hình sau:

Figure : Phím ñaõ ñöôïc nhaán hay chöa.

Nhö ñaõ bieát, kieåu KeyEventArgs duy trì moät kieåu ñieåm danh [ennumeration] coù teân KeyCode löu yù löu giöõ ID cuûa phím nhaán. Ngoaøi ra, kieàu KeyEventArgs ñònh nghóa caùc tính chaát höõu ích neâu ôû baûng sau:

Tính chaát KeyEventArgs

YÙ nghóa

Alt Laáy moät giaù trò neâu roõ phím Alt ñaõ ñöôïc nhaán hay chöa

Control(Ctrl) Laáy moät giaù trò neâu roõ phím control ñaõ ñöôïc nhaán hay chöa.

Handled Tìm hoaëc aán ñònh moät giaù trò neâu roõ söï kieän ñaõ ñöôïc taùc ñoäng hay chöa.

KeyCode Tìm maõ baøn phím cuûa moät söï kieän System.Windows.Forms.Control.KeyDown hoaëc System.Windows.Forms.Control.KeyUp

Keydata Tìm döõ lieäu phím cuûa moät söï kieän System.Windows.Forms.Control.KeyDown hoaëc

Page 114: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

111

System.Windows.Forms.Control.KeyUp Modifiers Neâu roõ caùc phím chuyeån naøo ( Ctrl , Shift , hoaëc Alt)

ñaõ ñöôïc nhaán Shift Tìm moät giaù trò neâu roõ phím shift ñaõ ñöôïc nhaän hay

chöa 6.5. Xaây döïng moät öùng duïng MDI (Multiple document interface)

Caùc öùng duïng MDI cho pheùp ngöôøi duøng coù nhieàu cöûa soå môû cuøng moät luùc, khaùc vôùi öùng duïng SDI (single document interface)chæ moät cöûa soã bieåu thò moät �tö lieäu� [document] ñaõ cho cuûa öùng duïng trong moät thôøi gian. Thoâng qua ví duï VS.NET laø moät öùng duïng MDI , vaø cuøng luùc baïn môõ nhieàu tö lieäu töø moät öùng duïng.

Khi xaây döïng caùc öùng duïng MDI baèng Windows Forms, vieäc ñaàu tieân cuûa baïn laø (taát nhieân ) laø taïo moät application môùi tinh. Form ban ñaàu cuûa öùng thöôøng thöôøng laø moät heä thoáng laäp leänh ñôn [menuing system] cho pheùp ngöôøi duøng naïp tö lieäu ví duï File/New/Open, cuõng nhö saép xeáp caùc cöûa soã hieän coù trong moät öùng duïng ñang môõ theo moät traät töï nhaát ñònh ví duï lieân hoaøn [ cascade], xeáp laùt doïc [vertical tile], vaø xeáp laùt ngang [horizontal tile]�

Ngoaøi ra, caùc öùng duïng MDI coøn cho pheùp baïn �hôïp nhaát caùc leänh ñôn� . Khoâng gian teân Windows Forms cuõng ñònh nghóa moät soá tính chaát, phöông phaùp, phöông thöùc ,vaø söï kieän cho pheùp hôïp nhaát caùc leänh ñôn theo laäp trình. Vaø coøn coù moät heä thoáng �hôïp nhaát ngaàm ñònh�laøm vieäc trong nhieàu tröôøng hôïp .

6.5.1. Xaây döïng Form Cha(MDI parent ) vaø form con (MDI children) MDI bao goàm moät form chính, maø chính noù khoâng phaûi theå hieän baát

kyø döõ lieäu naøo. Vaø coù moät hay nhieàu form con, noù chæ xuaát hieän beân trong form chính vaø noù duøng ñeå hieän thò trình baøy nhöõng taøi lieäu. Form chính ñöôïc goïi laø form cha (MDI parent), vaø nhöõng form con ñöôïc goïi laø form con (MDI children) .

Lôùp form coù hai thuoäc tính ñieàu khieån caùc form ñoù laø : MDI parent , MDI children. Thuoäc tính IsMdiContainer (traû giaù trò Boolean) xaùc ñònh coù phaûi moät form ñöôïc xöû lyù laø form MDI parent. Ñaët thuoäc tính MdiParent xaùc ñònh coù phaûi moät form ñöôïc xöû lyù laø form children hay khoâng. Ñaët thuoäc tính cuûa moät form theå hieän cuûa moät öùng duïng cuûa MDI parent tham chieáu ñeán moät MDI children. Thoâng qua ví duï sau:

Ví duï 6.5 MDI cöïc tieåu Imports System Imports System.Windows.Forms Public Module AppModule Public Sub Main() Application.Run(New MainForm()) End Sub End Module

Page 115: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

112

Public Class MainForm Inherits Form Public Sub New() ' Set the main window caption. Text = "My MDI Application" ' Set this to be an MDI parent form. IsMdiContainer = True ' Create a child form. Dim myChild As New DocumentForm("My Document", Me) myChild.Show() End Sub End Class Public Class DocumentForm Inherits Form Public Sub New(ByVal name As String, ByVal parent As Form) ' Set the document window caption. Text = Name ' Set this to be an MDI child form. MdiParent = Parent End Sub End Class

Khi ta thöïc thi chöông trình xem hình sau:

6.6. Taïo thöïc ñôn cöûa soå( Windows Menu) Khoâng gian teân System.Windows.Forms cung caáp moät soá kieåu taïo ñieàu kieän

thuaän lôïi cho vieäc xaây döïng caùc Menu chính (töùc laø caùc Menu moùc noái taïi ñænh cuûa moät form), cuõng nhö caùc PopUp Menu (töùc laø caùc menu �Nhaép phaûi�). Ñeå baét ñaàu, ta xem moät Menu ñôn giaûn treân cuøng (tomost menu ) cho ngöôøi thoaùt baèng caùch vaøo Menu (File | Exit ) xem hình sau:

Page 116: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

113

Lôùp ñaàu tieân ta caàn löu yù ñoù laø System.Windows.Forms.Menu, vaän haønh

nhö lôùp cô sôõ cho taát caû caùc lôùp khaùc coù lieân quan ñeán ñôn (MainMenu, MenuItem, vaø ContextMenu). Lôùp Sytem.Windows.Forms.Menu laø moät lôùp tröøu tröôïng, vaø do ñoù baïn khoâng theå taïo moät ví duï tröïc tieáp baèng kieåu naøy. Thay vì theá baïn taïo caùc ví duï baèng moät hay nhieàu trong soá kieåu ñöôïc phaùi sinh. Lôùp Menu cuõng ñònh nghóa moät soá caùc caùch thao taùc cô baûn. Chaúng haïn nhö cung caáp khaû naêng truy caäp moät menu rieâng leû, hôïp nhaát caùc Menu

Löu yù, lôùp Menu ñònh nghóa moät lôùp ñöôïc loàng ngheùp (ñöôïc bieåu hieän baèng cuù phaùp �$� ) coù teân laø MenuItemConllection, ñöôïc thöøa keá bôûi lôùp con MainMenu, MenuItem vaø ContextMenu ñöôïc theå hieän nhö hình sau(Heä phaân caáp leänh ñôn Windows.Forms), ñöôïc truy caäp baèng tính chaát Menu.MennuItems .

Hình :Heä phaân caáp leänh ñôn Windows.Forms Lôùp cô sôõ Menu ñònh nghóa moät soá thaønh vieân nhö sau: Thaønh vieân Menu Yùnghóa

Handle Tính chaát naøy cung caáp khaû naêng truy caäp quaûn trò cô sôõ bieåu thò leänh ñôn naøy.

IsParent Tính chaát naøy chæ ñònh Menu naøy chöùa moät muïc baát kyø hay muïc treân cuøng.

MdiListItem Tính chaát naøy traû veà MenuItem chöùa danh saùch cöûa soå con MDI.

Menu

Menu$MenuItemCollection

MainMenu MenuItem ContextMenu

Page 117: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

114

MenuItems Moät soá tính chaát khaùc, traû veà moät kieåu thuoäc Menu.MenuCollection ñöôïc loàng ngheùp, bieåu thò caùc Menu com ñöôïc sôõ höõu bôûi lôùp phaùt sinh töø menu.

GetMainMenu() Traû veà muïc MainMenu chöùa leänh dôn naøy. MergeMenu() Hôïp nhaát caùc muïc cuûa Menu khaùc vôùi Menu

naøy nhö ñöôïc chæ ñònh bôûi caùc tính chaát mergeOrder vaø mergeType cuûa chuùng. Duøng ñeå hôïp nhaát leänh ñôn cuûa moät thuøng chöùa Mdi vôùi leänh ñôn cuûa con MDI ñang hoaït ñoäng [active MDI child] cuûa noù.

CloneMenu() Aán ñònh Menu naøy laø moät baûn sao ñoàng nhaát moät Menu khaùc.

6.7.1. Kieåu Menu$MenuItemCollection Caùc thanh vieân quan troïng nhaát cuûa lôùp Menu ñoù laø tính chaát MenuItems;

noù traû veà moät kieåu Menu$MenuItemCollection ñöôïc loàng ngheùp(ky ù töï �$� bieåu thò moät kieåu ñöôïc loàng gheùp ). Noù coù höõu ích khi muoán thieát laäp moät moái quan heä logic giöõa caùc kieåu höõu quan. Taïi ñaây, kieåu Menu$MenuItemCollection bieåu thò taát caû caùc Menu con maø moät ñoái töôïng phaùi sinh töø Menu sôû höõu.

Ví duï , neáu taïo moät MainMenu ñeå bieåu thò menu �File� treân cuøng. Baïn boå sung MenuItems (ví duï : Open, Save ,Close, vaø Save As ) vaøo söu taäp [collection]. Menu$MenuItemCollection ñònh nghóa caùc caùc thaønh vieân boå sung vaø gôõ boû caùc kieåu MenuItem, coù ñöôïc soá ñieåm hieän haønh cuûa caùc MenuItem vaø truy caäp moät thaønh vieân cuï theå trong söu taäp. Xem baûng lieät keâ vaøi thaønh vieân coát loõi.

Thaønh vieân Menu$MenuItemCollection

YÙ nghóa

Count Traû veà soá löôïng caùc MenuItem trong söu taäp. Add(),AddRange() ,Remove()

Cheøn (hoaëc gôõ boû) moät MenuItem môùi vaøo söu taäp. Neân bieát raèng phöông phaùp Add() ñaõ ñöôïc quaù taûi nhieàu laàn ñeå cho pheùp baïn chæ ñònh phím taét, caùc theû uyû quyeàn , �Addrange() höõu ích ôû choã noù cho pheùp boå sung moät maûng caùc MenuItem trongmoät leänh goïi ñôn leû.

Clear() Gôõ boû caùc muïc ra khoûi söu taäp Contains() Duøng ñeå xaùc ñònh xem moät MenuItem ñaõ cho

Page 118: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

115

coù naèm trong söu taäp hay khoâng,.

6.7.2. Theâm heä thoáng menu vaøo trong Form(adding menus to a form) Baïn coù theå theâm (add) menu vaøo moät form deã daøng baèng caùch ta söû

duïng Main menu control. Thöôøng Menu theâm vaøo cuøng luùc ta thieát keá form. Caùch add moät menu vaøo 1 form trong cuøng luùc thieát keá form theo caùc böôùc nhö sau: ) Töø File menu, choïn New Project. ) Trong danh saùch Visual Basic Projects , choïn Windows Application template

, vaø choïn OK. ) Treân thanh ToolBox , choïn Win Forms vaø double-click MainMenu control,

moät menu noù seõ töï ñoäng theâm vaøo form (theå hieän chuoãi �Type Here� (xem hình)) .

Hình : Menu Designer

) Trong Menu Designer baïn click vaøo Type Here choïn noù vaø ñaùnh kyù töï theå hieän cho Menu ñoù ví duï ñaùnh chöõ &File xem hình .

Page 119: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

116

Hình : Menu File

) Töông töï nhö theá baïn taïo nhöõng menu khaùc vaø nhö theá baïn coù theå taïo moät heä thoáng menu hoaøn chænh. Xem hình cuûa moät ví duï 6.6:

Hình : ví duï ñôn giaûn Menu.

Chuù yù : Ñeå cho menu caøng tieän duïng , hieäu quaû hôn vaø noåi baäc VB.NET cung caáp theâm moät soá thuoäc tính sau :

Thuoäc tính Dieãn giaûi Check Neâu roõ daáu kieåm tra coù xuaát hieän beân caïnh vaên baûn

cuûa menu coù hieän leân hay khoâng. DefaultItem Neâu roõ giaù trò menu ñoù laø ngaàm ñònh hay khoâng. Enable Neâu roõ menu ñoù coù ñöôïc kích hoaït hay khoâng. Index Aán ñònh vò trí cuûa menu trong trong menu cha. MergeOrder Tìm vaø ñònh vò trí töông ñoái cuûa menu khi menu cuûa noù

ñöôïc hôïp nhaát vôùi moät menu khaùc. MergeType Tìm vaø ñònh giaù trò vaø neâu roõ caùch xöû lyù cuûa menu naøy

khi menu cuûa noù ñöôïc hôïp nhaát vôùi moät menu khaùc. OwnerDraw Tìm vaø ñònh moät gía trò neâu roõ maø baïn cung caáp seõ

moät menu hay Windows seõ veõ menu khaùc. RadioCheck Tìm vaø ñònh giaù trò neâu roõ muïc leänh ñôn menu.Neáu

Page 120: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

117

ñöôïc ñaùnh daáu kieåm. Coù hieån thò moät daáu nuùt radio thay vì moät daáu kieåm hay khoâng.

Shortcut Ñònh phím taét (ShortCut key )keá hôïp voái moät menu. Show Shortcut Ñònh vaên haûn cuûa leänh ñôn. Access keys Taïo nhöõng phím taét cuûa menu nhö : Nhaán phím Alt vaø

nhaán kyù töï gaïch döôùi cuûa menu. Separator bars Duøng ñeå nhoùm caùc leänh cuøng quan heän beân trong

menu. Giuùp ta ñeå doïc chuùng. 6.7.3. Duøng PopUp Menu vaøo trong Form ) Ngoaøi nhöõng menu treân ta coøn duøng moät kyõ thuaät khaùc ñoù laø Pop Up

Menu (xem vi duï sau:6.7)

6.7.4. Duøng ContextMenu vaøo trong Form Noù gioáng nhö PopUp Menu laø ta coù theå ñònh vò taïi choã maø ta caàn ví duï nhö click chuoät. Caùch tieán haønh:

) Ta duøng töông töï nhö MainMenu treân ToolBox (xem hình)

Page 121: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

118

) Caùc böôùc tieáp töông töï nhö taïo MainMenu. Löu yù ñeå cho ConText Menu hoaït ñoäng laø ta choïn thuoäc tính cuûa control ví duï : TextBox laø ContextMenu= Teân cuûa ContextMenu maø ta taïo noù.

Vaø ví ñôn giaûn veà ConTextMenu nhö hình sau (vín duï 6.8):

6.7. Tìm hieåu veà thanh tình traïng(status bar) Thanh Status bar laø moät thanh naèm ngang (thöôøng ôû beân döôùi moät form).

Thanh status bar ñöôïc duøng ñeå hieån thò thoâng tin nguyeân baûn ví duï nhö: ngaøy ,thaùng hoaëc laø moâ taû cuûa moät menu item. Status bar cuõng theå hieän nhöõng phím nhaán nhö : Insert,Numlock,�

Baûng thuoäc tính cuûa Status Bar control(choïn loïc) Thuoäc tính Moâ taû

AccesssibleDescription Moâ taû nhöõng aûnh höôûng tôùi nhöõng vuøng client (baùo laïi)

AccesssibleName Teân cuûa vuøng client baùo laïi

Page 122: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

119

AllowDrop Xaùc ñònh neáu thanh traïng thaùi seõ nhaän keùo keùo vaø thaû nhöõng ñaëc taû.

Anchor Neo cuûa status bar ContextMenu Laø nhöõng phím taét cuûa menu ñöôïc theå hieän khi

ngöôøi duøng click chuoät phaûi leân thanh status bar Cursor Cursor hieän ra khi qua thanh(treân) status bar Enable Ñònh status bar naøy coù khaûng hoaït ñoäng hay khoâng Locked Xaùc ñònh neáu thanh status bar coù theå duy chuyeån

hoaëc thay ñoåi kích thöôùc. Font Xaùc ñònh phoâng chöõ maø thanh status bar duøng ñeå

hieän thò. Panels Traû veà kieåu StatusBarPanelCollection ñöôïc loàng

gheùp chöùa moãi panel ñöôïc duy trì bôûi StatusBar (gioáng nhö menu)

ShowPanels Xaùc ñònh giaù trò neâu roõ caùc khuoâng coù ñöôïc neâu hay khoâng.

6.8. Theâm Toolbar vaøo form

GUI cung caáp moät coâng cuï nöõa ñoù laø thanh Toolbar. Thanh coâng cuï naøy cung caáp moät bieän phaùp thay theá ñeå kích hoaït cho moät leänh ñôn naøo ñoù. Ví duï nhö nhaán nuùt Save,�

Moät soá tính chaát coát loõi cuûa Toolbar Tính chaát ToolBar

Moâ taû

BorderStyle Loaïi vieàn xung quanh ñieàu khieån naøy, nhö ñöôïc chæ ñònh bôûi bieåu kieåu ñieåm danh BorderStyle

Buttons Söu taäp caùc nuùt thuoäc veà thanh coâng cuï (ví duï ToolBar$ToolBarCollection)

ButtonSize Xaùc ñònh kích côõ cuûa moät nuùt trong toolBar ImageSize Phöông phaùp naøy traû veà kích côõ cuûa caùc aûnh trong beân

trong danh saùch aûnh cuûa ToolBar ShowToolTips Neâu roõ ToolBar coù neâu oâ gôïi nhôù [ToolTip] cho moãi nuùt

hay khoâng. ImageList Traû veà ñieàu khieån imageList duy trì caùc aûnh cho

ToolBar naøy Wrappable Duøng caùc thanh coâng cuï coù theå �ñoùng khung� sang doøng

keá tieáp khi ToolBar trôû thaønh quaù heïp ñeå goïp taát caû caùc nuùt treân cuøng moät doøng.

Page 123: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

120

Khi moät form duy trì moät ToolBar, muïc tieâu ñoù laø taïo vaøi ñoái töôïng ToolBarButton rieâng reû vaø boåsung chuùng vaøo kieåu ToolBar$ToolBarCollection. Moãi nuùt coù theå chöùa vaên baûn, caùc aûnh, hoaêïc caû hai.

Caùc thuoäc tính cuûa ToolBarButton Tính chaát

ToolBarButton Moâ taû

DropDownMenu Caùc ToolBarButton coù theå chæ ñònh moät leänh ñôn troài ñöôïc neâu moãi khi nuùt thaû [drop-down buuton] ñöôïc aán. Tính chaát naøy cho pheùp baïn ñieàu khieån ñuùng leäng ñôn ñöôïc neâu. Löu yù chæ ñöôïc neâu tính chaát Style ñöôïc aán ñònh laø DropDownButton

ImageIndex Traû veà chæ muïc cuûa aûnh maø ToolBarbutton naøy ñang duøng. Chæ muïc ñeán töø ImageList cuûa ToolBar cha.

Style Traû veà kieåu daùng cuûa nuùt ToolBar . Ñieàu naøy seõ hình thaønh kieåu ñieåm danh ToolbarButtonStyle

Text Phuï ñeà xuaát hieän trong thanh ToolBar naøy. ToolTpText Neáu ToolBar cha coù tính chaát ShowTooltips ñaõ

baät, tính chaát naøy moâ taû vaên baûn xuaát hieän cho nuùt naøy.

Visible Neâu roõ nuùt naøy loä dieän hay khoâng loä dieän. Ví duï ToolBar (xem ví duï Baitap/ToolBar)

Ñeå cho hình aûnh vaøo trong Button ta phaûi taïo ImagesList(ñöôïc taïo töø ToolBox/ImageList)

Page 124: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

121

Chöông 7

LAÄP TRÌNH VÔÙI CAÙC WINDOWS FORMS CONTROL TRONG VB.NET

Trong phaàn naày ta tìm hieåu veà : - Tìm hieåu tieåu cuï GUI ñöôïc ñònh nghóa trong System.Windows.Forms. - Ngoaøi vieäc cung caáp haøng loaït caùc control trong Windows Forms ta coøn neâu

ra moät soá vaán ñeà khaùc nhö : Thieát laäp tab cho caùc control , caáu hình cho caùc caùch öùng xöû �neo cheát� (docking) vaø �neo� (anchoring) cho hoï caùc kieåu GUI.

- Caùch xaây döïng vaø kyõ thuaät cuûa control ngöôøi duøng. - Xem xeùt moät ñaët cuï môùi cuûa kieát truùc .NET Windows forms : tính thöøa keá

Form. 7.1. Heä phaân caáp Windows Forms

Trong khoâng gian teân System.Windows.Forms chöùa caùc ñieàu khieån vaø ñöôïc xeáp theo moät heä phaân caáp nhö sau:

DomainUpDown

NumericUpDown

Control

Button Base

Button

CheckBox

RadioButton

DataGrid

DatetimePick

TextBox Base

TextBox

RickTextBox

GroupBox

HSrollbar

VSrollBar

SrollBar

ComboBox

Label

LableLink

LiskBox

CheckkedListBox

ListView

MDIClient

MonthCalandar

PictureBox

Splitter

StatusBar

ProcessBar

Format Control

TabBase

TabControl

TabStrip

Form control

UserControl

ContainerControl

ToolBar

TrackBar

TreeView

SrollableControl

TabPage

Panel

UpDownBase

MultiplexPanel

Page 125: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

122

Boå sung caùc control vaøo caùc Form(baèng caùch vieát code) Baát keå kieåu Control naøo choïn ñaët treân form, ta ñeàu theo motä loaït caùc böôùc

töông töï (taát caû ñöôïc töï ñoäng hoaù trong VB.NET) nhö sau : - Tröôùc heát taïo moät soá löôïng bieán thaønh vieân bieåu thò qua caùc muïc GUI

maø form duy trì. - Keá tieáp, laø beân trong caáu töû form (hoaëc trong phöông phaùp

initializecomponent()) ta caáu hình vaø hoaït ñoäng cuûa moïi control nhö duøng caùc tính chaát, phöông phaùp, caùc söï kieän ñaõ cung caáp.

- Cuoái cuøng (quan troïng nhaát) ,ta aán control theo traïng thaùi ban ñaàu cuûa noù. Boå sung noù vaøo boä söu taäp control cuûa Form (duøng caùc tính chaát control).

Boå sung caùc control vaøo caùc Form(duøng caùc control co saün treân thanh coâng cuï):

Maëc duø baïn coù toaøn quyeàn vieát maõ Windows Forms. Nhöng coù caùch deã hôn ñoù laø duøng visual Studio.NET IDE laøm nhö sau:

- Loâi moät control ta duøng leân treân form thì IDE ñaùp öùng boå sung moät bieán thaønh vieân vaøo trong class Form.

- Coøn veà vieäc quaûn lyù caùc söï kieän cho caùc control trong GUI neáu duøng code thì duøng töø khoaù WithEvent(vaø chaën caùc söï kieän baèng phöông phaùp addHandler()). Coøn duøng coâng cuï laø ta duøng quaûn lyù söï kieän vaøo thôøi gian thieát keá nhö hình beân

Page 126: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

123

7.2. Caùc control trong WindowsForms:

7.2.1. TextBox control Duøng ñeå nhaäp döõ lieäu, vaø cho pheùp ngöôøi duøng caáu hình noù döôùi daïng hoã trôï thanh cuoän ...

Noù thuoäc lôùp cô sôõ TextBoxBase neân coù moät soá tính chaát cuûa TextBoxBase cung caáp :

Caùc tính chaát cuûa TextBoxBase: Tính chaát

TextBoxBase yù Nghóa

AcceptsTab Neâu roõ thao taùc nhaán phím Tab trong moät TextBoxControl ña doøng coù chuyeån Tab vaøo chính control hay khoâng, thay vì dôøi tieâu ñieåm ñeán control keá tieáp trong thöù töï Tab

AutoSize Xaùc ñònh kích côõ cuûa control coù töï ñoäng ñieàu chænh khi font chöõ ñöôïc gaùn hay khoâng .

BackColor ForColor

Ñònh maøu neàn hoaëc maøu maët tieàn cuûa control

HideSelection Cho bieát moät giaù trò neâu roõ vaên baûn ñöôïc löïa choïn trong TextBox coù giöõ nguyeân traïng thaùi hay khoâng.khi maát forcus hay khoâng.

MaxLength Chieàu daøi chuoãi toái ña cuûa textBox control Modiified Ñònh giaù trò neâu roõ textBox control ñaõ ñöôïc söõa ñoåi bôûi

ngöôøi duøng keå töø khi control ñöôïc taïo hoaëc noäi dung cuûa noù thay ñoåi laàn choùt.

Mutiline Chæ ñònh vaên baûn naøy coù nhieàu doøng hay khoâng ReadOnly ñònh xem textBox coù quîeàn chæ ñoïc hay khoâng SelectedText SelectedLength

Chöùa vaên baûn ñöôïc ñaùnh daáu/chieàu daøi cuûa vaên baûn ñöôïc choïn

SelectionStart vò trí khôûi ñaàu cuûa vuøng vaên baûn choïn WordWrap Neâu roõ moät TextBox control ña doøng coù töï ñoäng ñoùng

khung caùc töø (WordWrap) theo ñaàu doøng keá tieáp hay khoâng

TextBoxBase coøn ñònh moät soá kieåu nhö trong clipboard nhö copy(),clear(), Paste(),AppendText()... Ngoaøi caùc thöøa keá treân vôùi lôùp TextBoxBase noù coøn coù moät soá tính naêng khaùc nhö:

Page 127: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

124

T/C TextBox control

YÙ nghóa

AcceptsReturn Ñònh roõ thao taùc nhaán Enter trong moät TextBox Control ña doøng seõ taïo moät doøng vaên baûn môùi hay kích hoaït moät button ngaàm ñònh trong Form.

CharecterCasing Ñònh coù söõa ñoåi chöõ thöôøng (case)cuûa caùc kyù töï khi goõ chuùng hay khoâng

PasswordChar Ñònh laø coù phaûi doøng nhaäp laø maät hieäu hay khoâng ScrollBars Ñònh thanh cuoäc xuaát hieän khi coù ña doøng TextAlign Caùch caêng haøng trong TextBox ta duøng kieåu ñònh danh

HorizontalAlignment. Ví duï: 7.1

7.2.2. RichTextBox control Lôùp cô sôõ cuûa noù laø TextBoxBase neân noù thöøa höôûng ñaày ñuû caùc tính

naêng cuûa TextBoxBase cuõng nhö cuûa TextBox ngoaøi ra noù coøn coù moät soá tính naêng môùi ñoù laø :

RichTextBox control hoå trôï vieäc hieån thò vaø ñieàu taùc vaên baûøn ñöôïc ñònh daïng cao. ví duï baïn coù theå caáu hình nhieàu löïa choïn font chöõ trong moät coâng cuï ñôn leû, caùc URl , vaên baûn coù daáu ñaàu muïc....

7.2.3. Label control Hieån thò text (nhaõn) maø nguôøi duøng caàn .Noù haàu heát gioáng nhö VB coå

ñieån nhöng noù khoâng coøn thuoäc tính caption maø thay vaøo thuoäc tính text. Xem ví duï 7.1

7.2.4. Button control • Cung caáp phöông thöùc nhaäp lieäu cho ngöôøi duøng, thöôøng ñaùp öùng moät soá

thao taùc cuûa ngöôøi duøng nhö click chuoät hay nhaán moät phím naøo (enter) ...

Page 128: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

125

• Hieån thò hình aûnh treân Button(neàn ,icon) vaø traät töï saép xeáp chuùng... • Lôùp cô sôõ noù laø ButtonBase neân coù thöøa höôûng moät soá tính chaát cuûa Lôùp cô

sôõ ñoù: Caùc tính naêng cuûa lôùp ButtonBase

T/C Button control YÙ nghóa FlastStyle Ñònh kieåu daùng cuûa Button. Coù caùc thaønh vieân nhö

sau : Flat (coù veõ phaúng ) , Popup (Daïng phaúng cho ñeán khi controû dôøi teân noù vaø taïi ñieåm ñoù coù 3 chieàu) , Stander ( daïng ba chieàu gioáng nuùt nhaát bình thöôøng), System( daùng cuûa noù xaùc ñònh bôûi heä ñieàu haønh cuûa ngöôøi duøng).

Image/ BackgroundImage

AÛnh xuaát hieän beân trong Button/AÛnh neàn cuûa Button

ImageAlign Ñònh danh aûnh naèm beân naøo (canh leà) ImageIndex ImageList

Laøm vieäc chung vôùi nhau cho bieát chæ muïc lieät keâ aûnh cuûa aûnh xuaát hieän treân button töø list Image töông öùng

isDefault Cho bieát Button ngaàm ñònh hay khoâng textAlign Ñònh vò trí text trong Button ta duøng

CenterAlignment(coù caùc giaù trò : BottonCeNETr, ButtonLeft,ButtonRight,MiddleCeNETr...)

Xem ví duï 7.1 7.2.5. RadioButton vaø GroopBox control

Thoâng thöôøng RadioButton thöôøng ñöôïc duøng trong vieäc choïn moät thuoäc tính trong nhieàu thuoäc tính (RadioButtonGroup) ví duï : choïn giôùi tính, choïn hay khoâng moät tính chaát gì ño(CheckBox )ù...

7.2.6. ListBox control Duøng ñeå löïa choïn thuoäc tính naøo trong danh saùch ...

Caùc tính chaát cuûa ListBox Control Tính Chaát ListBox control

YÙ nghóa

SelectedIndex Chæ muïc hieän ñöôïc löïa choïn trong danh saùch. baèng �1 laø khoâng coù löïa choïn trong danh saùch naøo.

SelectedIndexs Taâäp caùc chæ muïc cuûa caùc muïc ñöôïc löïa choïn trong hoäp SelectedItem Giaù trò cuûa muïc ñöôïc choïn ,neáu khoâng coù traû giaù trò

null SelectionMode Ñieàu khieån soá löôïng muïc ñöôïc löïa choïn Sorted Neâu roõ coù saép xeáp hay khoâng

Page 129: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

126

TopIndex chæ muïïc ñaàu tieân xuaát hieän SelectedItems traû veà danh saùch caùc giaù trò cuûa muïc ñöôïc choïn ,neáu

khoâng coù traû giaù trò null ví duï7.2:

Laáy chæ muïc vaø noäi dung

7.2.7. ComboBox control

Gioáng nhö LiskBox laø cho pheùp ngöôøi duøng thöï hieän löïa choïn moät loaït khaû naêng ñöôïc ñònh nghóa. ngoaøi ra ConboBox cho pheùp ngöôøi duøng coù theå cheøn caùc muïc boå sung .

Caùc tính chaát cuûa ComboBox T/C ComboBox

Control YÙ nghóa

DroppedDown Neâu roõ phaàn thaû cuûa combo ñöôïc thaû hay khoâng MaxDropDownItems Neâu roõ soá löôïng toái ña caùc muïc ñöôïc thaû (1->100) MaxLength Chieàu daøi toái ña cuûa vaên baûn maø ngöôøi duøng goõ. SelectedIndex Chæ roõ chæ muïc ñöôïc chonï trong Combo, neáu

khoâng laø �1 SelectedItem neâu ñoái töôïng ñöôïc choïn trong danh saùch SelectedText Neâu roõ vaên baûn ñöôïc choïn SelectedLength Chieàu daøi vaên baûn ñöôïc choïn DropDownStyle Neâu roõ Combo.Giaù trò cuûa kieåu cuûa

ConboBoxStyle Text Giaù trò cuûa Combo hieän haønh

Page 130: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

127

ví duï 7.2:

7.2.8. TrackBar control TrackBar control cho pheùp ngöôøi duøng löïa choïn töø moät mieàn giaù trò, duøng cô cheá nhaäp gioáng nhö thanh cuoän. Theo nhieàu maët, veà chöùc naêng maät TrackBar cuõng gioáng nhö moät thanh cuoän truyeàn thoáng. Khi söû duïng noù trong chöông trình baïn caàn ñaùp öùng moät soá vieäc : - Phaïm vi toái thieåu, toái ña. - Caùc gia soá thay ñoåi toái ña , toái thieåu. - Vò trí baét ñaàu cuûa moùc tröôït(slider).

Caùc tính chaát chuû yeáu cuûa TracBar

Tính chaát cuûa TrackBar

YÙ Nghóa

LargeChange Soá löôïng nhòp (ticks) qua ñoù TrackBar thay ñoåi khi xaûy ra moät söï kieän ñöôïc xem laø moät thay ñoåi lôùn (ví duï : nhaép chuoät trong khi con troû naèm treân phaïm vi tröôït (sliding range) vaø duøng phím PageUp hoaëc PageDown).

Maximun Minnimun

Caáu hình caùc bieân beân phaûi(phía treân) beân phaûi(phía döôùi) cuûa thanh TrackBar

Orientation Höôùng cuûa TrackBar naøy. Caùc giaù trò hôïp leä laø töø kieåu ñieåm danh Orientaion (töùc laø ngang(Horizontal) hoaëc doïc(Vertical))

SmallChange Soá löôïng nhòp(ticks) qua ñoù TrackBar thay ñoåi khi xaûy ra moät söï kieän ñöôïc xem laø moät thay ñoåi nhoû (ví duï nhö : duøng caùc phím muõi teân).

TickFrequence Soá löôïng nhòp ñöôïc veõ trong khoaûng.

Page 131: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

128

Value Ñònh vò trí hieän haønh cuûa TrackBar.

Ví duï 7.3:

Phaàn laáy giaù thò vaø hieån thò maøu:

7.2.9. MonthCalender Control Coâng cuï naøy cho pheùp ngöôøi duøng löïa choïn ngaøy thaùng naêm (hoaëc phaïm vi nhgaøy thaùng) duøng moät giao dieän ngöôøi duøng thaân thieän

caùc tính chaát coát loõi cuûa Monthcalender Tính chaát yù nghóa

BoldedDates Maûng caùc ñoái töôïng DateTime xaùc ñònh ngaøy thaùng ñöôïc neâu ôû daïng in ñaäm

CalendarDimentions Soá löôïng caùc coät vaø caùc haøng cuûa caùc thaùng xuaát hieän trong MonthCalendar control

MaxDate Ngaøy thaùng toái ña coù theå löïa(Ngaàm ñònh khoâng coù ngaøy thaùng toái ña).

MaxSelectionCount Soá löôïng ngaøy toái ña coù theå löïa (Ngaâm ñònh khoâng coù ngaøy toái ña).

MinDate Soá löôïng ngaøy ñöôïc pheùp toái thieåu coù theå löïa.(Ngaàm

Private Sub UpdateColor() ' get the new color Dim c As Color = Color.FromArgb(tbred.Value, tbgreen.Value, tbblue.Value) ' change color in the picture colorBox.BackColor = c ' Set color lable lbht.Text = "Current color is :" & "(" & tbred.Value & ", " & tbgreen.Value & "," & tbblue.Value & ")" End Sub

Page 132: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

129

ñònh khoâng coù ngaøy toái thieåu). MonthlyBoderDates maûng caùc ñoái töôïng DateTimes xaùc ñònh caùc ngaøy

haøng thaùng in ñaäm. SelectionEnd Neâu roõ ngaøy cuoái cuûa phaïm vi caùc ngaøy ñaõ löïa choïn. SelectionRange Truy luïc phaïm vi löïa choïn cuûa moät MonthCalender

control SelectionStart neâu roõ ngaøy baét ñaàu cuûa phaïm vi ñaõ löïa choïn. ShowToday Hieån thò ngaøy hieän haønh ShowTodayCircle Hieå thò khoanh troøn ngaøy hieän haønh. ShowWeekNumber Neâu roõ MonthCalender control coù hieån thò soá tuaán (1-

52) veà beân traùi cuûa moãi haøng caùc ngaøy hay khoâng. TodayDate Ngaøy thaùng ñöôïc neâu döôùi daïng today trong

MonthCalender control. theo maëc ñònh. Today laø ngaøy thaùng hieän haønh vaøo luùc Monthcalender control ñöôïc taïo.

TodayDataSet Neâu roõ tính chaát TodayDate coù ñöôïc ngöôøi duøng aán ñònh töôøng minh hay khoâng. Neáu TodayDateSet laø True thì TodayDate traû veà baát kyø giaù trò naøo maø ngöôøi duøng ñaõ aán ñònh cho noù.

Ví du 7.4ï :

Khi ta muoán laáy ngaøy thaùng cuûa MonthCanlender control ta duøng tính chaát SelectStart. Tính chaát naøy kieåu traû veà laø DateTime ta duøng vaøi tính chaát cuûa noù ñeå thao taùc maø ta caàn.

Page 133: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

130

⇒ Sau ñaây coù moät vaøi tính chaát(thaønh vieân) cuûa DateTimes Thaønh phaàn cuûa

DateTime YÙ Nghóa

Date Thaùng/ngaøy/naêm maø bieán löu baèng giaù trò thôøi gian ñöôïc aán ñònh

Day Month Year

Trích ngaøy ,thaùng, naêm cuûa kieåu DatyeTime hieän haønh

DayOfWeek Cho bieát ngaøy ñoù laø ngaøy thöù maáy trong tuaàn Hour Minute Second Millisecond

Trích caùc chi tieát khaùc nhau lieân quan ñeán thôøi gian.

Now Today

Caùc thaønh vieân duøng chung naøy ñeå hieån thò kieåu DateTimes hieån thò ngaøy giôø hieän haønh(now hoaëc ngaøy (Today)

Ticks ñeám soá nhòp (tick count)100 nanogiaây ToLongdateString() ToLongTimeString() ToShortDateString() ToShortTimeString()

Chuyeån ñoåi caùc giaù trò hieän haønh thaønh cuûa kieåu DateTime thaønh kieåu chuoåi(String).

7.2.10. Caùc ñieàu khieån con chaïy : DomainUpDown vaø NumericUpDown

Windows Forms cung caáp hai coâng cuï vaän haønh nhö : caùc ñieàu khieån con chaïy (spin controls) hay coøn goïi laø caùc ñieàu khieån leân xuoáng (up/down control) . Gioáng nhö kieåu ComboBox, ListBox laø cuõng cho ta choïn moät muïc töø moät phaïm vi caùc löïa choïn khaû dó. Söï khaùc bieät ñoù laø khi duøng moät ñieàu khieån DomaiUpdown hoaëc NumericUpDown thoâng tin ñöôïc choïn baèng caëp nhoû caùc muõi teân leân xuoáng.(Xem hình ôû ví duï)

Hai coâng cuï teân phaùt sinh töø moät lôùp cô sôõ tröïc tieáp ñoù laø : UpDownBase vaø coù moät soá tính chaát quan troïng laø :

Tính chaát cuûa UpDownBase

YÙ Nghóa

InterceptArrowKeys Tìm hoaëc aán ñònh moät giaù trò neâu roõ ngöôøi duøng coù theå duøng caùc phím muõi teân leân , xuoáng ñeå löïa choïn giaù trò hay khoâng

ReadOnly Tìm hoaëc aán ñònh moät giaù trò neâu roõ vaên baûn chæ coù theå thay ñoåi baèng caùch duøng caùc muõi teân leân xuoáng

Page 134: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

131

chöù khoâng phaûi baèng caùch goõ vaøo control ñeå ñònh vò moät chuoãi ñaõ cho hay khoâng.

Text Tìm hoaëc aán ñònh giaù trò hieän haønh cuûa vaên baûn trong cotrol con chaïy

Text Align Tìm hoaëc aán ñònh caùch caên thaúng haøng cuûa vaên baûn trong con chaïy .

Updown Align Tìm hoaëc aán ñònh caùch caên thaúng haøng cuûa caùc muõi teân leân xuoáng teân control con chaïy, duøng tieåu ñaõ cho laø Left RightAlignment

Ñieàu khieån DomainUpDown boå sung moät soá tính chaát sau :

Tính chaát cuûa DomainUpDown

YÙ Nghóa

Items Cho pheùp truyeàn truy caäp loaït caùc kieåu löu tröõ trong control

SelectedIndex Traû veà vò trí cuûa muïc ñöôïc choïn SelectedItem Traû veà chính muïc löïa choïn (khoângphaûi chæ muïc cuûa

noù) Sort Saép xeáp caùc chuoãi theo thöù töï abc hay khoâng Wrap Ñieàu khieån xem söu taäp caùc muïc tieáp tuïc ñeán muïc

ñaàu hay cuoái neáu nguôøi duøng tieáp tuïc vuôït qua cuoái.

Coøn ñoái vôùi kieåu NumericUpDown coù moät soá tính chaát sau:

Tính chaát cuûa NummericUpdown

YÙ Nghóa

DecinalPlaces ThousandsSeparator Hexadecimal

Duøng ñeå caáu hình caùch xuaát hieän cuûa döõ lieäu soá

Increment AÁn ñònh trò soá cuûa gia soá trong control khi muõi teân leân xuoáng hoaëc nhaáp tôùi. Ngaàm ñònh noù laø 1

Minimum Maximum

Aán ñònh caùc giôùi haïn treân hoaëc xuoáng cuûa giaù trò trong control

Value Traû veà giaø trò hieän haønh trong control Ví duï 7.5:

Page 135: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

132

Vaø haøm nhaän giaù trò vaø chuoãi nhö sau:

7.2.11. Laøm vieäc vôùi caùc Ñieàu khieån Panel Nhö ta ñaõ bieát, ta coù theå duøng GroopBox ñeå nhoùm caùc control logic laïi

vôùi nhau (ví duï RadioButtons).Moät coâng cuï lieân quan chaët cheõ vôùi GroopBox ñoù laø Panel control. Caùc Panel cuõng duøng ñeå gom nhoùm caùc control höõu quan logíc laïi. Moät ñieåm khaùc bieät ñoù laø kieåu Panel phaùt sinh töø lôùp ScrollableControl do ñoù noù coù theå hoå trôï caùc thanh cuoän, trong khi moät GroopBox laïi khoâng theå. Moät ñieåm khaùc bieät tinh teá ñoù laø moät Panel khoâng hoã trôï phuï ñeà töï ñoäng (Khaùc vôùi moät GroopBox). Moät Panel coù theå laøm cho giao dieän thieát keá ít phöùc taïp hôn(chieám ít choã hôn neáu ta aán ñònh Panel tính chaát AutoScroll laø True ). ví duï : Caûi tieán laïi TrackBar (ví duï 7.6)

lbhienthi.Text = "Chuỗi chọn :" & DomainUpDown.Text & " Và số chọn : " & NumericUpDown.Value

Page 136: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

133

7.2.12. Laøm vieäc vôùi ToolTips � Gaùn caùc ToolTips cho caùc control

Chöùc naêng hoå trôï caùc oâ gôïi nhôù (tool tips) trong caùc control trong windows form. Coâng cuï naøy ñôn giaûn laø nhöõng cöûa soå troâi nhoû hieån thò moät thoâng ñieäp höõu ích khi controû di chuyeån treân muïc ñaõ cho .

Caùc tính chaát coát loõi cuûa ToolTip

Caùc thaønh vieân cuûa ToolTip

YÙ nghóa

Active Caáu hình xem oâ gôïi nhôù (tool Tip ) ñöôïc kích hoaït hay khoâng.

AutomaticDelay Tìm hoaêc aán ñònh thôøi gian (tính baèng miligiaây) troâi qua truôùc khi tooltrip xuaát hieän

AutoPopDelay Quaõng thôøi gian (tính baèng miligiay ) maø tooltip xuaát hieän khi con troû ñöùng yeân trong vuøng ToolTip . Giaù trò ngaám ñònh laø 10 laàn giaù trò tính chaát AutomaticDelay.

GetToolTip() Traû veà vaên baûn oâ gôïi nhôù ñöôïc gaùn vaøo 1 control cuï theå.

InitialDelay Quaõng thôøi gian (tính baèng miligiay ) maø con troû phaûi giöõ nguyeân baát ñoäng trong vuøng toolTip tröôùc khi vaên baûn ToolTip xuaát hieän . Ngaàm ñònh laø baèng tính chaát Automaticdelay.

SetToolTip() Keát hôïp moät oâ gôïi nhôù vôùi moät control cuï theå. ReshowDelay Chieàu daøi thôøi gian( tính baèng giaây ) maø noù ñeå caùc ví

duï ToolTip tieáp theo xuaát hieän khi con troû dôøi töø moät vuøng naøy sang moät vuøng khaùc. Ngaàm ñònh laø 1/5 giaù trò tính chaát AutomoticDelay.

Page 137: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

134

7.2.13. Anchoring (boû neo) Khi con taøu boû neo laø noù ñoã ôû ñoù. Duø con nöôùc chaûy theá naøo, con taøu vaãn

naèm yeân moät choã vì noù ñaõ ñöôïc coät vaøo caùi neo. Control trong .NET coù property Anchor ñeå ta chæ ñònh noù ñöôïc buoäc vaøo goùc naøo cuûa form: Left, Right, Bottom hay Top.

Trong luùc thieát keá, sau khi select caùi control (thí duï Button1), ta vaøo cöûa soã Properties vaø click hình tam giaùc nhoû beân phaûi property Anchor. Moät hình vuoâng vôùi boán thanh raùp laïi gioáng hình chöõ thaäp maøu traéng seõ hieän ra. Moãi thanh töôïng tröng cho moät goùc maø ta coù theå chæ ñònh ñeå coät control vaøo form. Khi ta click moät thanh, noù seõ ñoåi maøu thaønh xaùm ñaäm, vaø moät chöõ töông öùng vôùi thanh aáy sau naày seõ hieån thò trong textbox area cuûa combobox Anchor.

Thí duï 7.7 ta click vaøo thanh döôùi vaø hai thanh hai beân, ta seõ coù Bottom, Left, Right nhö trong hình döôùi ñaây:

Khi Button1 coù Anchor laø Bottom, Right thì moãi khi goùc phaûi döôùi cuûa form di chuyeån vì resize, Button1 cöù chaïy theo goùc aáy:

Page 138: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

135

Neáu Button1 coù Anchor laø Left, Right, Bottom thì khi form resizes cho lôùn ra, Button1 cöù giöõ khoaûng caùch töø noù ñeán ba caïnh Left, Right, Bottom cuûa form khoâng ñoåi. Do ñoù noù phaûi nôû roäng ra nhö trong hình döôùi ñaây:

Neáu Button1 coù Anchor laø Top,Bottom,Left, Right thì khi form resizes,

Button1 cöù giöõ khoaûng caùch töø noù ñeán boán caïnh Left, Right, Top, Bottom cuûa form khoâng ñoåi. Do ñoù noù phaûi nôû roäng hay thu nhoû caû chieàu cao laãn chieàu roäng nhö trong hình döôùi ñaây:

Vì property Anchor coù hieäu löïc laäp töùc ngay trong luùc ta thieát keá, neân neáu

baïn resize form trong luùc thieát keá, caùc control coù Anchor property set cuõng

Page 139: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

136

resize vaø di chuyeån theo. Coù theå baïn khoâng muoán chuyeän ñoù xaûy ra, neân toát nhaát laø set property Anchor cuûa caùc control sau khi thieát keá form xong heát roài.

7.2.14. Docking (gaén vaøo) Khi ta Dock moät control vaøo moät caïnh cuûa form coù nghóa laø ta daùn dính

noù vaøo caïnh ñoù. AÙp duïng ta thöôøng thaáy nhaát cuûa Docking laø ToolBar vaø StatusBar. ToolBar thì dock vaøo phía treân cuûa form, coøm StatusBar thì dock vaøo phía döôùi cuûa moät form. Chuùng daõn ra chieám töø traùi qua phaûi cuûa form, user khoâng theå chæ ñònh chieàu roäng cuûa chuùng. Khi form ñöôïc resized thì ToolBar vaø StatusBar cuõng daõn ra hay co vaøo theo chieàu roäng cuûa form.

Property Dock cuûa control trong .NET cuõng gioáng gioáng nhö property Align cuûa control trong VB6 StatusBar.

Ta chæ coù theå daùn moät control vaøo moät trong boán caïnh cuûa form, chôù khoâng coù chuyeän baét caû hai, ba tay nhö tröôøng hôïp Anchor coù theå neo vaøo Left, Right, Bottom cuøng moät luùc. Tuy nhieân, property Dock coù trò soá Fill ñeå noùi control chieám heát beân trong phaàn coøn laïi cuûa container cuûa noù.

Trong luùc thieát keá, sau khi select caùi control (thí duï Label1), ta vaøo cöûa soã Properties vaø click hình tam giaùc nhoû beân phaûi property Dock. Moät hình vuoâng nhieàu thanh maøu xaùm seõ hieän ra. Moãi thanh töôïng tröng cho moät caïnh maø ta coù theå chæ ñònh ñeå daùn control vaøo form (Top, Bottom, Left hay Right), caùi hình vuoâng ôû giöõa töôïng tröng cho trò soá Fill, vaø thanh döôùi choùt coù chöõ None cho pheùp ta xoùa khoâng choïn trò soá Dock naøo caû.. Khi ta click moät thanh, trò soá Docking töông öùng seõ hieån thò trong textbox area cuûa combobox Dock.

Page 140: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

137

Giaû söû ta set Property TextAlign cuûa Label laø MiddleCenter baèng caùch choïn caùi thanh xaùm naèm ngay giöõa trong soá 9 thanh töôïng tröng cho caùc vò trí cuûa Text coù theå naèm trong Label1 nhö trong hình döôùi ñaây:

Khi chaïy chöông trình vaø resize form cho lôùn ra, ta seõ thaáy Label1 daõn ra hai beân, nhöng khoâng heà taêng beà cao, vaø Text cuûa Label1 luoân luoân naèm ôû giöõa.

Neáu baïn tìm caùch dock nhieàu controls vaøo cuøng moät caïnh cuûa form thì

VB.NET phaûi quyeát ñònh control naøo naèm saùt caïnh aáy nhaát. Qui öôùc veà thöù töï laø ngöôïc laïi vôùi thöù töï trong z-order. Töùc laø trong z-order, control naøo naèm döôùi nhaát thì laïi ñöôïc dock tröôùc nhaát vaøo caïnh cuûa form. Do ñoù, neáu baïn dock

Page 141: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

138

hai controls vaøo moät caïnh, vaø muoán caùi control naèm xa caïnh ñöôïc dock tröôùc nhaát (töùc laø saùt caïnh nhaát) thì right click control aáy vaø choïn Send To Back.

Neáu baïn muoán chöøa moät khoaûng troáng giöõa control vaø caïnh cuûa container thì set Property DockPadding cuûa container. Töï tröôùc ñeán giôø ta duøng form ñeå ñaïi dieän container chöùa controls. Thaät ra container cuõng coù theå laø moät Panel. Baïn coù theå set Property DockPadding cuûa caùc caïnh cuûa container khaùc nhau baèng caùch click daáu + beân traùi chöõ DockPadding trong cöûa soå Properties ñeå môû ra caùc chi tieát nhö trong hình döôùi ñaây:

Baïn coù theå set taát caû Property DockPadding cuøng moät trò soá baèng caùch duøng All setting. ( xem ví duï 7.8)

7.2.15. Control Splitter Baây giôø baïn ñaõ hieåu roõ caùc ñaëc tính, söï khaùc bieät vaø caùch duøng hai

properties Anchor vaø Dock cuûa control, sau ñaây ta seõ aùp duïng kieán thöùc aáy vaøo vieäc thieát keá duøng Splitter trong moät form. Neáu coøn môùi vôùi Splitter baïn seõ deã bò böïc mình khi duøng noù. Do ñoù, baïn haõy thöû laøm theo caùc böôùc sau ñaây:

1. Taïo moät Application môùi, ñaët moät Panel leân phía traùi cuûa form chính ñeå noù chíeám beân traùi cuûa form baèng caùch set property Dock cuûa noù thaønh Left. Ta goïi Panel aáy laø Panel1.

2. Ñaët moät Splitter leân form (nhôù traùnh ñaët noù leân Panel1 vì Panel cuõng laø moät loaïi container neân coù theå chöùa Splitter ñöôïc). Splitter seõ töï ñoäng

Page 142: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

139

dock Left vaøo form töùc laø naèm beân phaûi Panel1. Choïn property BoderStyle cuûa Splitter1 laøm FixedSingle cho deã thaáy.

3. Ñaët moät button leân Panel1 vaø set property Anchor cuûa noù thaønh Top, Left, Right. Baây giôø form seõ gioáng nhö döôùi ñaây:

4. Keá ñoù, ñaët moät Panel leân beân phaûi cuûa form, goïi laø Panel2, vaø set

property Dock noù thaønh Fill. Coù nghóa laø ta muoán Panel2 chieám heát phaàn coøn laïi beân phaûi cuûa form.

5. Theâm vaøo trong Panel2 naày moät Button, goïi laø Button2, vaø set property Anchor cuûa noù thaønh Top, Left, Right.

Khi chaïy chöông trình, moãi laàn baïn naém Splitter keùo qua phaûi thì Button1 daõn ra vaø Button2 co laïi:

Page 143: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

140

Ngöôïc laïi, neáu baïn naém Splitter keùo qua traùi thì Button1 co ra vaø Button2 daõn laïi:

Trong thí duï naày ta ñeå yeân chieàu roäng cuûa Splitter, nhöng bình thöôøng ta laøm cho noù heïp hôn. Neáu Splitter heïp thì khoù thaáy, do ñoù baïn coù theå cho noù moät maøu ñoû röïc trong luùc thieát keá ñeå deã thaáy. Khi thieát keá xong heát roài, baïn ñoåi noù laïi thaønh moät maøu dòu hôn.

Neáu baây giôø baïn muoán chia Panel2 thaønh hai phaàn, ngaên caùch bôûi moät Horizontal Splitter thì sao? Ta cöù xem Panel2 nhö moät form vaäy, töùc laø caû hai

Page 144: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

141

ñeàu laø containers, loaïi control coù theå ñöïng nhieàu controls, vaø laäp laïi caùc böôùc sau:

1. Ñaët moät Panel leân phía treân cuûa Panel2, goïi noù laø Panel3 vaø set property Dock cuûa noù thaønh Top.

2. Ñaët moät Splitter leân Panel2 (nhôù traùnh ñaët noù leân Panel3), goïi noù laø Splitter2 vaø set property Dock cuûa noù cuõng thaønh Top. Resize Splitter2 cho noù deïp laïi vaø ñoåi property Backcolor thaønh ra ControlDark cho deã thaáy.

3. Ñaët moät Panel leân phía döôùi cuûa Panel2, goïi noù laø Panel4 vaø dôøi Button2 töø Panel2 qua Panel4 baèng caùch Cut and Paste.

4. Set property Dock cuûa Panel4 thaønh Fill. Baây giôø haõy chaïy chöông trình vaø naém keùo Splitter2 leân xuoáng.

Toùm laïi, muoán duøng control Splitter trong moät form hay panel ta ñaët moät PanelX vôùi Docking Left hay Top leân tröôùc, keá ñoù ñaët moät Splitter vôùi cuøng loaïi Docking vôùi PanelX, roài ñaët PanelY vôùi Docking Fill.

Page 145: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

142

Chöông 8

ADO.NET 8.1. ADO.NET laø gì ?

Moãi khi Microsoft tung ra moät phieân baûn cuûa heä ñieàu haønh môùi, coâng ty naøy thöôøng yeâu caàu baïn phaûi hoïc theâm moät soá coâng ngheä khaùc thay ñoåi gaàn nhö hoaøn toaøn so vôùi coâng ngheä cuõ. ADO.NET (teân chöa chính thöùc laø ADO+) phaûi chaêng laø moät moâ hình truy lieäu môùi hay chæ laø môû roäng moâ hình ADO tröôùc ñaây?. ADO vaø ADO.NET coù theå gioáng vaø cuõng coù theå khaùc nhau raát xa tuøy theo caùch nhình cuûa baïn. ADO.NET vaãn giöõ ñaëc tính deã duøng cuûa ADO nhöng kieán truùc cuûa ADO.NET thay ñoåi raát nhieàu (ví duï nhö höôùng phuïc vuï döõ lieäu cho caùc öùng Web).

Ñieåm noåi baät cuûa ADO.NET laø cô cheá raøng buoäc döõ lieäu (data binding)cho pheùp vieát maõ öùng duïng ñôn giaûn, taùch rôøi noäi dung taøi lieäu caàn theå hieän vaø maõ leänh cuûa chöông trình. Cô cheá raøng buoäc döõ lieäu naøy khoâng nhöõng laøm vieäc treân caùc heä cô sôõ döõ lieäu maø coøn laøm vieäc treân caùc ñoái töôïng COM/COM+. Khoâng chæ treân caùc thaønh phaàn ñoái töôïng OLE DB maø coøn coù theå aùp duïng treân moïi ñoái töôïng thaäm chí nhö XML.

8.1.1. Söï khaùc nhau giöõa ADO.NET vaø ADO coå ñieån: * ADO.NET noù laø khoâng ñôn giaûn laø moät phieân baûn môùi nhaát vaø lôùn

nhaát cuûa ADO coå ñieån.Tuy nhieân noù coù moät söï ñoái xöùng giöõûa hai heä thoáng (ví duï caû hai ñeàu coù ñoái töôïng �Connection�,� Command� �) Song beân caïnh ñoù coù moät soá kieåu quen thuoäc bò boû ñi ( Record set,..). Hôn nöõa coøn coù moät soá kieåu ADO.NET khoâng töông ñöông tröïc tieáp vôùi lôùp ADO coå ñieån.

* Coâng ngheä ADO.NET laø coâng ngheä truy caäp cô sôõ döõ lieäu môùi cuï theå höôùng vaøo vieäc taïo thuaän lôïi cho quaù trình phaùt trieån heä thoáng rôøi baèng neàn taûng .NET. Caùc öùng duïng (öùng duïng web) ñang ñöôïc nhanh choùng trôû thaønh quy maãu (normol).

* Khaùc vôùi ADO coå ñieån , chuû yeáu thieát keá cho caùc heä thoáng khaùch/phuïc vuï phoái hôïp chaët cheû. ADO.NET môû roäng ñaùng keå khaùi nieäm döõ lieäu rôøi vôùi moät vaät chöùa môùi DataSet(Kieåu naøy bieåu thò moät baûn sao cuïc boä cuûa baát kyø soá löôïng baûng höõa quan naøo).

* Moät ñieàu khaùc lôùn giöõa ADO coå ñieån vaø ADO.NET ñoù laø ADO.NET coù cô cheá hoå trôï ñaày ñuû cho phaàn bieåu thò döõ lieäu XML(vì XML ñöôïc chuyeå taûi giöõa caùc thaønh phaàn baêng thoâng HTML chuaån). Do ñoù ADO.NET khoâng bò giôùi haïn bôûi caùc haïn cheá cuûa böùc töôøng löûa.

Page 146: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

143

* ADO coå ñieån vaän duïng giao thöùc gom chuyeån COM ñeå dôøi döõ lieäu giöõa caùc taàng.Noù chæ thích hôïp cho moät soá tình huoáng song kyõ thuaät ñaët ra moät soá giôùi haïn( Cuï theå laø böùc töôøng löûa).

* Ñieåm khaùc cô baûn nhaát laø ADO coå ñieån vaø ADO.NET ñoù laø : ADO.NET laø moät thö vieän coù quaûn lyù. Caùc kieåu ADO.NET seû duøng giao thöùc quaûn lyù CLR(Common Language Runtime)tuaân thuû cuøng moâ hình laäp trình vaø laøm vieäc vôùi nhieàu ngoân ngöõ.

* Hoå trôï söï tieán hoaù internet, ADO.NET söû duïng döõ lieäu rôøi, cuïc boä vaø töø xa

8.1.2. Hoaït ñoäng toaøn caûnh cuûa ADO.NET (Xem qua caùc ví duï trong chöông 8)

Khi muoán söû duïng ADO.NET baïn phaûi khai baùo söû duïng moät soá khoâng gian teân (thö vieän -Namepace)nhö sau:

o Khi söû duïng ADO.NET ñeå truy xuaát döõ lieäu ta phaûi import moät soá lôùp sau :

Imports System.Data o Ñoái vôùi SQL server ta imports theâm

Imports System.Data.SqlClient coøn neáu söû duïng ASP.NET ta <% Import Namepace = �System.Data.SQL� %>

o Ñoái vôùi vieäc truy caäp moïi döõ lieäu (SQL server ,Microsoft acess, Oracle , � ) ta import theâm(theo kieåu OLE DB) :

Imports System.Data.OleDb coøn neáu söû duïng ASP.NET ta <% Import Namepace = �System.Data.ADO� %>

o Neáu söû duïng ñoái töôïng söû lyù döõ lieäu XML trong ASP.NET ta duøng: <% Import Namepace = �System.Data.XML� %>

o Neáu söû duïng caùc kieåu döõ lieäu trong ASP.NET ta duøng: <% Import Namepace =

�System.Data.SQLTypes� %> Taïi sao laïi söû duïng hai loaïi ñoái töôïng truy xuaát döõ lieäu laø System.Data.ADO (System.Data.OLEDB) vaø System.Data.SQL ?. Caû hai thö vieän naøy ñeàu cho pheùp truy xuaát döõ lieäu cuøng caùch. Tuy nhieân, System.Data.ADO ñöôïc duøng cho muïc ñích toång quaùt cho moïi loaïi cô sôõ döõ lieäu. Microsoft cung caáp cho baïn thö vieän System.Data.SQL laø moät caùch toái öu cuûa thö vieän System.Data.ADO. System.Data.SQL cho pheùp baïn truy xuaát döõ lieäu tröïc tieáp vaøo cô sôõ döõ lieäu SQL cuûa chính Microsoft maø khoâng caàn qua lôùp OLE DB trung gian cuûa moâ hình ADO.NET

Page 147: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

144

8.1.3. Phöông thöùc keát noái döõ lieäu cuûa ADO.NET • keát noái vôùi SQL Server

Ta duøng caùc ñoái töôïng SqlConnection, SqlCommand, SqlDataAdapter, and SqlDataReader .Trong ñoù :

+ SqlConnection ñeå keát noái vôùi SQL Server + SqlCommand laø nhöõng caâu query hoaëc nhöõng leänh maø ñöôïc thöïc thi ôû taïi cô sôõ döõ lieäu. + SqlDataAdapter duøng ñeå ñieàn vaøo taäp döõ lieäu SQL (SqlDataSet)töø moät döõ lieäu nguoàn. + SqlDataReader duøng ñeå ñoïc döõ lieäu .

Ví duï 8.1, 8.2, 8.3: Dim strConnection As String = _ �data source=(local);initial catalog=Northwind;persist security info=False;user id=admin;password = admin;packet size=4096� Dim cn As SqlConnection = New SqlConnection(strConnection) cn.Open( ) Trong ñoù :

Data Source :Teân server caàn keát noái, Data Source=localhost (Tröôøng hôïp server laø maùy cuïc boä ). Initial Catalog=Northwind : Teân cô sôû döõ lieäu Persist security info : quyeàn ñaêng nhaäp vaøo server. UserId : Taøi khoaûn treân Server Password : Password cuûa taøi khoaûn Packet Size : Kích thöôùc cuûa moät packet khi keát noái ñeán server hieän thôøi Khi keát thuùc vieäc truy caäp döõ lieäu ta goïi phöông thöùc close() cn.Close( )

• Keát noái vôùi Microsoft Access Ta duøng lôùp OleDbConnection ( naèm trong System.Data.OleDb.) ñeå keát noái

Ví duï 8.3: Dim strConnection As String = _

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & "C:\Program Files\Microsoft

Office\Office\Samples\Northwind.mdb" Dim cn As OleDbConnection = New OleDbConnection(strConnection) cn.Open( )

• Keát noái vôùi Oracle

Page 148: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

145

Ta duøng lôùp OleDbConnection ( naèm trong System.Data.OleDb.) ñeå keát noái

Ví duï : Dim strConnection As String = _

"Provider=MSDAORA.1;User ID=MyID;Password=MyPassword;" _

& "Data Source=MyDatabaseService.MyDomain.com" Dim cn As OleDbConnection = New OleDbConnection(strConnection)

cn.Open( ) 8.2. Moâ hình hoaït ñoäng cuûa ADO.NET

ADO.NET laø moät moâ hình truy xuaát döõ lieäu môùi. Caùc ñoái töôïng maø ADO.NET cung caáp cuõng coù moät soá raát gioáng vôùi caùc ñoái töôïng ADO coå ñieån. Nhöng haàu heát chuùng thay ñoåi vaø theâm moät soá tính naêng môùi toái öu.

Döôùi moâ hình ADO.NET , DataSet ñöôïc truyeàn thoâng qua moät trình cung caáp coù quaûn (manager), laø moät boä söu taäp caùc lôùp thöïc thi moät loaït giao dieän loõi ñöôïc ñònh nghóa trong Namepace System. Data cuï theå laø IDbAdapter, IDbCommand, IDbDataReader

Hình : caùc heä khaùch töông taùc vôùi trình cung caáp coù quaûn.

Heä khaùch(Client)

DataSet(rôøi)Trong boä nhôù

IDbDataAdapt IDbComman IDbDataReade

IDbConnecttio

Döõ lieäu ñöôïc truyeàn giöõacaùc taàng döôùi daïng XML

Trình cung caáp coù quaûn thöïcthi giao dieän naøy ñeå cung caáp khaû naêng truy caäp moät kho löu tröõ döõ lieäu cuï theå

Page 149: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

146

8.3. Kieán truùc cuûa ADO.NET Kieán truùc cuûa ADO.NET ñöôïc theå hieän qua baûng sau :

Namepace Moâ taû System.Data Laø Namespace coát loõi cuûa ADO.NET. Noù ñònh

nghóa caùc kieåu bieåu thò caùc baûng, caùc haøng , caùc coät caùc haïn cheá, vaø caùc DataSet. Namespace naøy khoâng ñònh nghiaõ caùc kieåu ñeå noái vôùi moät nguoàn döõ lieäu[DataSource]. Thay vì noù ñònh nghóa caùc kieåu bieåu thò ñònh nghóa caùc kieåu bieåu thò chính döõ lieäu.

System.Data.Common Namespace naøy chöùa caùc kieåu ñöôïc chia seõ giöõa caùc trình cung caáp coù quaûn. Nhieàu kieåu naøy vaän duïng vaän haønh nhö nhöõng lôùp cô sôõ ñoái vôùi caùc kieåu cuï theå ñöôïc ñònh nghóa bôûi caùc trình cung caáp coù quaûn OleDB vaø SqlClient.

System.Data.OleDB Namespace naøy ñònh nghóa caùc kieåu cho pheùp baïn noái vôùi moät nguoàn döõ lieäu tuaân thuû OLE DB, ñeä trình caùc truy vaán SQL , vaø ñieàn caùc DataSet. Caùc kieåu string khoâng gian teân naøy coù moät daùng veõ vaø caûm nhaän töông töï(nhöng khoâng ñoàng nhaát) nhö cuûa ADO coå ñieån.

System.Data.SqlClient Namespace naøy ñònh nghóa caùc kieåu taïo thaønh trình cung caáp coù quaûn SQL. Duøng caùc kieåu naøy, Baïn coù theå tieáp xuùc tröïc tieáp vôùi Microsoft SQL Server vaø traùnh caáp giaùn tieáp [indirection] khi duøng kieåu OleDB.

System.Data.SqlTypes Namespacce naøy bieåu thò caùc kieåu döõ lieäu baåm sinh ñöôïc duøng trong Microsoft SQL Server . Tuy baïn luoân coù toaøn quyeàn duøng caùc kieåu döõ lieäu CLR töông öùng, song caùc SqlType ñöôïc toái öu hoùa ñeå laøm vieäc vôùi SQl Server.

System.dat.ODBC Namespace laøm vieäc vôùi taát caû caùc driver ODBC , vaø muoán duøng thì ta phaûi download töø Microsoft.

Baûng : Coát loõi cuûa Namepace ADO.NET Taát caû Namespace ADO.NET naøy naèm trong moät taäp hôïp ñôn leû coù teân laø

System.Data.dll 8.4. Caùc kieåu cuûa khoâng gian (Namespace) System.Data

Caùc kieåu cuûa Namespace System.Data ñöôïc theå hieän qua baûng sau:

Page 150: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

147

Sau ñaây chuùng ta tìm hieåu cuï theå töøng kieåu cuûa system.Data 8.4.1. Kieåu DataSet

8.4.1.1 Vai troø cuûa DataSet

Caùc kieåu System.Data

YÙ nghóa

DataColumnCollection

DataColumCollection ñöôïc duøng ñeå bieåu thò taát caû caùc coät maø moät DataTable ñaõ cho söû duïng.

DataColumn DataColumn bieåu thò moät coät cuï theå trong moät DataTable

ContraintCollection ContraintCollection bieåu thò taát caû caùc haïn cheá (caùc haïn cheá khoùa laï[foreign key contrains] , caùc haïn cheá duy nhaát) ñöôïc gaùn cho moät DataTable ñaõ cho.

Constraint Constraint bieàu thò moät trình boïc OO [OO wrapper] quanh moät haïn cheá ñôn leû ñöôïc gaùn cho moät hoaëc nhieàu DataColumn

DataRowCollection DataRow

Caùc kieåu naøy bieåu thò moät söu taäp caùc haøng cho moät DataTable (DataRowCollection) vaø moät haøng döõ lieäu cuï theå trong moät DataTable (DataTableCollection)

DataRowView DataView

DataRowView cho pheùp baïn taïo ñöôïc moät kieåu xem ñònh saün töø moät haøng hieän coù. DataView bieåu thò moät kieåu xem ñaõ tuøy bieán cuûa moät DataTable coù theå ñöôïc duøng ñeå saép xeáp, loïc, tìm kieám vaø hieäu chænh, vaø ñieàu höôùng.

DataSet Bieåu thò moät cache döõ lieäu trong boä nhôù, coù theå bao goàm nhieàu DataTable höu quan.

ForneignKey Constraint UniqueConstraint

ForneignKey Constraint bieåu thò moät haïn cheá haønh ñoäng ñöôïc aùp ñaët treân moät loaït caùc coät trong moät quan heä cô sôõ döõ lieäu laø Khoùa chính vaø khoùa laï Kieåu UniqueConstraint bieåu tò moät haïn cheá treân moät loaït caùc coät ôû ñoù taát caû caùc giaù trò ñeàu phaûi laø duy nhaát.

DataRelationCollection DataRelation

Söu taäp naøy bieåu thò taát caû caùc moái quan heä (töùc laø kieåu DataRelation) giöõa caùc baûng trong moät DataSet.

DataTableCollection DataTable

DataTableCollection bieåu thò taát caû caùc baûng (töùc laø caùc kieåu DataTable) cho moät DataSet cuï theå.

Page 151: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

148

Haàu heát caùc truy caáp cô sôõ döõ lieäu maø ADO.NET cung caáp chæ traû veà moät DataSet ñaõ ñieàn, chöù khoâng phaûi laø moät DataTable(tìm hieåu kó ôû phaàn sau) rieâng leû.

Noùi ñôn giaûn, moät DataSet laø moät phaàn bieåu thò trong boä nhôù cuûa baát kyø soá löôïng baûng naøo (coù theå ñôn giaûn laø moä DataTable ñôn leû) cuõng nhö baát kyø moái quan heä (tuøy choïn) naøo giöõa caùc baûng naøy,� ,ñeå hieåu roõ ta xem moâ hình ñoái töôïng sau:

Hình : Moâ hình ñoái töôïng DataSet

DataSet

Relation

DataRelation

Table Collection

DataTable

DataRowCollection

DataRow

DataColumnCollection

DataColumn

ConstraintCollection

DefaultView

PrimaryKey

DataColumn

ChildRelations

DataRelation

ParentRelations

DataRelation DefaultView

Constraint

Page 152: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

149

DataSet cho pheùp truy caäp DataTableCollection chöùa caùc dataTable rieâng leû.

Ví duï veà ñieàn döõ lieäu vaøo DataSet: Dim strConnection As String = _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & "..\thuvien.mdb" cn = New OleDbConnection(strConnection) cn.Open() ' Set up a data set command object. Dim strSelect As String = "SELECT * FROM docgia" dscmd = New OleDbDataAdapter(strSelect, cn) ' Load a data set. ds = New DataSet() dscmd.Fill(ds, "dsdocgia") ' Close the connection. cn.Close()

* Ñeå ñieàn döõ lieäu vaøo ta phai keát noái vaøo côsôõ döõ lieäu -> thöïc hieän

keát noái nhôø OleDbDataApdapter(seõ tìm hieåu sau) -> ñieàn vaøo DataSet. 8.4.1.2 Caùc tính chaát cuûa DataSet

Caùc tính chaát cuûa DataSet cung caáp thöôøng taäp trung vaøo vieäc cung caáp khaû naêng truy caäp caùc söu taäp noäi boä, taïo caùc phaàn bieåu thò döõ lieäu XML vaø cung caáp thoâng tin veà chi tieát loãi ñöôïc theå hieän qua baûng sau:

Tính chaát DataSet yùnghóa CaseSensitive Neâu roõ caùc ñôït so saùnh chuoãi trong trong caùc ñoái

töïông DataTable coù phaân bieät chöõ hoa chöõ thöôøng hay khoâng

DataSetName Ñònh teân cuûa DataSet naøy. DefaultViewManager Thieát laäp moät kieåu xem döõ lieäu tuøy bieán trong

DataSet. EnforceConstraints Tìm hoaëc aán ñònh moät giaù trò neâu roõ coù theo caùc

quy taéc haïn cheá [Constraint rule]khi gaéng thöïc hieän khi caäp nhaät hay khoâng.

HasErrors Laáy moät giaù trò neâu roõ coù caùc loãi trong moïi haøng trong moïi baûng cuûa DataSet naøy hay khoâng.

Relations Laáy söu taäp coù quan heä [collection of Relation] noái keát caùc baûng vaø cho pheùp ñieàu höôùng töø caùc baûng cha ñeán caùc baûng con.

Tables Cung caáp khaû naêng truy caäp söu taäp caùc baûng maø

Page 153: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

150

DataSet duy trì.

8.4.1.3 Caùc phöông thöùc cuûa DataSet Ngoaøi caùc tính chaát treân DataSet coøn coù moät soá phöông thöùc nhö sau:

Phöông thöùc cuûa DataSet

YÙ nghóa

AcceptChanges() Ñoàng yù taát caû caùc thay ñoåi ñaõ thöïc hieän ñoái vôùi DataSet naøy keå töø khi noù ñöôïc naïp hoaëc AcceptChanges() ñöôïc goïi laàn choùt.

Clear() xoùa heát döõ lieäu DataSet baèng caùch gôõ boù moïi haøng trong moõi baûng.

Clone() nhaùi [clones] caáu truùc cuûa DataSet,bao goàm taát caû DataTable cuõng nhö taát caû caùc quan heä vaø moïi haïn cheá.

Copy() Cheùp caû caáu truùc döõ lieäu cuûa DataSet naøy. GetChanges() Traû veà moät baûn sao DataSet chöùa taát caû caùc thay

ñoåi ñaõ thöïc hieän ñoái vôùi noù keå töø khi naïp laàn choùt, hoaëc keå töø khi AcceptChanges() ñöôïc goïi.

GetChildRelation() Laáy söu taäp caùc quan heä con [childRelation ] thuoäc veà moät baûng ñaõ chæ ñònh.

GetParentRelation() Laáy söu taäp caùc quan heä cha [ParentRelation ] thuoäc veà moät baûng ñaõ chæ ñònh.

HasChanges() Ñöôïc quaù taûi, laáy moät giaù trò neâu roõ DataSet ñaõ thay ñoåi hay chöa , keå caû caùc haøng môùi , ñaõ xoùa, hoaëc ñaõ söûa ñoåi.

Merge() Ñöôïc quaù taûi. Hôïp nhaát DataSet naøy vôùi moät DataSet chæ ñònh.

ReadXml() ReadXmlSchema()

cho pheùp baïn ñoïc döõ lieäu XML töø moät luoàng hôïp leä (töø taäp tin ,boâ nhôù, hoaëc goác maïng) ra DataSet

RejectChanges() Ñaûo hoài taát caû moïi thay ñoåi ñaõ thöïc hòeân ñoái vôùi DataSet naøy keå töø khi noù ñöôïc taïo hoaëc laàn choùt DataSetAcceptChanges ñöôïc goïi.

WriteXml() WriteXmlSchema()

Cho pheùp baïn ghi caùc noâi dung cuûa moät DataSet ra moät luoàng hôïp leä.

Page 154: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

151

8.4.2. DataTable 8.4.2.1. Vai troø cuûa DataTable

DataTable laø moät phaàn bieåu thò trong boâ nhôù cuûa moät khoái döõ lieäu thao daïng tieâu bieåu. Tuy nhieân ta coù theå soïan moät table theo laäp trình, song thoâng thöôøng ta coù ñöôïc moät table töø DataSet vaø caùc kieåu ñònh nghóa trong caùc khoâng gian laøm vieäc nhö System.Data.OleDB hoaëc System.data.SqlClient. 8.4.2.2. Tính chaát cuûa DataTable

Caùc tính chaát cuûa DataTable ñöôïc theå hieän thoâng qua baûng sau:

Tính chaát cuûa DataTable

YÙ nghóa

CaseSensitive Neâu roõ cho pheùp so saùnh chuoåi trong baûng coù phaân bieät chöõ hoa hay chöõ thöôøng hay khoâng . Default laø false.

ChildRelations Traû veà söu taäp caùc quan heä con [DataRelationCollection] cuûa DataTable naøy neáu coù.

Columns Traû veà söu taäp caùc coät thuoäc veà baûng naøy. Constraints Laáy söu taäp caùc haïng cheá maø baûng duy trì

[ConstraintCollection] DataSet Laáy DataSet chöùa baûng naøy (neáu coù) DefaultView Laáy moät kieåu xem ñaõ tuøy bieán cuûa baûng , coù theå

goïp moät kieåu ñaõ loïc , hoaëc moät vò trí con troû. MinimunCapacity Xaùc ñònh soá löôïng haøng ban ñaàu cuûa baûng

naøy.(default laø 25) ParentRelations Laáy söu taäp caùc quan heä cha cuûa DataTable

naøy. PrimaryKey Xaùc ñònh moät maûng caùc coät vaän haønh nhö

nhöõng khoùa chính cho baûng döõ lieäu[data table] Rows Traû veà boä söu taäp caùc haøng thuoäc veà baûng naøy. TableName Aán ñònh teân baûng. cuøng tính chaát naøy cuõng coù

theå ñöôïc chæ ñònh laøm tham soá caáu töû. Caùc thaønh phaàn chính cuûa DataTable ñöôïc theå hieän ôû sô ñoà sau:

Page 155: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

152

8.4.2.3. Xaây döïng vaø thao taùc DataTable Ñeå xaây döïng ta laøm caùc böôùc sau ; o Khôûi taïo Table o Khoûi taïo caùc Columns(tìm hieåu sau) o Khôûi taïo caùc Rows(tìm hieåu sau) xem ví duï Sau: Ta taïo Table Car (ID,Make,Color) vôùi ID laø khoùa chính vaø giaù trò töï ñoäng taêng baäc laø 10 vaø giaù trò khôûi ñaàu laø 1000. 'ví du taïo Table bang lap trình ' Create a new DtaTable Dim tableCars As DataTable = New DataTable("Car") ' DataColumn var Dim Column As DataColumn ' Create ID column and add table Column = New DataColumn() Column.DataType = Type.GetType("system.Int32") Column.ColumnName = "ID" Column.ReadOnly = True Column.AllowDBNull = False Column.Unique = False ' Set the auto increment behavior Column.AutoIncrement = True Column.AutoIncrementSeed = 1000 Column.AutoIncrementStep = 10 tableCars.Columns.Add(Column) ' Create make Make column Column = New DataColumn() Column.DataType = Type.GetType("system.String") Column.ColumnName = "Make" tableCars.Columns.Add(Column) ' Create make color column Column = New DataColumn() Column.DataType = Type.GetType("system.String")

DataTable

DataRowCollection

DataRow

DataColumnCollection

DataColumn

ConstraintCollection

PrimaryKey

Constraint

Page 156: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

153

Column.ColumnName = "Color" tableCars.Columns.Add(Column) ' Make primary key in the Table Dim PK(0) As DataColumn PK(0) = tableCars.Columns("ID") tableCars.PrimaryKey = PK ' insert data into table Dim Row As DataRow Row = tableCars.NewRow Row("Make") = "Jeep" Row("color") = "White" tableCars.Rows.Add(Row)

o Xoùa moät haøng(row) trong table ta duøng leänh

tableCars.Rows(1000).Delete() tablesCars.AcceptChanges()

vôùi 1000 laø giaù trò ID cuûa coät ñoù 8.4.3. DataColumn

Kieåu DataColumn bieåu thò cho moät coät ñôn leû trong DataTable. Noùi chung taäp hôïp caùc kieåu DataColumn ñöôïc keát gaùn vôùi moät DataTable.

Caùc tính chaát loõi cuûa DataColumn nhö sau: Tính chaát

DataColumn YÙ nghóa

AllowDbNull Chæ ñònh coät coù giaù trò null hay khoâng. giaù trò default laø true

AutoInscrement AutoInscrementSeed AutoInscrementStep

AÁn ñònh töï auto soá cuûa moät coät ñaõ cho.Noù coù höõu ích nhaèm baûo ñaûm caùc giaù trò duy nhaát trong moät coät ñaõ cho (ví duï nhö khoùa chính) theo default khoâng hoã trôï gia taêng töï ñoäng. Gia taêng töø möùc naøo, baäc taêng laø bao nhieâu.

Caption AÁn ñònh teân theå hieän cuûa coät naøy( ví duï duøng theå hieän trong DataGrid cho ngöôøi duøng xem)

ColumnMapping Tính chaát naøy xaùc ñònh caùc bieåu thò moät DataColumn khi moät DataSet ñöôïc löu döôùi daïng moät tö lieäu Xml, duøng phöông phaùp DataSet.WriteXml()

ColumnName Teân cuûa coät trong söu taäp Columns trong DataTable.

DataType Ñònh nghiaõ kieåu döõ lieäu (Boolean , String , Integer ,..) ñöôïc löu tröõ trong coät.

DefaultValue AÁn ñònh giaù trò ngaàm ñònh cuûa Coät ñoù Expression AÁn ñònh bieåu thöùc duøng ñeå ñoïc haøng , tính toaùn

gía trò theo coät.

Page 157: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

154

Ordinal laáy vò trí soá cuûa coät trong söu taäp Columns maø DataTable duy trì

ReadOnly Xaùc ñònh coät naøy coù theå söûa ñoåi moät haøng boå sung vaøo hay khoâng. ngaàm ñònh laø false

Table Laáy DataTable chöùa DataColumn naøy Unique AÁn ñònh moät giaù trò neâu roõ caùc giaù trò trong moãi

haøng cuûa coät laø duy nhaát (khoâng ñöôïc laëp laïi). Xaây döïng moät column nhö sau (cuõng töø ví duï treân) ' Create a new DtaTable Dim tableCars As DataTable = New DataTable("Car") ' DataColumn var Dim Column As DataColumn ' Create ID column and add table Column = New DataColumn() Column.DataType = Type.GetType("system.Int32") Column.ColumnName = "ID" Column.ReadOnly = True Column.AllowDBNull = False Column.Unique = False

8.4.4. DataRow

Söu taäp DataRow bieåu thò döõ lieäu thöïc teá cuûa Baûng. Caùc thaønh vieân cuûa DataRow ñöôïc theå hieän baûng sau :

Thaønh vieân DataRow

YÙ nghóa

AcceptChanges() RejectChanges()

Ñoàng yù hoaëc loaïi boû taát caû caùc thay ñoåi ñaõ thöïc hieän cho haøng keå töø khi AcceptChanges() ñöôïc goïi laàn cuoái.

BeginEdit() EndEdit() CancleEdit()

Baét ñaàu keát thuùc hoaëc huûy caùc taùc vuï hieäu chænh treân moät ñoái töôïng DataRow.

Delete() Ñaùnh daáu moät haøng ñöôïc xoùa khi phöông thöùc AcceptChanges() ñöôïc goïi.

HasErrors GetColumnsInError() GetColumnError() ClearErors() RowError

HasError() traû veà giaù trò true/false khi moät coät coù loãi. GetColumnsInError() duøng ñeå bieát caùc thaønh vieân gaây loãi. GetColumnError() ñöôïc duøng ñeå moâ taû loãi. ClearErrors() gôõ boû baûng keâ loõi cho haøng. RowError cho pheùp chuùng ta ñònh nghóa loãi öùng

Page 158: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

155

vôùi moät haøng ñaõ cho IsNull() Neâu roõ coät ñaõ chæ ñònh coù mang giaù trò null hay

khoâng ItemArray AÁn ñònh moät haøng duøng moät maûng caùc ñoái

töôïng. RowState Xaùx ñònh traïng thaùi hieän haønh cuûa DataRow

(duøng caùc giaù trò ñieåm danh laø : Deleted[haøng ñaõ ñöôïc duøng Delete hay chöa], Modified[haøng ñaõ ñöôïc söûa ñoåi vaø AcceptChanges() hay chöa], New [Haøng ñaõ ñöôïc boå sung vaøo]�)

Table Duøng tính chaát naøy ñeå tham chieáu ñeán DataTable chöùa DataRow naøy.

8.5. Caùc kieåu cuûa khoâng gian (Namespace) System.Data.OleDb Khi caàn keát noái vôùi baát cöù moät nguoàn döõ lieäu ta duøng NameSpace System.Data.OleDb Caùc kieåu cuûa Namespace System.Data.OleDb

Caùc Kieåu System.Data.OleDb

YÙ nghóa

OleDbCommand Bieåu thò moät leänh truy vaán SQl ñöôïc thöï hieän ñoái vôùi moät nguoàn döõ lieäu.

OleDbConnection Bieåu thò moät tuyeán noái môû vôùi moät nguoàn döõ lieäu.

OleDbDataAdapter Bieåu thò moät loaït caùc leänh döõ lieäu [data commands] vaø moät tuyeán noái cô sôõ döõ lieäu duøng ñeå ñieån DataSet vaø caäp nhaät nguoàn döõ lieäu.

OleDbDataReader Cung caáp- moät caùch ñeå ñoïc moät luoàng chæ tieán tôùi goàm caùc record döõ lieäu [data records] töø moät nguoàn döõ lieäu.

OleDbErrorCollection OleDbError OleDbException

OleDbErrorCollection duy trì moät söu taäp caùc caûnh baùo hoaëc caùc loãi maø nguoàn döõ lieäu traû veà, moãi muïc ñöôïc bieåu thò bôûi moät kieåu OleDbError . Khi gaëp loãi moät ngoïai leä OleDbException ñöôïc kích phaùt.

OleDbPrameterCollection OleDbPrameter

Gioáng nhö ADO coå ñieån , söu taäp OleDbParameterCollection caàm giöõ caùc tham soá ñöôïc gôûi ñeán moät thuû tuïc löu saün [store procedure] löu giöõ caùc cô sôõ döõ lieäu. Moãi tham soá ñeåu thuoäc kieåu OleDbParameter

Page 159: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

156

Ñeå hieåu roõ, ta tìm hieåu chi tieát töøng kieåu cuûa Namespace System.Data.OleDb 8.5.1. OleDbConnection

OleDbConnection gioáng nhö kieåu Connection cuûa ADO coå ñieån, caùc kieåu OleDbConnection ñöôïc cung caáp bôûi moät chuoåi ñaõ ñònh daïng saün , ví duï nhö :

Dim strConnection As String = _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & "C:\Program Files\Microsoft

Office\Office\Samples\Northwind.mdb" Dim cn As OleDbConnection = New OleDbConnection(strConnection) cn.Open( )

Trong ñoù OleDb cung caáp moät soá provider nhö sau sau :

Caùc Provider YÙ nghóa Microsoft.JET.OLEDB.4.0 Duøng trình cung caáp keát noái Acess MSDAORA Duøng trình cung caáp keát noái Oracle SQLOLEDB Duøng trình cung caáp keát noái SQL

Server Beân caïnh ñoù OleDbConnection cung caáp moät soá thaønh vieân nhö sau:

Caùc thaønh vieân OleDbConnection

YÙ nghóa

BeginTransaction() CommitTransaction() RollBackTransaction()

Duøng ñeå baét ñaàu, thöïc hieän hoaøn thaønh hay trôû lui moät giao dòch theo laäp trình.

Close() Ñoùng tuyeán keát noái. (öa duøng). ConnectionString AÁn ñònh chuoåi duøng ñeå môû moät phieân

laøm vieäc vôùi kho döõ lieäu ConnectionTimeout Thôøi gian ñôïi trong khi thuyeát laäp moät

tuyeán noái tröôùc khi keát thuùc ñôït thöû vaø phaùt sinh moät loãi. Default laø 15 giaây

DataBase AÁn ñònh teân hieän haønh cuûa cô sôõ döõ lieäu Open() Môû moät tuyeán noái Cô sôû döõ lieäu vôùi caùc

xaùc laäp tính chaát hieän haønh Provider AÁn ñònh trình cung caáp State Laáy traïng thaùi hieän haønh cuûa tuyeán noái

Page 160: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

157

8.5.2. OleDbCommand OleDbCommand laø phaàn bieåu thò cuûa moät caâu truy vaán SQL , ñöôïc ñieàu

taùc baèng tính chaát baèng tính chaát CommandText. Caùc thaønh vieân cuûa OleDbCommand nhö baûng sau : (coát loõi)

Thaønh vieân cuûa

OleDbCommand YÙ nghóa

Cancle() Huûy luoàng thi haønh moät leänh CommandText AÁn ñònh caâu truy vaán(vaên baûn) hoaëc cuù phaùp cuï

theå theo trình cung caáp ñeå chaïy döïa treân nguoàn döõ lieäu

CommandType AÁn ñònh caùch dieãn dòch [interpret] tính chaát CommandText coù caùc kieåu nhö StoreProcedure, TableDirect,Text,�

Connection AÁn ñònh OleDbConnection ñöôïc duøng bôûi theå hieän [interface]cuûa OleDbCommand

ExcuteReader() Traû veà moät interface cuûa moät OleDbDataReader.

Parameters Laáy söu taäp OleDbparameterCollection. Prepare() Taïo moät phieân baûn coù chuaån bò (hoaëc ñaõ bieân

dòch) caâu leänh döa treân nguoàn döõ lieäu. Ví duï veà SqlCommand

'Tao mot cau lenh SQL command cach 1 Dim strSQl As String strSQl = "Select * from tableCars where Color = 'White'" Dim Command As OleDbCommand = New OleDbCommand(strSQl, cn) 'Tao mot cau lenh SQL command cach 2 Dim strSQl2 As String strSQl = "Select * from tableCars where Color = 'White'" Dim Command2 As OleDbCommand = New OleDbCommand() Command2.Connection = cn Command2.CommandText = strSQl2

8.5.3. OleDbDataReader

Sau khi thieát laäp tuyeán noái hoaït ñoäng vaø leänh SQL , böôùc keá tieáp laø ñeä trình leänh truy vaán cho nguoàn döõ lieäu. Coù vaøi caùch laøm nhö theá. Trong ñoù

Page 161: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

158

kieåu OleDbDataReader laø ñôn giaûn ,nhanh choùng coù theå ñöôïc töø nguoàn döõ lieäu. Lôùp naøy bieåu thò moät luoàng döõ lieäu chæ ñoïc , chæ tieán tôùi , ñöôïc traû veà moät laàn moät baûn tin [record] döôùi daïng moät keát quaû cuûa moät leänh SQL. OleDbDataReader cung caáp moät soá phöông thöùc nhö sau:

Caùc phöông thöùc cuûa OleDbDataReader

YÙnghóa

Read() Traû veà döõ lieäu truy vaán Close() Ñoùng phieân laøm vieäc cuûa

OleDBDataReader GetBoolean(),GetType(),� Laáy giaù trò cuûa coät FieldCount() Traû veà soá löôïng coät.

Ví duï : Dim cn As OleDbConnection = New OleDbConnection() cn.ConnectionString = "data source=(local);" & _ "initial catalog=Cars;persist security info=False;user id" & _ "=sa;workstation id=PROTSERVER;packet size=4096" Cn.open() Dim strSQl2 As String strSQl = "Select * from tableCars where Color = 'White'" Dim Command2 As OleDbCommand = New OleDbCommand() Command2.Connection = cn Command2.CommandText = strSQl2 Dim DataReader As OleDbDataReader DataReader = Command.ExecuteReader() ' Create loop over the result While (DataReader.Read()) Console.WriteLine("The Car{0}", DataReader("Make").ToString()) End While DataReader.Close() cn.Close()

8.5.4. OleDbParameter OleDbParameter laø thieát laäp caùc tham soá cho doøng cho leänh goïi. Tham soá

naøy cuï theå ñöôïc truyeàn cho (hoaëc nhaän töø ) thuû tuïc löu tröõ saün. Lôùp naøy cung coù moät soá tính chaát (coát loõi ) ñöôïc trình baøy ôû baûng sau ñaây:

Tinh chaát cuûa OleDbParameter

YÙ nghóa

DataType Thieát laäp kieåu tham soá theo daïng .NET

Page 162: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

159

DbType AÁn ñònh kieåu döõ lieäu baåm sinh töø nguoàn döõ lieäu , duøng ñeå ñieåm danh OleDBType

Direction AÁn ñònh tham soá laø chæ nhaäp , chæ xuaát, hai chieàu hay moät tham soá coù giaù trò traû veà

IsNullable AÁn ñònh xem tham soá coù chaáp nhaän giaù trò Null hay khoâng.

ParameterName AÁn ñònh teân cuûa OleDbParameter Precision AÁn ñònh soá löôïng toái ña caùc chöõ soá duøng bieåu thò

value. Scale aán ñònh soá löôïng vò trí thaäp phaân ñeå phaân giaûi

Value Size AÁn ñònh kích côõ tham soá toái ña cuûa döõ lieäu Value Tìm vaø aán ñònh giaù trò cuûa tham soá

Ví duï : Dim strSQl2 As String strSQl = "Select * from tableCars where Color = 'White'" Dim Command2 As OleDbCommand = New OleDbCommand() Command2.Connection = cn Command2.CommandText = strSQl2 ' Create parameter for tha call Dim Para As OleDbParameter = New OleDbParameter() ' input Para.ParameterName = "@ID" Para.OleDbType = OleDbType.Integer Para.Direction = ParameterDirection.Input Para.Value = 1 ' ID=1 Command2.Parameters.Add(Para) ' Out put Para = New OleDbParameter() Para.ParameterName = "@Make" Para.OleDbType = OleDbType.Char Para.Size = 20 Para.Direction = ParameterDirection.Output Command2.Parameters.Add(Para) ' Call and show Parameter Command2.ExecuteNonQuery() ' Display result Console.WriteLine("strored procedure info :") Console.WriteLine("CarID :{0}", command2.Parameters("@ID").Value

Page 163: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

160

Console.WriteLine("Make :{0}", command2.Parameters("@Make").Value

8.5.5. OleDbDataAdapter

Chuùng ta ñaõ bieát qua Tuyeán noái vôùi nguoàn döõ lieäu(OleDbConnection), Phaùt moät caâu leänh SQL (duøng OleDbCommand,OleDbParameter) vaø vieäc vôùi OleDbDataReader. Ñieàu naøy oån thoûa khi baïn muoán laëp laïi moät loâ döõ lieäu thaät nhanh hoaëc öùng taùc moät thuû tuïc löu saün.Tuy nhieân, caùch cô ñoäng nhaát ñeå coù ñöôïc moät DataSet hoaøn chænh töø kho döõ lieäu ñoù laø thoâng qua caùch duøng OleDbDataAdapter.

Toùm laïi, kieåu naøy keùo thoâng tin töø moät kho löu tröõ döõ lieäu, vaø ñieàn vaøo moät DataTable haøm chöùa trong moät DataSet, duøng phöông phaùp OleDbDataAdapter.fill().

OleDbDataAdapter khoâng chæ laø thöïc theå ñieàn caùc baûng cuûa moät DataSet nhaân danh baïn maø coøn chòu traùch nhieäm duy trì moät loaït caùc leänh Sql loõi duøng ñeå caùc chi tieát caäp nhaät trôû laïi kho löu tröõ.

Caùc thaønh vieân cuûa OleDbDataAdapter ñöôïc theå hieän qua baûng sau : Caùc Thaønh Vieân YÙ Nhgiaõ

DelateCommand InsertCommand UpdateCommand SelectCommand

Duøng ñeå thieát laäp caùc leänh SQL seõ ñöôïc phaùt ra cho kho löu tröõ döõ lieäu khi phöông thöùc Update() ñöôïc goïi. Moãi tính chaát naøy aán ñònh baèng moät kieåu OleDbCommand

Fill() Ñieàn moät baûng ñaõ cho trong DataSet baèng vaøi Records

GetFillParameters() Traû veà taát caû tham soá ñöôïc duøng ñeå thöïc hieän SelectUpDate() Goïi caùc leänh INSERT,UPDATE, vaø DELETE töông

öùng cho moãi haøng ñöôïc cheøn, ñöôïc caäp nhaät , hoaëc ñöôïc xoùa cuûa moät baûng ñaõ cho trong DataSet.

Ví duï : ' Step 1 Open Connection Dim cn As OleDbConnection = New OleDbConnection() cn.ConnectionString = "data source=(local);" & _ "initial catalog=Cars;persist security info=False;user id" & _ "=sa;workstation id=PROTSERVER;packet size=4096" cn.Open() ' Step 2 Create Select command Dim strSQl2 As String strSQl2 = "Select * from tableCars where Color = 'White'" Dim Command2 As OleDbCommand = New OleDbCommand() Command2.Connection = cn Command2.CommandText = strSQl2 'Step 3 Make a DataAdapter

Page 164: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

161

Dim DataAdapter As OleDbDataAdapter = New OleDbDataAdapter() DataAdapter.SelectCommand = Command2 ' Create and fill the dataSet Dim DataSet As DataSet = New DataSet("CarDataSet") Try DataAdapter.Fill(DataSet, "tableCars") Catch e As Exception Console.WriteLine(e.Message) End Try finally cn.Close()

8.6. Caùc kieåu cuûa khoâng gian (Namespace) System.Data.SqlClient

Rieâng ñoái vôùi SQL Server Microsoft cong caáp rieâng moät Namespace laø System.Data.SqlClient . Khi duøng Namspace naøy chuùng ta coù theå thao taùc tröïc tieáp vôùi cô sôõ döõ lieäu SQL maø khoâng qua moät trình trung gian naøo (nhö OleDb vaø OleDb cuõng khoâng hoå trôï nhieàu cho vieäc truy caäp döõ lieäu SQL nhö System.Data.sqlClient)

Caùc kieåu loõi cuûa Namespace system.Data.SqlClient theo baûng sau: Caùc Kieåu

System.Data.SqlClient YÙ nghóa

SqlCommand Bieåu thò moät leänh truy vaán Transact- SQL ñöôïc thöïc hieän ñoái vôùi nguoàn döõ lieäu SQL server.

SqlConnection Bieåu thò moät tuyeán noái môû vôùi nguoàn döõ lieäu SQL server.

SqlDataAdapter Bieåu thò moät loaït caùc leänh döõ lieäu [data commands] vaø moät tuyeán noái cô sôõ döõ lieäu duøng ñeå ñieån DataSet vaø caäp nhaät nguoàn döõ lieäu SQL server.

LoeDbDataReader Cung caáp moät caùch ñeå ñoïc moät luoàng chæ tieán tôùi[forward �only stream] goàm caùc record döõ lieäu [data records] töø nguoàn döõ lieäu SQL server.

SqlErrors SqlError SqlException

SqlErrors duy trì moät söu taäp caùc caûnh giaùc hoaëc caùc loãi maø nguoàn döõ lieäu SQL server traû veà, moãi muïc ñöôïc bieåu thò bôûi moät kieåu SQLError . Khi gaëp loãi moät ngoïai leä SQLException ñöôïc kích phaùt sinh.

SqlPrameterCollection SqlPrameter

SqlParameterCollection caàm giöõ caùc tham soá ñöôïc gôûi ñeán moät thuû tuïc löu saün [store procedure] löu giöõ caùc cô sôõ döõ lieäu. Moãi tham

Page 165: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

162

soá ñieàu thuoäc kieåu SqlParameter Tính chaát , thaønh phaàn caùc kieåu cuûa Namespace System.Data.SqlClient

gioáng nhö caùc kieåu namespace System.data.OleDb 8.7. Vaän duïng Wizards vaø duøng DataGrid

Ta coù caùch ñeå laøm vieäc vôùi DataSet vaø caùc Namspace OleDb vaø SqlClient baèng coâng cuï Wizards. Ñôn giaûn , ñôõ toán thôøi gian, vaø ít loãi. Caùc böôùc tieán haønh nhö sau: * Thieát laäp tuyeán noái döõ lieäu:

Duøng Server Explorer hoaëc duøng thanh ToolBox(phaàn Data) choïn SQLConnection

* Choïn ñöôøng daãn ñeánDataBase maø ta caàn(choïn New Connection)

hieän leân dialogDataLink

Page 166: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

163

* Ñieàn ñaày ñuû thoâng tin Choïn OleDbdataAdapter hay

SqldataAdapter hieän leân Wizard dialog

* Choïn tuyeán noái lick nuùt Next

Page 167: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

164

* Sau ñoù ta choïn kieåu cuûa Query

* Böôùc keá tieáp laø xaây döïng caâu leänh Sql thep yù mình (ta cuûng coù

theå xaây döïng baèng query builder)

Page 168: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

165

* Sau ñoù ta choïn Generate DataSet(beân döôùi Property hay click phaûi chuoäc leân OleDbDataAdapter)

* Ta duøng DataGrid ñeå theã hieän DataSet leân form chính

ta khai baùo DataGrid.DataSource= DataSet

Page 169: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

166

Page 170: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

167

Chöông 9

GIÔÙI THIEÄU ASP.NET (ASP+)

Caùc vaán ñeà chính : - Giôùi thieäu ASP.NET - Tìm hieåu Next Generation Web Service Framework - Cô sôû haï taàng cuûa caùc öùng duïng Web - Nhöõng khaùc bieät giöõa ASP.NET vaø ASP - ASP.NET caáu hình vaø phaân phoái öùng duïng. - Traïng thaùi cuûa bieán Session vaø Application trong ASP.NET - Xöû lyù loãi trong ASP.NET

9.1 Giôùi thieäu ASP.NET Maëc duø phieân baûn ASP 3.0 ra ñôøi caùch nay khoâng laâu, nhöng Microsoft ñaõ

noã löïc cho ra ñôøi moät coâng ngheä web xöû lyù phía maùy chuû hoaøn toaøn môùi ñoù laø ASP.NET (hay ASP + teân cuû ôû phieân baûn beta) . Trong chöông naøy chuùng ta seõ tìm hieåu caùc ñaëc tính môùi coù trong ASP.NET. Microsoft coøn goïi coâng ngheä môùi naøy vôùi moät teân khaùc nghe haáp daãn hôn ñoù laø �Dòch vuï Web theá heä keá tieáp � (Next Generation Web Service). Baïn seõ thaáy taïi sao chuùng ta laïi phaûi caàn ASP.NET trong töông lai. Chuùng ta seõ tìm hieåu caùch ASP.NET ñöôïc thieát keá vaø caøi ñaët. Nhöõng öu ñieåm noåi baäc cuûa ASP.NET so vôùi ASP trong kieán truùc hay boä khung laøm vieäc (framework) môùi treân neàn Windows.

ASP.NET ñöôïc thieát keá töông thích vôùi caùc phieân baûn tröôùc ñoù. Chuùng ta coù theå deã daøng chuyeån ñoåi caùc öùng duïng coù saün töø ASP sang ASP.NET maø khoâng caàn thay ñoåi nhieàu. Maëc duø ASP.NET laø phieân baûn môùi cuûa ASP nhöng chuùng ta coù theå caøi ñaët ASP.NET chung vôùi ASP 3.0 treân heä maùy chuû Windows 2000 maø khoâng sôï phieân baûn môùi seõ ñeø leân hay naâng caáp phieân baûn cuû. Khoâng caàn thay ñoåi caáu hình cuûa caùc öùng duïng ASP cuû. ASP.NET vaø ASP hoaït ñoäng ñoäc laäp vôùi nhau. ASP.NET ñöôïc caøi theâm vaøo trình chuû Web IIS nhö moät tuøy choïn hoaït ñoäng chung vôùi ASP.

9.2 Tìm hieåu boä khung web neàn theá heä keá tieáp NGWSF(Next Generation Web Service Framework).

9.2.1. Giôùi thieäu : Trong heä ñieàu haønh, bao goàm nhieàu ñoái töôïng hoaït ñoäng töông taùc laãn

nhau. Chöông trình cuûa chuùng ta cuõng laø moät ñoái töôïng. Microsoft goïi moâ hình naøy laø COM (component Object Model). Taát caû moïi thöù ñöôïc qui veà ñoái töôïng, phöông thöùc, thuoäc tính vaø caùc dòch vuï maø ñoái töôïng coù theå cung caáp. Phaùt trieån hôn nöõa Microsoft môõ roäng COM thaønh kieán truùc COM + cho pheùp

Page 171: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

168

caùc ñoái töôïng naøy giao tieáp vôùi nhau treân moïi neàn Window, töø 98, NT / 2000, maùy chuû (server), maùy khaùch (Client) ñaâu ñaâu cuõng laø caùc thaønh phaàn ñoái töôïng coù theå giao tieáp vaø trieäu goïi nhau nhau xuyeân suoát. Vôùi söï phaùt trieån maïnh cuûa Internet, Microsoft laïi moät laàn nöûa laïi ñöa kieán truùc COM + thaønh moâ hình ñoái töôïng cao hôn, aûnh höôûng ñeán toaøn boä heä ñieàu haønh. Kieán truùc môùi naøy mang teân laø NGWSF. Tuy mang teân laø Web nhöng thöïc teá kieán truùc naøy ñaõ aên saâu vaøo neân heä ñieàu haønh. NGWSF boå xung caùc dòch vuï môùi cho caùc ñoái töôïng öùng duïng phaân taùn COM+ bao goàm :

• Moät taäp caùc thö vieän laäp trình phong phuù vaø thoáng nhaát • Boä thöïc thi chöông trình ña ngoân ngöõ (multi-language runtime

engine) vaø baûo veä an toaøn maõ nguoàn thöïc thi • Ñôn giaûn hoùa quaù trình taïo laäp, phaân phoái vaø baûo trì öùng duïng. • Taêng tính meàm deûo vaø khaû chuyeån cho caùc öùng duïng phaân taùn. • Baûo veä caùc phaàn meàm hieän coù vaø giaûm ñaàu tö veà ñaøo taïo.

9.2.2. Tìm hieåu khung neàn NGWSF Vieäc tích hôïp ASP vaøo heä ñieàu haønh ôû phieân baûn ASP.NET laø ñieåm khaùc bieät raát quan troïng so vôùi caùc phieân baûn khaùc cuûa ASP tröôùc ñoù. Caùc phieân baûn ASP tröôùc ñaây (2.0 hay 3.0) chæ ñöôïc duøng vaø gaén vaøo nhö moät thaønh hoå trôï (add on). Tuy nhieân boä khung trong kieán truùc NGWSF ñaõ thay ñoåi hoaøn toaøn veà khaùi nieäm öùng duïng coâng ngheä thoâng tin treân neàn taûng InterNET. Neáu baïn ñaõ quen vôùi vieäc taïo, phaùt trieån vaø baûo trì caùc öùng duïng ôû moâi tröôøng cuû, baïn phaûi thay ñoåi caùch nhìn khi tieáp caän vôùi vôùi NGWSF. Kieán truùc NGWSF cho pheùp baïn hoaøn chænh moïi kieåu öùng duïng töø ñoùng goùi, phaùt trieån, kieåm tra caùc öùng duïng treân trình khaùch (client) cho ñeán caùc öùng duïng phöùc taïp treân trình chuû (server). Toaøn boä khaùi nieäm cuûa NGWSF laø moät phaàn döïa treân yù töôûng vaø neàn taûng cuûa kieán truùc �ÖÙng duïng Internet phaân taùn� (DNA � Distributed Internet Application).

Tuy nhieân, ñieàu quan troïng baïn caàn nhôù ñoù laø boä khung NGWSF khoâng ñôn thuaàn chæ daønh rieâng cho ASP.NET. Khung AGWSF naøy aûnh höôûng ñeán toaøn boä caùc chöông trình öùng duïng seõ chaïy trong töông lai. Hình XX_1 laø moâ hình cuûa boä khung thöïc thi (runtime framework) ñöôïc windows kieåm soaùt treân toaøn boä heä ñieàu haønh ñoái vôùi moïi öùng duïng maø trong ñoù ASP.NET chæ laø moät boä phaän.

Page 172: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

169

Trang ASP.NET

ASP.NET WebService

Caùc chöôngtrình Windowstruyeàn thoáng

Windows vaøcaùc dòch vuï cuûa heä ñieàu

haønh. Thaønh phaàn hoå trôïASP.NET

Boä khung vaø moâi tröôøng thöïc thi NGWSF

Haït nhaân heä ñieàu haønh Windows

Khung laøm vieäc NGWSF cung caáp boä maùy thöïc thi maõ leänh (execute engine ) cuøng vôùi taäp hôïp caùc lôùp hay thaønh phaàn höôùng ñoái töôïng coù theå söû duïng ñeå taïo neân öùng duïng. Boä khung naøy laøm vieäc nhö laø lôùp giao tieáp giöõa öùng duïng vaø haït nhaân cuûa heä ñieàu haønh. Baïn coù theå hoûi taïi sao laïi caàn moät lôùp trung gian nhö theá, trong khi öùng duïng theo truyeàn thoáng coù theå deå daøng noùi chuyeän vôùi tröïc tieáp vôùi haït nhaân vaø caùc dòch vuï cuûa heä ñieàu haønh. Nguyeân do laø taàng trung gian naøy seõ cho pheùp caùc öùng duïng söû duïng toát hôn caùc öu ñieåm cuûa heä ñieàu haønh, ñôn giaûn hoùa quaù trình phaùt trieån vaø phaân phoái öùng duïng trong moâi tröôøng thöông maïi ñaày caïnh tranh hieän nay. Ñeå ñaït ñöôïc ñieàu naøy, boä khung thöïc thi runtime cuûa NGWSF ñaõ caøi ñaët raát nhieàu ñaëc ñieåm maø laäp trình vieân hay moät ngoân ngöõ laäp trình cuï theå naøo ñoù phaûi töï caøi ñaët tröôùc ñaây. Boä khung naøy cung caáp caùc cô cheá nhö : töï ñoäng thu gom raùc boä nhôù (garbage collector), taäp caùc ñoái töôïng ñaày ñuû caùc chöùc naêng phuïc vuï cho caùc coâng vieäc laäp trình thoâng thöôøng nhaát. Taêng khaû naêng baûo maät vaø an toaøn cho öùng duïng. Chöùc naêng baûo maät sau cuøng raát quan troïng, nhaát laø ñoái vôùi caùc chöông trình môû roäng trieäu goïi thoâng maïng Internet nhö ngaøy nay. Neáu baïn laø laäp trình vieân Java, baïn seõ thaáy Microsoft ñang höôùng ñeán moâ hình maùy aûo töông töï Virtual machine cuûa Java ôû kieán truùc NGWSF naøy. 9.2.3. Ngoân ngöõ trung gian phoå duïng (common intermediate)

Moät trong nhöõng öu ñieåm noåi baäc nhaát cuûa boä khung thöïc thi cung caáp cho baïn ñoù laø �moâi tröôøng thöïc thi trung laäp veà ngoân ngöõ �. Taát caû caùc maõ leänh duø cho vieát baèng ngoân ngöõ ngöõ laäp trình naøo ñeàu döôïc bieân dòch thaønh ngoân ngöõ trung gian goïi laø IL (Intermediate Language). Boä khung thöïc thi seõ taïo ra maõ nhò phaân cuoái cuøng hình thaønh neân öùng duïng vaø ñieàu khieån maõ. Ñoái vôùi caùc trang ASP.NET, maõ nguoàn seõ ñöôïc dòch ra maõ IL vaø chæ coù maõ IL

Page 173: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

170

ñöôïc goïi thöïc thi. Khi maõ nguoàn thay ñoåi thì maõ IL seõ ñöôïc bieân dòch laïi. Caùc trang ASP.NET coøn löu giöõ trong vuøng ñeäm seõ bò huûy boû thay theá baèng caùc trang ASP.NE T vôùi maõ IL môùi.

Cho duø baïn söû duïng ngoân ngöõ laäp trình naøo Visual Basic, C#, Jscript, Perl � , maõ IL ñöôïc bieân dòch ra cuõng seõ nhö nhau. Chuùng laø maõ thöïc thi trong boä khung NGWSF. Trong taát caû caùc ngoân ngöõ C# laø ngoân ngöõ môùi cuûa Microsoft ñöôïc thieát keá ñaët bieät ñeå duøng cho boä khung NGWSF cuøng vôùi ASP.NET. Ngoân ngöõ ngöõ naøy keát hôïp söùc maïnh cuûa ngoân ngöõ C++ cuøng vôùi söï ñôn giaûn cuûa ngoân ngöõ Visual Basic vaø Jscript. Moät öu ñieåm khaùc nöõa laø baïn coù theå goïi maõ leänh cuûa moät ngoân ngöõ laäp trình hoaøn toaøn khaùc vôùi ngoân ngöõ laäp trình ñang ñöôïc vieát öùng duïng.Nghóa laø baïn coù theå taïo ra moät ñoái töôïng töø moät ngoân ngöõ trình, sau ñoù trieäu goïi hoaëc thay ñoåi töø moät ngoân ngöõ khaùc. Ví duï nhö baïn coù theå taïo ñoái töôïng töø ngoân ngöõ C# sau ñoù keá thöøa vaø taïo ra ñoái töôïng môùi töø ngoân ngöõ Visual Basic nhö theâm caùc thuoäc tính, phöông thöùc, overwrite caùc phöông thöùc hay thuoäc tính tröôùc ñoù. Roõ raøng boä khung thöïc thi ñaõ vaø ñang höôùng chuùng ta ñeán moâi tröôøng laäp trình ña ngoân ngöõ thuaàn thieát. Baïn coù theå taïo ra cuøng moät öùng duïng töø baát kyø ngoân ngöõ naøo. Keát quaû maõ nhò phaân cuûa chuùng laø nhö nhau. Ñaây laø moät ñieàu tuyeät vôøi ñoái vôùi haàu heát caùc nhaø phaùt trieån vaø phaân phoái öùng duïng trong moâi tröôøng Internet ña neàn nhö hieän nay.

9.3 Cô sôû haï taàng cuûa caùc öùng duïng Web Haï taàng cuûa caùc öùng duïng Web naèm trong moät phaàn cuûa kieán truùc .NET

NGWSF. Chuùng bao goàm caùc dòch vuï web vaø trang ASP.NET. Cuøng vôùi boä khung môùi cuûa boä thöïc thi öùng duïng .NET, caùc öùng duïng vaø dòch vuï Web ñöa ra nhöõng ñaëc ñieåm noåi baäc sau ñaây:

• Hoå trôï giao dieän ngöôøi duøng : Caùc thaønh phaàn ña naêng (rich control) laø moät phaàn trong caøi ñaët cuûa thö vieän ASP.NET. Nhöõng ñieàu khieån naøy giuùp ngöôøi duøng taïo ra caùc giao dieän web nhanh choùng vaø ñôn giaûn. Thaønh phaàn rich control chaïy treân server vaø coù khaû naêng taïo ra caùc maõ HTML 3.2 töông thích vôùi haàu heát caùc trình duyeät cuû.

• Hoå trôï truy xuaát cô sôû döõ lieäu Moâi tröôøng NGWSF cung caáp phieân baûn ADO.NET môøi cho ADO tröôùc ñaây. ADO.NET cho pheùp truy xuaát döõ lieäu baát keå khuoân daïng hoaëc vò trí döõ lieäu. ADO.NET thieát keá theo höôùng ñoái töôïng treân döõ lieäu quan heä, cho pheùp ruùt trích döõ lieäu töø caùc nguoàn khaùc nhau.

Page 174: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

171

ADO.NET taêng cöôøng khaû naêng hoå trôï döõ lieäu XML. Baïn coù theå taïo ra caùc taäp döõ lieäu töø XML löu tröõ vaø ñoùng goùi vaø truyeàn ñi treân maïng. Döõ lieäu XML coù theå ñoïc vaø hieåu ñöôïc raát nhieàu öùng duïng Internet.

• Khaû naêng môõ roäng daønh cho caùc öùng duïng phaân taùn Hai yeâu caàu thieát yeáu cuûa moät öùng duïng treân moâi tröôøng Internet laø heä ñieàu haønh neàn (flatform) phaûi vöõng chaéc vaø khaû naêng môû roäng treân moâi tröôøng truy xuaát lôùn cho pheùp xöû lyù ñoàng thôøi nhieàu keát noái. Moâi tröôøng thöïc thi NGWSF cung caáp caùc chöùc naêng töï ñoäng kieåm tra loãi vaø phaùt hieän nhöõng tröôøng hôïp quaù taûi. NGWSF seõ tìm caùch khôûi ñoäng vaø taùi taïo laïi nhöõng öùng duïng cuõng nhö caùc thaønh phaàn ñoái töôïng. Ñieàu naøy laøm giaûm thieåu caùc loãi nhö heä thoáng taøi nguyeân caïn kieät, keát noái taét ngheõn . . . Heä ñieàu haønh cung caáp dòch vuï môùi töï ñoäng thu doïn raùc (garbage collector), dòch vuï ñieàu phoái vaø laøm trung gian caùc lôøi goïi ñoái töôïng phaân taùn ôû xa, dòch vuï baûo maät vaø an toaøn trong caùc truy xuaát taøi nguyeân maïng. Taát caû caùc dòch vuï ñöôïc tích hôïp trong moät toång theå thoáng nhaát söû duïng cuõng nhö phaân boå taøi nguyeân moät caùch hôïp lyù.

• Töông thích vôùi caùc phaàn meàm hieän coù vaø giaûm chi phí ñaàu tö Maëc duø coù thay ñoåi lôùn trong heä ñieàu haønh vaø moâi tröôøng thöïc thi nhöng Windows vaãn chuù troïng ñeán tính töông thích vôùi caùc phieân baûn cuûa COM, DCOM. Haàu heát caùc öùng duïng söû duïng COM, DCOM, trang ASP, nhöõng kòch baûn hoaëc file thöïc thi ñeàu hoaït ñoäng trôn tru trong moâi tröôøng NGWSF.

9.4 Nhöõng khaùc bieät giöõa ASP.NET vaø ASP + Söï ñôn giaûn (Simplicity) :

ASP.NET thöïc hieän deã daøng caùc thao taùc thoâng thöôøng nhö : form submission, chöùng thöïc, caáu hình website, vaø trieån khai.

+ Caûi thieän khaû naêng trình baøy (Improved performance) : Bôûi vì ASP.NET ñöôïc dòch theo cô cheá CLR (Common Language

Runtime) neân noù coù nhöõng thuaän lôïi trong vieäc sôùm keát noái vôùi JIT do ñoù seõ coù nhöõng tín hieäu trình baøy qua vieäc bieân dòch tröôùc. Trong ASP, baïn haàu nhö phaûi vieát maõ chöông trình ñeå quaûn lyù moïi thöù. Baïn muoán quaûn lyù traïng thaùi cuûa caùc tröôøng hôïp nhaäp lieäu trong Form, nhö kieåm tra tính hôïp leä cuûa döõ lieäu, taêng toác trang ASP baèng caùch duøng vuøng ñeäm cache thì phaûi vieát maõ. ASP.NET thöïc söï laø moâ hình ñoái töôïng thaønh phaàn loaïi boû raát nhieàu coâng ñoaïn vieát maõ maø laäp trình vieân Web phaûi laøm. ASP.NET cung caáp caùc thaønh phaàn ñieàu khieån hoaït ñoäng phía trình chuû (server side control) hoaït ñoäng theo höôùng xöû lyù söï kieän. Baïn chæ caàn khai baùo caùc thaønh phaàn ñieàu khieån caàn söû duïng vaø trong haàu heát caùc tröôøng hôïp, baïn khoâng caàn thieát vieát theâm maõ leänh. Moïi vieäc kieåm soaùt traïng thaùi vaø töông

Page 175: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

172

taùc vôùi caùc thaønh phaàn ñieàu khieån ñeàu ñöôïc trình chuû Web server vôùi kieán truùc ASP.NET lo lieäu. Chuùng ta seõ tìm hieåu roû hôn trong caùc phaàn tôùi.

+ Ngoân ngöõ laäp trình maïnh meõ (Strong typed language) : ASP.NET söû duïng Visual Basic nhö ngoân ngöõ laäp trình. Trong khi ñoù

ASP söû duïng ngoân ngöõ VBScript hay JavaScript maø ñaây chæ laø ngoân ngöõ kòch baûn. ASP.NET hoå trôï kieåu Variant vaø nhieàu kieåu döõ lieäu khaùc nhau.

+ Moâ hình höôùng söï kieän (Event driven model) : Gioáng nhö Visual Basic ASP.NET hoå trôï moâ hình höôùng söï kieän.

ASP.NET hoå trôï caùc söï kieän Session vaø öùng duïng trong taäp tin Global.asax. ASP.NET theâm vaøo boán söï kieän, taäp tin Global.asax giôø ñaây hoå trôï hôn 12 söï kieän.

+ Nonspaghetti code : Moâ hình laäp trình trong ASP.NET phaân bieät maõ nguoàn vôùi nhöõng gì

hieån thò treân maøn hình, xaây döïng vaø quaûn lyù maõ nguoàn moät caùch deã daøng. ASP.NET cho pheùp taùch rôøi giöõa maõ laäp trình vaø maõ thieát keá.

+ Security : ASP.NET cung caáp söï caáp pheùp vaø chöùng thöïc caùc dòch vuï. ASP.NET

löu tröõ caùc thoâng tin ngöôøi duøng ôû database hay caùc file. Ngöôøi söû duïng coù theå ñöôïc caáp pheùp vaø chöùng thöïc khi söû duïng. Khi söû duïng 2 loaïi Cookies Authentication Module vaø URLAuthorization thì cookie seõ chöùa ñöïng nhöõng thoâng tin uûy quyeàn maø cookie seõ kieåm tra nhöõng yeâu caàu baát thöôøng. Baïn coù theå taän duïng caùc dòch vuï ñaêng nhaäp (login) tuøy bieán cho trang trang taøi lieäu ASP.NET theo phong caùch Web hoaëc theo cô cheá kieåm tra quyeàn cuûa heä thoáng baûo maät cuûa heä ñieàu haønh.

+ Configuration : ASP.NET söû duïng taäp tin XML ñeå löu tröõ caùc thoâng tin caáu hình. Vì theá

vieäc thay ñoåi caäp nhaät caùc thoâng tin caáu hình cho trang web deå daøng hôn. Trong ASP vieäc thay ñoåi caùc thoâng tin caáu hình phaûi leä thuoäc vaøo giao dieän IIS.

+ Web services : ASP.NET cung caáp moät dòch vuï môùi khoâng coù trong phieân baûn cuû , ñoù

laø dòch vuï Web (Web service). Ñaây laø caùch thöùc cho pheùp caùc trang ASP.NET trôû thaønh caùc ñoái töôïng phaân taùn phuïc vuï cho moi öùng duïng duïng Internet trieäu goïi töø xa. Moâ hình dòch vuï Web ngaøy caøng trôû neân phoå bieán vaø khoâng theå thieáu ñoái vôùi caùc öùng duïng web trong töông lai. Web service laø söï thay ñoåi vaø boå xung ñaùng giaù nhaát cuûa kieán truùc ASP.NET cuûa coâng ngheä Web.

+ Cache services :

Page 176: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

173

Ngaøy nay, theá giôùi ñaõ thay ñoåi nhanh choùng vôùi caùc thieát bò caàm tay nhö ñieän thoaïi, maùy Palm, TV coù keát noái Internet . . . Nhöõng thieát bò naøy ñeàu coù khaû naêng keát noái ñeán caùc maùy chuû phuïc vuï Web. Do ñoù coâng vieäc cuûa maùy chuû cuõng taêng leân raát nhieàu. Chaúng haïn ngoaøi vieäc xöû lyù trang HTML baïn coøn phaûi coù khaû naêng taïo ra caùc trang WML phuï vuï cho ñieän thoaïi di ñoäng, xöû lyù vaø trao ñoåi döõ lieäu XML. Nhöõng coâng vieäc naøy coù theå xöû lyù baèng ASP nhöng noù ñoøi hoûi phaûi coù theâm caùc heä thoáng thö vieän phuï vaø ñoøi hoûi quaù trình vieát maõ coâng phu. ASP.NET cho pheùp baïn ñöa ra ñöôïc nhöõng keát xuaát khaùc nhau.

+ Debugging : ASP.NET xaây döïng chöùc naêng kieåm soaùt loãi cho pheùp ngöôøi laäp trình

thöïc hieän vieäc kieåm soaùt loãi deå daøng nhö vieäc kieåm soaùt loãi trong laäp trình treân Window Forms. Ngöôøi laäp trình khoâng caàn phaûi duøng leänh Response.Write ñeå kieåm soaùt loãi nhö tröôùc ñaây.

+ Trieån khai (Deployment) : Trieån khai chæ ñôn giaûn laø vieäc cheùp caùc file. Taát caû caùc thoâng tin caáu

hình ñöôïc löu trong file XML. Hôn nöûa noù traùnh ñöôïc söï coá DLL Hell (ñaêng kyù component, version, DLL bò khoùa, . . . ) Baïn coù theå bieân dòch laïi thaønh moät component vaø trieån khai chuùng maø khoâng caàn phaûi khôûi ñoäng laïi server.

9.5 ASP.NET vaø dòch vuï Web. Cuøng vôùi söï ra ñôøi cuûa XML, coâng ngheä web ñaõ thay ñoåi raát nhieàu.

Ngaøy nay caùc öùng duïng Web caàn coù khaû naêng trieäu goïi laån nhau (öùng duïng phaân taùn) . ASP.NET cho pheùp xaây döïng caùc lôùp ñoái töôïng ngay beân trong trang ASP. Nhöõng ñoái töôïng naøy cung caáp moät dòch vuï naøo ñoù maø trình khaùch töø xa coù theå trieäu goïi. Trang ASP khoâng coøn laø moät trang web thoâng thöôøng. Baûn thaân noù trôû thaønh moät ñoái töôïng cung caáp dòch vuï web. Trình khaùch coù theå trieäu goïi caùc trang ASP thoâng qua giao thöùc SOAP (Simple Object Access Protocol). SOAP laø giao thöùc döïa treân HTTP vaø XML. SOAP cho pheùp baïn goïi thöïc thi vaø nhaän keát quaû traû veà cuûa ñoái töôïng döïa treân ñònh daïng döõ lieäu. XML thoâng duïng cuøng vôøi giao thöùc HTTP ñang söû duïng roäng raõi treân Internet. Ñoái töôïng vaø dòch vuï Web ñöôïc quaûn lyù bôûi kieán truùc haï taàng cuûa ASP.NET vaø COM+ trong Windows.

9.6 ASP.NET caáu hình vaø phaân phoái öùng duïng. 9.6.1. Taäp tin web.config. Trong ASP.NET toaøn boä thoâng tin caáu hình cuûa site ñöôïc ñaët trong file web.config. Ñaây thuaàn laø moät file text ñöôïc ñònh daïng theo kieåu XML coù theå deå daøng ñoïc cuõng nhö soaïn thaûo.

Page 177: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

174

Ví duï ta coù theå cöùng hoùa ñoaïn maõ keát noái vaøo file web.config nhö sau: sConnectionString = �Server = Localhost; Database = Northwind;� sConnectionString += �UID = sa; pwd = ;�

Vì Web.config laø file coù ñònh daïng theo kieåu XML neân baïn theâm ñoaïn maõ XML sau vaøo cuoái file Web.config. <appsettings> <add key =�DSN� value = �server = Localhost; Database=Northwind; UID=sa; pwd =;/> </appsettings> Ñeå ñoïc noäi dung caáu hình töø file naøy chuùng ta söû dung phöông thöùc GetConfig cuûa namespace Web.HttpContext. Ví duï sau seõ minh hoïa vieäc laáy noäi dung caáu hình vöøa löu ôû treân :

sConnectionString = Context.GetConfig(�appsettings�)(�DSN�)

Thoâng thöôøng file web.config löu tröõ taát caû caùc thoâng tin caáu hình cuûa öùng duïng nhö caùc thoâng tin quaûn lyù session, tracing options, baûo maät, . . . Baïn coù theå tìm thaáy file Web.config maëc ñònh trong thö muïc \WINNT\Microsoft.NET\Framework\version\CONFIG\Machine.config. config.web naèm trong thö muïc Program Files\COM20SDK. 9.6.2. Taäp tin global.aspx.

Ngoaøi taäp tin caáu hình web.config duøng toaøn boä cho öùng duïng trong site. ASP.NET coøn cung caáp cho baïn file caáu hình global.aspx töông tö nhö file global.asa trong ASP .Trong file global.aspx, baïn coù theå thieát laäp vaø caøi ñaët caùc phöông thöùc xöû lyù söï kieän nhö Application_OnStart, Application_End, Session_OnStart, Session_OnEnd. Global.aspx coøn cung caáp theâm caùc söï kieän phaùt sinh maø global.asa khoâng coù nhö Application_BeginRequest, Security_OnAuthenticate, � Vôùi global.asax, baïn coù theå ñaët caùc bieán khôûi taïo cho session hay Application töông töï nhö global.asa. Global löu tröõ caùc haøm, caùc bieán toaøn cuïc cuûa öùng duïng.

9.7 Traïng thaùi cuûa bieán Session vaø Application trong ASP.NET. Töông töï nhö caùc phieân baûn tröôùc , bieán Session vaø Application ñöôïc

duøng ñeå löu caùc bieán duøng chung cho caùc trang ASP.NET Bieán Application coù taùc duïng vaø aûnh höôûng ñeán taát caû caùc trang trong site vaø vaø suoát quaù trình ñoäng cuûa öùng duïng. Bieán Session chæ coù taùc duïng trong moät phieân laøm vieäc hay keát noái cuûa ngöôøi duøng vaøo Website cuûa baïn. Trong ASP.NET bieán Application vaø Session ñöôïc boå sung raát nhieàu ñaëc tính môùi.

Caùc bieán khai baùo thuoäc phaïm vi Session giôø ñaây coù theå hoaït ñoäng ñoäc laäp vôùi tieán trình thöïc thi caùc trang ASP.NET. Bieán Session ñöôïc quaûn lyù bôûi moät chöông trình dòch vuï rieâng goïi laø State Server. Baïn coù theå löu noäi dung

Page 178: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

175

cuûa bieán Session vaøo cô sôû döõ lieäu ñeå coù theå söû duïng laïi trong phieân laøm vieäc tieáp theo cuûa ngöôøi duøng. Khaû naêng naøy raát höõu duïng vaø haàu nhö giaûi quyeát ñöôïc caùc vöôùng maéc thöôøng gaëp phaûi veà quaûn lyù traïng thaùi. Ví duï caùc öùng duïng duïng Shopping card (theû mua haøng) coù theå löu giöõ thoâng tin mua haøng trong moät thôøi gian daøi. Ngay caû khi dieãn dòch ASP.NET cuûa baïn hoaëc dòch vuï Web bò döøng ñoät ngoät thì caùc Session cuõng baûo toaøn traïng thaùi cho laàn laàn khôûi ñoäng laïi cho laàn khôûi ñoäng sau ñoù. Trong phieân baûn ASP.NET laàn naøy, Microsoft cho pheùp baïn söû duïng bieán Session thay cho Cookie. Vôùi vaøi thieát laäp ñaëc vieät baïn coù theå ñöa maõ soá cuûa Session naøy leân tröïc tieáp ñòa chæ URL Caùc thoâng tin veà cookie ñöôïc maõ hoùa vaø truyeàn tröïc tieáp teân URL. Trình duyeät phía maùy khaùch khoâng caàn phaûi baän taâm ñeán vaán ñeà löu Cookie vaø loaïi boû nhöõng cookie khoâng an toaøn nöõa.

Cuoái cuøng trình quaûn lyù caùc bieán traïng thaùi State Server Process coù theå cho baïn xem toaøn boä noäi dung cuûa caùc bieán löu giöõ hieän haønh. Ñieàu naøy giuùp cho vieäc laäp trình vaø gôõ loãi dieãn ra deã daøng vaø nhanh choùng hôn.

9.8 Xöû lyù loãi trong ASP.NET. Trong phieân baûn môùi ASP.NET, Microsoft ñaõ ñöa ra coâng cuï gôõ loãi

hoaøn haûo maø trong caùc phieân baûn ASP tröôùc ñaây thöôøng thöïc hieän moät caùch khoù khaên vaø thuû coâng. Thöôøng thì laäp trình vieân phaûi duøng caùc leänh Response.write() hay Response.Redirect ñeå in noäi dung ra noäi dung caùc bieán hoaëc chuyeån höôùng caùc trang gaây loài ñeán moät trang khaùc. Baïn coù theå chæ ñònh moät trang cuï theå cho vieäc hieän thò caùc thoâng baùo loãi cho toaøn boä caùc trang trong Websie. Ví duï ñeå chæ thi trang thoâng baùo loãi myErrorPage.aspx thöïc hieän caùc thoâng tin baùo loãi khi coù moät loãi phaùt sinh baïn duøng trang page direct nhö sau :

%@Page ErrorPage = �/errorDir/myErrorPage.aspx�% Neáu caùc loãi nhö �Page Not Found�, �Access Forbiddent� hay �Internal

Server� phaùt sinh khi bieân dòch, dieãn dòch, naïp, truy xuaát trang, � thì trang xöû lyù loãi cuûa baïn seõ ñöôïc goïi. Trong trang myErrorPage coù theå laáy caùc thoâng tin loãi vaø thoâng baùo cho ngöôøi duøng moät caùch thaân thieän hôn. Baïn coù theå caáu hình trong file web.config ñeå haïn cheá caùc thoâng baùo loãi ôû trình khaùch. Ngoaøi ra baïn coù theå chaën caùc thoâng baùo loãi ôû möùc thaáp hôn baèng caùch caøi ñaët thuû tuïc xöû lyù cho caùc söï kieän HandleError.

Moät neùt môùi, VB.NET cung caáp theâm cuù phaùp try�.catch�..finaly. Ñaây laø cuù phaùp baåy loãi thoâng duïng trong C vaø Java. Baïn coù theå baät chöùc naêng laàn veát baèng chæ thò Trace ôû ñaàu trang. Taát caû caùc noäi dung vaø traïng thaùi bieán seõ ñöôïc hieän thò chi tieát beân döôùi trang keát xuaát chính caûu baïn. Baïn chæ caàn chæ thò laàn veát naøy ôû ñaàu trang hoaëc beân trong file caáu hình web.config cuûa baïn :

<%@Page Trace = �True�%> .

Page 179: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

176

9.9 Keát chöông Nhö vaäy chuùng ta ñaõ xem qua toång quan nhöõng ñaëc ñieåm cuûa ASP.NET

vaø nhöõng vaán ñeà thieát thöïc maø ASP.NET ñem lai. Chuùng ta seõ sang chöông keá tieáp ñeå xem caùch taïo moät trang Web baèng caùch söû duïng ngoân ngöõ ngöõ Visual Basic.NET.

Page 180: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

177

Chöông 10

CAÙCH TAÏO TRANG ASP.NET

Caùc vaán ñeà chính : - Giôùi thieäu Web Forms - So saùnh söï khaùc bieät giöõa Web forms vaø Windows forms - Caùc thaønh phaàn ñieàu khieån control. - Caùch taïo moät trang web

10.1. Giôùi thieäu Web Forms

Web forms laø moät phaàn cuûa ASP.NET cho pheùp ngöôøi duøng taïo caùc trang web thoâng qua trình phaùt trieån nhanh choùng öùng duïng cuûa Visual Basic. Web forms cuõng gioáng nhö Windows forms, noù cung caáp ña daïng caùc thaønh phaàn giao dieän, caùc maãu canh leà (layout) ña daïng cho caùc controls vaø khaû naêng laäp trình töông taùc (user interaction). Tuy nhieân Web controls coù moät soá giôùi haïng vì ñoù laø giôùi haïng chung cuûa moâ hình Web. Ví duï coù moät vaøi söï kieän ñöôïc tìm thaáy trong windows controls nhö caùc söï kieän chuoät thì khoâng theå thöïc hieän ñöôïc treân Web forms bôûi vì caùc söï kieän naøy ñoøi hoûi moät chi phí cao ñoái vôùi server. Vaû laïi, caùc controls naøy khoâng phaûi laø caùc Active X controls. Noù chæ toàn taïi treân server vaø phaùt sinh chuùng thaønh daïng chuaån HTML xuoáng client.

Moâi tröôøng phaùt trieån tích hôïp (Integrated Development Environment) daønh cho Web forms coù moät vaøi khaùc bieät vôùi Windows forms. Noù cung caáp 2 Tab cho ngöôøi duøng : Phaàn Design vaø phaàn HTML. Phaàn Design cho pheùp 2 löïa choïn ñeå thieát keá : grid layout vaø flow layout. Gird layout cho pheùp ngöôøi duøng thieát keá(keùo thaû vaø reâ) caùc control ñeán moät vò trí x,y mong muoán gioáng nhö trong windows forms. Ñaây laø caùch thieát keá quen thuoäc nhöng coù moät baát lôïi laø ngöôøi duøng coù theå khoâng thaáy ñöôïc taát caû caùc thaønh phaàn treân web Form. Flow layout cho pheùp ngöôøi duøng thieát keát caùc control theo daïng canh moät bieân naøo ñoù trong Web forms. Coù theå ñaây laø caùch khoâng quen vôùi nhöõng ngöôøi thöôøng thieát keá treân Windows forms nhöng noù seõ hieän thò ñuùng daïng thieát keá cho duø maøn hình cuûa ngöôøi duøng ôû cheá nhieàu cheá ñoä khaùc nhau. 10.2. So saùnh söï khaùc bieät giöõa Web forms vaø Windows forms

+ Giao dieän : Windows forms coù nhieàu thuaän lôïi hôn trong vieäc thieát keá. Noù döïa treân lôùp .NET window forms vaø graphics ñeå taïo ra moät giao dieän ña daïng (Rich user Interface). Ngöôïc laïi trong Web forms laïi ñoøi moät chi phí quaù cao trong vieäc nhaän vaø phaûn hoài moät töông taùc cuûa ngöôøi duøng.

Page 181: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

178

+ Baûo maät : Windows forms ñöôïc truy caäp hoaøn toaøn tröïc tieáp thoâng qua maùy tính cuïc boä coøn web forms thì ñöôïc Browser giôùi haïn quyeàn.

+ Heä thoáng neàn treân client (Client Flatform) : Taát caû caùc clients söû duïng windows forms ñeàu phaûi caàn .NET framework. Ngöôïc laïi Web forms chæ caàn Browser vì theá noù coù theå thích hôïp vôùi nhieàu loaïi Client flatform khaùc nhau.

+ Client Application : Caùc chöông trình söû duïng Windows forms caàn moät caáu hình cao hôn moät chöông trình töông töï khi söû duïng Web forms.

+ Keát xuaát (throughput) : Windows forms chaïy ôû phía client vì theá noù cho ra moät keát quaû phaûn hoài (ñaëc bieät laø heä thoáng thôøi gian thöïc) moät caùch nhanh choùng. Web forms döïa treân vieäc giao thoâng treân maïng thoâng qua giao thöùc HTTP vaø thoâng theà ñaùp öùng cho caùc heä thoáng söû duïng thôøi gian thöïc hay ñoøi hoûi moät keát xuaát ôû toác ñoä cao.

+ Trieån khai (Deployment) : Vì Windows forms chaïy treân maùy client neân noù phaûi ñöôïc caøi ñaët treân taát caû caùc maùy cuûa ngöôøi duøng. Khi soá löôïng ngöôøi duøng taêng coäng vôùi vieäc naâng caáp version cuûa chöông trình thì söï trieån khai trôû neân kinh khuûng. Trong khi ñoù Web forms khoâng caàn moät söï trieån khai naøo töø phía client. Clients ñoøi hoûi duy nhaát laø moät Browser ñeå hieän thò chuùng.

Treân ñaây baïn ñaõ thaáy ñöôïc söï khaùc bieät chình giöõ Windows Forms vaø Web Forms laø söï khaùc bieät giöõa chöông trình Client/ Server vaø Web Application. Bôûi vì Web forms söû duïng browser, moät client chung. Ñieàu naøy giuùp noù thaønh coâng trong vieäc höôùng tôùi moät löông ngöôøi duøng lôùn thoâng qua Intranet. 10.3. Sau ñaây chuùng ta seõ xem caùch taïo moät Web forms ñôn giaûn.

Web forms naøy khoâng chöùa web controls (seõ trình baøy trong phaàn tôùi). Ñeå taïo web forms, ñaàu tieân chuùng ta phaûi taïo moät Web Application.

o Ñeå taïo moät Visual Basic Web project ta vaøo menu File | New | Project | choïn ASP.NET Web Application. Maøn hình taïo Project môùi gioáng nhö hình veõ döôùi ñaây:

Page 182: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

179

,

o Thay ñoåi teân project maø baïn mong muoán. Neáu baïn söû duïng maùy cuïc boä nhö laø moät web server thì ta giöõ nguyeân ñöôøng daãn ñeán thö muïc http://localhost. Teân maø baïn ñaët cho project seõ laø teân moät thö muïc con cuûa thö muïc maëc ñònh cuûa wwwroot. Sau khi baïn project baïn seõ thaáy VB.NET taïo ra raát nhieàu file trong thö muïc Test (giaû söû teân project ñaëc laø Test) trong thö muïc wwwroot\Test. Trong cöûa soå Solution Explorer chuùng ta thaáy taïo ra raát nhieàu caùc taäp tin.

• Global.asax, Global.asax.vb, Global.asax : chöùa ñöïng caùc söï kieän cuûa Application vaø Session.

• Taäp tin Styles.css : chöùa ñöïng kieåu daùng HTML. • AssemblyInfo.vb chöùa caùc thoâng tin (Assembly) cuûa project nhö

version, teân cuûa project. • Web.config chöùa caùc thoâng tin veà caáu hình chi tieát cuûa project. • Test.vsdisco chöùa thoâng tin cuûa Web service cho pheùp theá giôùi beân

ngoaøi coù theå phaùt hieän caùc dòch vuï Web saün coù töø moät öùng duïng duïng web ñaõ cho.

• *.aspx, *.aspx.vb, *.aspx.resx : caùc taäp tin naøy taïo thaønh taäp maåu thôøi gain thieát keá vaø taäp tin Codebehind keát hôïp.

o Choïn cheá ñoä thieát keá cho Web forms trong hoäp thoaïi properties laø Flow layout hay Grid Layout.

Page 183: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

180

o Choïn Tab Design vaø goõ Hello World (chæ goõ ñöôïc khi choïn cheá Layout laø Flowlayout).

o Chuùng ta ñaõ taïo xong moät Web form ñôn giaûn. Tröôùc khi chaïy chöông trình baïn phaûi thieát ñaët trang baét ñaàu cho project. Ñeå laøm ñieàu ñoù, baïn phaûi chuoät treân treân Webform1.aspx trong cöûa soá Solution explorer, choïn Set As Start Page trong menu Popup. Baây giôø ta coù theå chaïy chöông trình baèng caùch nhaán F5 hay click bieåu töôïng start treân thanh toolbar. VS.NET seõ dòch vaø kích hoaït trình duyeät Internet Explorer. Baïn seõ thaáy chöõ �Hello World� treân Browser.

Hình 10.1

10.4. Caùch ñöa moät controls vaøo Web Forms Vieäc theâm caùc control trong Web forms gioáng nhö trong Windows forms.

Caùc control laøm vieäc theo moâ hình laäp trình höôùng söï kieän. Söï khaùc bieät duy nhaát giöõa Web forms vaø Windows forms laø vò trí cuûa caùc control treân web forms. Ngöôøi laäp trình coù theå chöa quen vôùi caùch thieát keá caùc control theo kieåu Flow Layout. Neáu caûm thaáy khoâng quen vôùi caùch thieát keá FLow Layout, ngöôøi laäp trình coù theå chuyeån sang daïng Grid Layout gioáng nhö thieát keá treân Windows forms. Ví duï theâm Web controls vaøo Web Form ' Taïo môùi moät project ' Trong Web form : choïn layout cho WebForm laø FlowLayout, taïo 2 label,

moät textbox vaø moät button. ' Thieát laäp caùc thuoäc tính cho label control chöùa döïng tieâu ñeà cuûa öùng duïng:

o Text : Customer Order Details o Font � Size : X � Large. o ID : lblCustomerOrder.

' Choïn lable thöù hai vaø thieát laäp caùc thuoäc tính nhö sau : o Text : Customer ID

Page 184: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

181

o ID : lblCustomerID ' Ñaët Textbox gaàn label thöù 2 vaø thieát laäp caùc thuoäc tính sau :

o Text : ��(Roãng) o ID : txtCustomerID

' Choïn button vaø thieát laäp thuoäc tính : o Text : Get Orders Details o ID : cmdGetDetails

Sau khi thieát keá Web form troâng gioáng nhö hình veõ :

Hình 10.2

Khi click vaøo nuùt chaúng thaáy vieäc gì xaûy ra. Vì chuùng ta chöa theâm moät doøng code naøo caû. Thaät sö khi click vaøo buttons, trình duyeät göûi moät yeâu caàu ñeán server vôùi toaøn boä döõ lieäu maø ngöôøi duøng ñaõ goõ vaøo textbox. Coù leõ baïn khoâng chuù yù ñeán tieán trình naøy vì söï phaûn hoài quaù nhanh. Tieán trình naøy goïi laø form submission. Sau ñaây chuùng ta seõ xem xeùt phaàn maõ maø chuùng ta vöøa thieát keá :

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="Test.WebForm1"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <title>WebForm1</title> <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0"> <meta name="CODE_LANGUAGE" content="Visual Basic 7.0"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body> <form id="Form1" method="post" runat="server">

Page 185: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

182

<P> <asp:Label ID="lblCustomerOrder" Runat="server" Font-Size="X-Large">Customer Order Details</asp:Label> </P> <P>

<asp:Label id="Label2" runat="server" Height="18px" Width="86px">Customer ID :</asp:Label>

<asp:TextBox id="txtCustomerID" runat="server" Height="21px" Width="131px"></asp:TextBox>

</P> <P> <asp:Button id="cmdGetCustomerID" runat="server" Width="112px" Height="22px" Text="Get Customer ID"></asp:Button> </P> </form> </body> </HTML>

Chuùng ta seõ tìm hieåu doøng ñaàu tieân cuûa ñoaïn maõ nguoàn. <%@Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="Test.WebForm1"%>.

Doøng maõ naøy thieát laäp moät soá ñaëc tröng veà trang hieän haønh, cho bieát ngoân ngöõ maø chuùng ta ñang söû duïng laø Visual Basic, keá thöøa töø Test.WebForm1. Töø khoùa CodeBehind : laø moät khaùi nieäm môùi maø ASP.NET ñöa ra nhaèm taùch rieâng ra 2 phaàn :phaàn maõ thieát keá vaø phaàn maõ laäp trình. Phaàn maõ laäp trình ñöôïc löu trong taäp tin WebForm1.aspx.vb Khi bieân dòch chöông trình VB.NET seõ bieân dòch taäp tin WebForm.aspx.vb thaønh DLL. Neáu baïn vaøo thö muïc . . �/Test/Bin baïn seõ thaáy taäp tin Test.DLL. DLL naøy chöùa namespace Test vaø taát caû caùc Webform cuûa baïn nhö laø moät lôùp trong namespace naøy. Kyû thuaät naøy giôùi haïn vieäc ñaëc truøng teân taäp tin trong Project maëc duø caùc taäp tin naøy naèm trong caùc thö muïc khaùc nhau. Kyû thuaät naøy goïi laø �Codebehind� bôûi vì phaàn maõ nguoàn naèm phía sau Form.

<form id="Form1" method="post" runat="server"> Khai baùo moät Form coù teân laø Form1, phöông thöùc hoaït ñoäng laø Post �göûi

ñi�. Runat = �server� : cho bieát ñaây laø web control naøy seõ hoaït ñoäng treân server vaø löu giöõ caùc traïng thaùi tröôùc ñoù cuûa control.

Phaàn keá tieáp laø laø phaàn khai baùo caùc lable, textbox vaø button : <asp:Label ID="lblCustomerOrder" Runat="server" Font-Size="X-Large">

Customer Order Details</asp:Label>

<asp:Lable> �.. </asp> : Ñaây laø lable control trong namespace ASP.NET. Taát caû caùc control trong

ASP.NET ñeàu naèm trong namespace ASP vaø coù töø khoùa runat. Taát caû caùc tag ñöôïc môû ñeàu phaûi ñöôïc ñoùng laïi. Bình thöôøng khi ngöôøi baïn môõ moät tag thì ASP.NET töï ñoäng phaùt sinh tag ñoùng laïi. Neáu khoâng coù tag ñoùng laïi ASP.NET töï ñoäng phaùt sinh loãi baèng caùch hieän nhöõng ñöôøng vieàn maøu ñoû taïi tag bò loãi. Taát caû

Page 186: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

183

caùc Web Forms Control ñeàu töï ñoäng phaùt sinh maõ HTML xuoáng Client. Vì theá neáu baïn xem source cuûa moät trang ASP.NET baïn seõ thaáy taát caû caùc tag ñeàu laø caùc tag HTML thuaàn thieát. Baây giôø chuùng ta seõ xem noäi dung cuûa ñoaïn HTML maø noù ñöôïc phaùt sinh töø Server.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <title>WebForm1</title> <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0"> <meta name="CODE_LANGUAGE" content="Visual Basic 7.0"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body> <form name="Form1" method="post" action="WebForm1.aspx" id="Form1"> <input type="hidden" name="__VIEWSTATE" value="dDwxMTQ4OTUzOTgwOzs+egy5E3GZTgoMkpXI8afOwEeqpPc=" /> <P> <span id="lblCustomerOrder" style="font-size:X-Large;">Customer Order Details</span> </P> <P> <span id="Label2" style="height:18px;width:86px;">Customer ID :</span> <input name="txtCustomerID" type="text" id="txtCustomerID" style="height:21px;width:131px;" /> </P> <P> <input type="submit" name="cmdGetCustomerID" value="Get Customer ID" id="cmdGetCustomerID" style="height:22px;width:112px;" /> </P> </form> </body> </HTML>

Trong phaàn ñoaïn maõ treân chuùng ta haõy xem ñoaïn maõ :

<form name="Form1" method="post" action="WebForm1.aspx" id="Form1"> Chuùng ta thaáy ñoaïn maõ treân coù action chính laø teân cuûa trang maø chuùng ta

vöøa truy caäp. Do ñoù noù seõ töï post ñeán chính baûn thaân noù. <form name="Form1" method="post" action="WebForm1.aspx" id="Form1"> <input type="hidden" name="__VIEWSTATE" value="dDwxMTQ4OTUzOTgwOzs+egy5E3GZTgoMkpXI8afOwEeqpPc=" />

Moät thaønh phaàn ñieàu khieån khaùc ñöôïc ASP.NET sinh ra vaø theâm vaøo Form laø oâ ñieàu khieån <input> mang traïng thaùi (HIDDEN). Teân cuûa thaønh phaàn naøy laø �_VIEWSTATE�.Ñaây laù daáu hieäu ñeå trình chuû nhaän bieát vaø quaûn lyù caùc traïng thaùi döõ lieäu cuûa trang. Moät trang coù theå trieäu goïi bôûi nhieàu Client khaùc nhau.

Page 187: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

184

Moãi keát noái laø moät phieân laûm vieäc Session . _VIEWSATE chính laø daáu hieäu nhaän daïng Session maø döõ lieäu trong trang chòu taùc ñoäng.

Sau ñaây chuùng ta seõ vieát moät caâu leänh ñôn giaûn. Khi ngöôøi duøng nhaán nuùt GetDetails thì TextBox se hieän leân doøng chöõ �Button is Clicked�

Ñeå caøi söï kieän naøy, chuùng ta nhaáp ñuùp vaøo nuùt GetDetails treân maøn hình thieát keá : thì laäp töùc seõ coù moät cöûa soå hieän ra ñaây chính laø cöûa soå chöùa taäp tin WebForm1.aspx.vb. Ta theâm ñoaïn maõ sau vaøo trong haøm cmdGetCustomerID_Click

Private Sub cmdGetCustomerID_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdGetCustomerID.Click txtCustomerID.Text = "Button is Clicked" End Sub

Bieân dòch chöông trình, click choïn button. Baïn seõ thaáy doøng chöõ �Button is Clicked� treân TextBox

Phaàn maõ nguoàn coù theå tham khaûo trong thö muïc Code/Chöông 10. 10.5. Caùc thaønh phaàn ñieåu khieån trong ASP.NET

ASP.NET coù taát caû 4 loaïi thaønh phaàn ñieàu khieån (control) maø baïn caàn phaân bieät ñoù laø :

) Ñieåu khieån noäi taïi (Instrinsic control) : Caùc ñieàu khieån naøy seõ taïo ra nhöõng phaàn töû theo kieåu HTML phía trình khaùch. BaÏn coù theå döïa vaøo ñieàu khieån noäi taïi ñeå taïo ra caùc phaàn töû HTML thoâng minh coù khaû naêng quaûn lyù trang thaùi cuûa chính noù hoaëc nhöõng phaàn töû chæ thuaàn HTML khoâng caàn quaûn lyù traïng thaùi.

) Ñieàu khieån danh saùch (List control) : Thaønh phaàn ñieàu khieån naøy cho pheùp baïn hieån thò moãi loaïi döõ lieäu theo kieåu danh saùch. Ví duï nhöng baûng döõ lieäu, khung nhìn , lieät keâ �Söû duïng ListControl ñeå hieän thò vaø saép xeáp döõ lieäu theo caùch ñôn giaûn vaø ít phaûi vieát maõ leänh nhaát.

) Ñieàu khieån ña naêng (rich control) : Nhöõng ñieàu khieån ña naêng treân server seõ sinh ra maõ laø toå hôïp cuûa nhieàu phaàn töû HTML, ñoâi khi keøm theo maõ ñieàu khieån JavaScript ñeå chaïy phía trình khaùch. Rich control cung caáp nhieàu giao dieän baét maét vaø ñoäc ñaùo. Ví duï nhö ñoái töôïng calender laø moät thaønh phaàn ñieàu khieån ña naêng rich control. Tuøy theo trình duyeät phía maùy khaùch maø maõ HTML vaø JavaScript do rich control sinh ra seõ trôû neân töông thích.

) Ñieàu khieån kieåm tra (validate control) : Caùc ñieàu khieån naøy hoaït ñoäng haäu caûnh caû hai phía trình khaùch (client) vaø trình chuû (server).

Page 188: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

185

Muïc ñích cuûa thaønh phaàn ñieåu khieån laø cho pheùp kieåm tra khuoân daïng cuûa döõ lieäu nhaäp vaøo tröôùc khi trình duyeät gôûi ñi hoaëc trình chuû ñöa döõ lieäu veà trình khaùch.

Taát caû caùc thaønh phaàn ñieàu khieån naøy ñeàu sinh ra maõ HTML töông thích vôùi haàu heát caùc trình duyeät ASP.NET tuyeät ñoái khoâng söû duïng caùc Active X hay Applet ñaëc bieät ñeå sinh maõ cho trang taøi lieäu phía trình khaùch.

10.5.1. Ñieàu khieån noäi taïi (intrinsic control) Caùc ñieàu khieån noäi taïi coù khaû naêng quaûn lyù traïng thaùi (giöõ laïi noäi

dung döõ lieäu sau moãi voøng giao tieáp khaùch chuû � coøn goïi laø round trip) vaø xöû lyù caùc söï kieän phaùt sinh. Chính thöùc caùc phaàn töû HTML sau ñöôïc xem laø caùc thaønh phaàn ñieàu khieån noäi taïi trong ASP.NET.

<table> <tr> <th> <td> <form> <input> <select> <textarear> <button> <a> <image>

Taát caû caùc phaàn töû HTML coøn laïi khaùc neáu ñaëc thuoäc tính laø runat=�server� thì seõ ñöôïc kieåm soaùt bôûi moät ñieàu khieån noäi taïi HTML duy nhaát.

Trang ASP.NET coù theå söû duïng caùc thaønh phaàn ñieàu khieån noäi taïi khaùc ñöôïc ñònh nghóa vôùi tieáp ñaàu ngöõ �asp�. Caùc ñieàu khieån naøy chæ chaïy treân trình chuû (vôùi thuoäc tính runat = �server�) . Chuùng cung caáp caùc thuoäc tính vaø phöông thöùc töông töï nhö caùc ñieàu khieån noäi taïi HTML chuaån. Khi dieãn dòch keát quaû traû veà trình khaùch, nhöõng thaønh phaàn ñieàu khieån vôùi tieáp ñaàu ngöõ �asp� naøy seõ ñöôïc aùnh xaï chính xaùc vaøo töøng phaàn töû HTML töông öùng. Ví duï, ñeå taïo ñoái töôïng ListBox chuùng ta coù theå söû duïng ñieàu khieån noäi taïi �asp� nhö sau :

<asp:List Box visibleitems = �3� runat = �server� > <asp:ListItem>Window 95 </asp:ListItem> <asp:ListItem>Window 98 </asp:ListItem> <asp:ListItem>Window NT </asp:ListItem> <asp:ListItem>Window 2000</asp:ListItem> <asp:ListBox>

Khi thöïc thi ASP.NET seõ dieãn dòch vaø göûi maõ HTML veà trình khaùch nhö sau :

<Select name = �ListBox0� size = �3�>

Page 189: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

186

<option>Windows 95 </option> <option>Windows 98 </option> <option>Windows NT </option> <option>Windows 2000 </option> </Select>

Caùc ñieàu khieån �asp� laøm cho maõ nguoàn roõ raøng hôn. Ví duï trong

HTML baïn coù theå duøng cuøng moät phaàn töû <input> ñeå theå hieän raát nhieàu kieåu nhö <input type = checkbox>, <input type = radio>, <input type = text>. Trong khi ñoù ñieàu khieån �asp� phaân bieät <asp:Radio>,<asp:ChechBox>, <asp:TextBox>. Keát quaû maø caùc thaønh phaàn ñieàu khieån �asp� sinh ra cuoái cuøng vaãn aùnh xaï töông öùng vaøo caùc phaàn töû HTML. Döôùi ñaây laø caùc danh saùch caùc ñieàu khieån �asp �vaø HTML töông ñöông nhau.

ASP.NET Keát xuaát HTML

<asp:Button> <input type = �submit�> <asp:LinkButton> <ahref �javascript:doPostBack()>�..</a> <asp:HyperLink> <a href = ��.�>�.</a> <asp:TextBox> <input type = �text�, value = ���> <asp:RadioButton> <input type = �radio�> <asp:CheckBox> <input type = �checkbox> <asp:DropDownList> <select>� </select> <asp:ListBox> <select size = ���>�</select> <asp:Image> <image source = ���> <asp:Lable> <span> �</span> <asp:Panel> <div></div> <asp:Table> <table>. . . </table> <asp:TableRow> <tr>�</tr> <asp:TableCell> <td>�</td>

Söû duïng theo phong caùch naøo laø tuøy thuoäc vaøo baïn. Neáu baïn muoán

duøng HTML baïn seõ khoâng khai khaùc heát khaû naêng cuûa moâi tröôøng vaø caùc thaønh phaàn ñieàu khieån coù trong ASP.NET. 10.5.2. Ñieåu khieån danh saùch (Listcontrol)

ASP.NET cung caáp cho chuùng ta caùc thaønh phaàn ñieàu khieån danh saùch giuùp giaûm thieàu coâng vieäc laäp trình thuû coâng vaø toán nhieàu coâng söùc nhö tröôùc ñaây chæ ñeå taïo danh saùch. Caùc thaønh phaàn ñieàu khieån danh saùch

Page 190: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

187

hoaït ñoäng treân server vaø sinh maõ HTML veà trình khaùch Coù 3 loaïi thaønh phaàn danh saùch ñieàu khieån chuaån : Repeater, DataList vaø DataGrid.

Ñieàu khieån Repeater laø thaønh phaàn ñôn giaûn nhaát cho pheùp baïn keát xuaát nhöõng noäi dung laäp ñi laäp laïi coù cuøng thuoäc tính maøu saéc font chöõ, ñònh daïng.

DataList töông töï nhö Repeater nhöng cho pheùp baïn theâm vaøo caùc phaàn töû HTML khaùc ñeå bieåu dieãn cho döõ lieäu laëp laïi.

DataGrid laø khung löôùi hay baûng duøng trình baøy döõ lieäu theo daïng haøng vaø coät. Baïn coù theå duøng DataGrid ñeå ñònh daïng caùc doøng hoaëc coät döõ lieäu keát xuaát töông töï nhö baûng tính Excel. DataGrid keát xuaát döõ lieäu cuoái cuøng hoaøn toaøn maõ HTML töông thích vôùi haàu heát caùc trình duyeät.

Coøn 2 kieåu ñieàu khieån danh saùch khaùc maø ASP.NET cung caáp laø RadioButtonList vaø CheckListBox. Hai thaønh phaàn naøy seõ sinh ra moät danh saùch caùc nuùt choïn checkbox hay radio cuûa HTML Baïn coù theå ñaët danh saùch theo haøng doïc hay ngang. Moãi muïc cuûa nuùt choïn mang moät nhaõn hieån thò baèng phaàn töû HTML <span>. Hai thaønh phaàn naøy raát höõu duïng. Ví duï, baïn cho pheùp ngöôøi duøng ñaùnh daáu vaøo danh saùch caùc mail chöùa trong hoäp baèng caùc oâ checkbox sau ñoù ngöôøi duøng coù theå nhaán nuùt xoùa ñeå ñoàng loaït xoùa. 10.5.3. Ñieàu khieån ña naêng (rich control).

Caùc ñieàu khieån ña naêng thöôøng khoâng deã xaây döïng baèng caùc phaàn töû HTML ñôn giaûn. Thay vaøo ñoù ñieàu khieån ña naêng thöôøng hình thaønh baèng caùch keát hôïp giöõa JavaScript vôùi theû HTML taïo neân nhöõng hieäu öùng ñaëc bieät. Ví duï, Calendar, AdRotator, TreeView, ImageGenerator laø caùc ñieàu khieån ña naêng.

Hình döôùi ñaây hieån thò ñoái töôïng ñieàu khieån ña naêng Calendar.

10.5.4. Ñieàu khieån kieåm tra (Validate control) Taùc vuï thöôøng gaëp nhaát khi laøm vieäc vôùi caùc form HTML trong

nhöõng öùng duïng Web laø kieåm tra giaù trò döõ lieäu do ngöôøi duøng nhaäp vaøo.

Page 191: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

188

Caùc control nhaäp lieäu ôû trình duyeät luoân caàn phaûi kieåm tra giaù trò ngaøy thaùng theo moät khuoân ñònh daïng, khoaûng giaù trò, chuoãi khoâng ñöôïc roãng, �do ñoù ASP.NET cung caáp caùc ñieàu khieån kieåm tra ñeå thöïc hieän caùc coâng vieäc naøy treân caû hai phía Client vaø Server. Coù 2 caùch thöïc hieän vieäc kieåm tra :

' Kieåm tra phía trình duyeät : thöôøng söû duïng javascript vaø coù söï phaûn hoài nhanh hôn.

' Kieåm tra phía trình chuû : döõ lieäu ñöôïc gôûi töø client ñeán server, ñöôïc kieåm tra bôûi trang ASP, sau ñoù phaûn hoài keát quaû veà trình duyeät. Ñaây laø caùch kieåm tra toán nhieàu thôøi gian bôûi caàn moät voøng giao tieáp giöõa trình duyeät vaø trình chuû WebServer.

Coù 3 loaïi ñieàu khieån : ' RequeredFieldValidator : kieåm tra giaù trò ñaëc bieät cuûa moät

tröôøng. ' ComparedExpressionValidator : Kieåm tra giaù trò thoâng qua so

saùnh vôùi caùc giaù trò khaùc. ' RegularExpressionValidator : kieåm tra tính hôïp leä cuûa bieåu

thöùc. Ngoaøi ra baïn coù theå söû duïng ñieàu khieån Custom Validator ñeå caøi ñaët boä kieåm tra ñieàu kieän kieåm tra cho rieâng mình baèng caùc haøm Javascript hoaëc Visual basic. Ñieàu khieån Validation summary seõ kieåm tra taát caû caùc ñieàu khieån Validator vaø in ra keát quaû neáu moät ñieàu khieån naøo ñoù khoâng thoûa maõn ñieàu kieän kieåm tra. Moät ñieàu khieån Validator (tröø Sumary Validator) ñöôïc lieân keát vôùi moät thaønh phaàn HTML thoâng qua thuoäc tính phaàn töû.

Chöông 11

XAÂY DÖÏNG TRANG ASP.NET NAÂNG CAO

Caùc vaán ñeà chính : - Laäp trình vôùi maõ aån (code behide) - Taïo caùc maãu trang coù khaû naêng duøng laïi (Pagelets). - Söû duïng vuøng ñeäm Cache cuûa ASP.NET.

11.1. Laäp trình vôùi maõ aån.

Moät trong nhöõng khoù khaên maø caùc laäp trình vieân vaø caùc nhaø thieát keá trang web gaëp phaûi laø caùc trang web ngaøy caøng phöùc taïp. Raát khoù taùch rôøi giöõa phaàn noäi dung cuûa trang web (bao goàm phaàn layout vaø giao dieän) vaø caùc maõ thöïc thi

Page 192: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

189

cuûa chöông trình(caùc ñoïan vieát baèng ASP, ASP.NETNET, JSP, Perl,�). Kyû thuaät phaùt trieån tröôùc ñaây laãn loän giöõa maõ nguoàn vaø vaøo giao dieän cuûa trang taøi lieäu. Khoù coù theå taùch laäp giöõa nhaø phaùt trieån chöông trình vaø caùc nhaø thieát keá Web hoaït ñoäng ñoäc laäp nhau.

ASP.NET coá gaén giaûi quyeát vaán ñeà naøy theo hai caùch vaø khoâng caàn duøng ñeán töø khoùa #include theo caùch maø caùc öùng duïng duïng ASP thöôøng laøm. Caùch thöù nhaát laø laø duøng maõ aån (code behide) vaø caùch thöù hai laø söû duïng caùc maãu trang coù khaû naêng duøng laïi (pagelets).

Kyû thuaät maõ aån hoaøn toaøn ñöa ra maõ leänh taùch rôøi khoûi phaàn trình baøy giao dieän cuûa ñònh daïng HTML. Toaøn boä trang ASP.NET cuûa baïn keå caû phaàn maõ HTML ñöôïc xem nhö laø moät ñoái töôïng COM+. Chuùng keát hôïp vôùi caùc ñoái töôïng cung caáp maõ trong moät toång theå bao nhieàu ñoái töôïng COM khaùc. BaÏn coù theå xaây döïng caùc ñoái töôïng COM chöùa maõ ñieàu khieån töø nhieàu ngoân ngöõ ngöõ laäp trình khaùc nhau. Bieân dòch vaø keát hôïp chuùng vaøo caây ñoái töôïng cuûa trang seõ taïo neân trang taøi lieäu keát xuaát cuoái cuøng traû veà trình khaùch.

Ñeå keát hôïp caùc ñoái töôïng chöùa maõ aån vaøo taøi lieäu HTML, tröôùc heát baïn caàn xaây döïng ñoái töôïng COM keá thöøa töø lôùp cô sôû (base class). Trong phieân baûn ASP.NET hieän taïi lôùp cô sôû naøy laø System.Web.UI.Page. Taát caû maõ xöû lyù (maõ aån) ñöôïc ñaët trong ñoái töôïng naøy. Tieáp ñeán, trong trang ASP.NET baïn khai baùo chæ thò Inherit cho pheùp trang tích hôïp vaø keá thöøa vaøo ñoái töôïng COM vöøa taïo ra tröôùc ñoù. Döôùi ñaây laø ví duï minh hoïa, chuùng ta muoán taùch bieät maõ kieåm tra tính cuûa haøm ValidateISBN vaøo ñoái töôïng COM. Tröôùc heát chuùng ta caàn taïo ra moät lôùp ñoái töôïng COM naøy, maõ leänh ñöôïc xaây döïng nhö sau:

Imports System Imports System.Text Public Class ValidateClass Inherits System.Web.UI.Page Public Function ValidateISBN(ByVal objSource As Object, ByVal strArgs As String) As Boolean Dim strISBN As New StringBuilder() Dim lngTotal As Long = 0 Dim arrDigits(11) As Integer Dim intLoop As Integer Dim strChar As String Dim intDegits As Integer = 0 ..... If (lngTotal Mod 11) = 0 Then ValidateISBN = True Else ValidateISBN = False

Page 193: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

190

End If End Function End Class

Baïn löu noäi dung treân vaøo taäp tin validateclass.vb. Tieáp ñeán, ñeå söõ duïng ñoái töôïng COM chöùa maõ aån, baïn khai baùo trong trang validate.aspx chæ thò

<%@ Page Language = �VB� Inherit=�ValidateClass� Src=�validateclass.vb�%> <Html> �.. <tr> <td align = "right" colspan = 5 > and the ISBN code of the book you are interested in :

</td> <td colspan = "1" > <input type = "text" id = "txtISBN" size = "16" runat ="server" NAME="txtISBN"/> </td> <td class = "error"> <!--RequireFieldValidate for ISBN--> <asp:RequiredFieldValidator id = "ValidateISBN" ErrorMessage = "The ISBN code you have entered is not valid" Runat ="server" ControlToValidate="txtISBN" Display="dynamic"> </asp:RequiredFieldValidator> </td>

</tr> �. </html>

Neáu chuùng ta khoâng ñònh ra SCR trong chæ thò trang thì trình dieãn dòch seõ tìm ñoái töôïng COM trong thö muïc /bin cuûa öùng duïng. 11.2. Taïo caùc maãu trang coù khaû naêng duøng laïi (Pagelets).

Caùch thöù hai ñeå taùch rôøi maõ leänh vaø noäi dung taøi lieäu ñoù laø söû duïng caùc maãu trang goïi laø pagelets. Maåu trang laø caùc ñoaïn maõ nhoû coù khaû naêng taùi söû duïng trong caùc trang khaùc. Ví duï phaàn tieâu ñeà (header) vaø chaân trang (footer) thöôøng laëp ñi laëp laïi vaø theå hieän trong haàu heát caùc cuûa öùng duïng duïng. Baïn coù theå ñöa hai phaàn naøy taùch rôøi vaøo 2 trang pagelets khaùc nhau. Caùc trang coù söû duïng phaàn header vaø footer chæ caàn nhuùng Pagelets vaøo, khoâng caàn phaûi vieát laïi maõ. Thaønh phaàn vaø noäi dung maõ vieát trong caùc maãu trang pagelets coù ñaëc ñieåm nhö sau :

- Teân bieán khai baùo vaø söû duïng trong pagelets laø cuïc boä khoâng aûnh höôûng ñeán caùc bieán khai baùo trong trang chính.

Page 194: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

191

- Baïn coù theå nhuùng cuøng moät maåu trang laäp ñi laäp laïi nhieàu laàn beân trong trang maø khoâng sôï xung ñoät veà truøng teân bieán, teân haøm hoaëc phöông thöùc cuûa lôùp, ñoái töôïng, �

- Baïn coù theå truyeàn tham soá cho caùc maåu trang pagelets khi trieäu goïi hoaëc khi nhuùng trang.

- Maõ leänh trong maåu trang coù theå vieát baèng caùc ngoân ngöõ khaùc vôùi ngoân ngöõ trang chính.

11.2.1. Xaây döïng caùc maåu Pagelet Vaán ñeà caàn löu yù khi xaây döïng pagelets : Trong taäp tin pagelets baïn

ñöøng söû duïng caùc theû nhö <html> hay body vì chuùng seõ truøng vôùi caùc theû ñaõ coù trong trang chính (trang trieäu goïi vaø nhuùng pagelets). Neáu baïn ñöa theû <form> vaøo beân trong pagelets thì khi trieäu goïi pagelets baïn neân ñaët pagelets beân trong theû ví duï veà trang validate.aspx ôû phaàn treân, chuùng di chuyeån toaøn boä phaàn theå hieän noäi dung nhaäp lieäu (bao goàm theû caû<form>) vaø haøm kieåm tra VilidateISBN vaøo taäp tin pagelets.aspx mang teân validate_pagelets.ascx nhö sau:

<form runat = �server� > � . <!�HTML Control for the name field--> <td align = "right" colspan = 5 > Name : </td>

<td><input type = "text" id = "txtName" size = "20" runat ="server" /></td> <td class = "error"> <!�Validate controls for name--> <asp:RequiredFieldValidator id = "ValidateName" ErrorMessage = "You must enter your name" Runat ="server" ControlToValidate="txtName" Display="static"> * </asp:RequiredFieldValidator> <!�end of validation controls-- > </td> <tr> <td></td> <td colspan = �8� id = �invalidate_message�> <span runat = �server� > <asp:ValidateSumary id = �validateSummary� runat = �server� /> </span> </td> </tr> </table> <!- - Custom validation function- -> <script language =�VB� runat =�server�>

Public Function ValidateISBN(ByVal objSource As Object, ByVal strArgs As String) As Boolean Dim strISBN As New StringBuilder()

Page 195: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

192

Dim lngTotal As Long = 0 Dim arrDigits(11) As Integer Dim intLoop As Integer Dim strChar As String Dim intDegits As Integer = 0 ..... If (lngTotal Mod 11) = 0 Then ValidateISBN = True Else ValidateISBN = False End If End Function </script>

11.2.2. Ví duï veà söõ duïng Pagelet. Trang chính cuûa baïn vôùi teân use_pagelets.aspx giôø ñaây chæ coù nhieäm vuï

khai baùo vaø söû duïng pagelets. Baïn duøng chæ thò

<%@ Register TagPrefix ��myPagelet� TagName=allOfInput

src=�validate_pagelet.aspc�%>

Trong chæ thò treân, thuoäc tính nguoàn src troû ñeán file chöùa noäi dung maåu trang pagelets. TagPrefix cho bieát thoâng gian teân phaân bieät vôùi caùc pagelets tuøy bieán khaùc. TagName laø teân trieäu goïi pagelets. Löu yù, ôû ñaây ta chæ môùi thay baùo, thaät söï maõ cuûa pagelets vaãn chöa ñöôïc nhuùng vaøo trang chính thöùc tröø khi baïn thöïc hieän vieäc trieäu goïi. Pagelet ñöôïc trieäu goïi vaø nhuùng vaøo trang chính töông töï nhö caùch goïi caùc thaønh phaàn ñieàu khieån ASP.NET maø chuùng ta ñaõ hoïc qua. Vì duï, ñeå thöïc hieän vieäc nhuùng moät maåu pagelet baïn coù theå söû duïng cuù phaùp <myPageket:allOfInput>. Khi trang chính ñöôïc naïp, maãu pagelet cuõng seõ ñöôïc bieân dòch vaø trong traïng thaùi saün saøng ñeå keát xuaát noäi dung taøi lieäu.

Döôùi ñaây laø toaøn boä noäi dung trang chính use_pagelet.aspx söû duïng pagelets ñònh nghóa trong file validate_pagelets.ascx:

<%@Register TagPrefix =�mypagelet �%> TagName = �allOfInput� src = �validate_pagelet.ascx�%> <html> <title> Re using An ASP + Page as a �Pagelet� </title> <!�cheøn maåu trang pagelet> <myPagelet:allOfInput id = �PageletCtrl� runat = �server� /> </html>

Keát xuaát cuûa use_pagelets.aspx hoaøn toaøn töông tö nhö trang validate.aspx tröôùc ñaây.

Page 196: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

193

11.2.3. Ñònh nghóa thuoäc tính vaø phöông thöùc cho Pagelets. Neáu chæ thöïc hieän chöùc naêng nhuùng maõ vaøo trang chính thì Pagelets khoâng

coù gì khaùc bieät so vôùi chæ thò #include maø ASP ñaõ hoå trôï tröôùc ñaây . Tuy nhieân, pagelet laøm ñöôïc nhieàu ñieàu hôn laø chæ taùch bieät vaø aån maõ. Baïn coù theå xem pagelet nhö moät ñoái töôïng, coù theå truy xuaát thoâng qua phöông thöùc vaø thuoäc tính. Ví duï chuùng ta coù theå caøi theâm cho maåu trang validate_pagelet.ascxtreân ñaây vôùi thuoäc tính IsbnValue traû veà soá ISSBN cuûa quyeån saùch maø ngöôøi duøng ñaët mua, ñoàng thôøi xaây döïng phöông thöùc ValidateResult() cho pheùp laáy veà keá quaû kieåm tra tính hôïp leä cuûa soá ISBN. Baïn theâm ñoïan maõ sau vaøo ñaàu trang validate _pagelet.ascx.

<script language = �VB� runat =�server�> Public Property IsbnValue as String Get � traû veà giaù trò soá cuûa ISBN do ngöôøi duøng nhaäp vaøo �nhaäp vaøo sau khi nhaán nuùt submit IsbnValue = txtISBN.Value End Get Set �Ñaët trò cho oâ nhaäp lieäu txtISBN.Value = isbnValue End Set End Property Public Function ValidationResult() as String If Page.IsValid then

ValidationResult = �The values you provided have been accept� else ValidationResult �There is a problem with the values you

provided� End If End Function

</script> �..

Tieáp ñeán trong trang chính, baïn coù theå truy xuaát caùc thuoäc tính

IsbnValue cuûa maåu trang mang ñònh danh PageletCtrl ñöôïc ñònh nghóa tröôùc ñoù nhö sau:

strISBN=pageletCtrl.IsbnValue Neáu muoán ñaët giaù trò cho oâ nhaäp lieäu ISBN, baïn coù theå söû dung caùc

thuoäc tính thoâng qua pheùp gaùn sau : PageletCtrl.IsbnValue = �1-861004-13-3�

hoaëc baïn coù theå gaùn giaù trò thuoäc tính ngay khi nhuùng pagelet vaøo trang chính thoâng qua khai baùo :

<myPagelet:allOfInput id = �PageletCtrl�

IsbnValue=�1-861004-13-3�

Page 197: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

194

runat = �server�/> Hoaëc coù theå goïi phöông thöùc ValidateResult cuûa pagelet ñeå laáy veà keát

quaû kieåm tra soá ISBN khi ngöôøi duøng chuyeån döõ lieäu veà server nhö sau: <% If IsPostBack Then strFooter = PageletCtrl.ValidateResult else strFooter = �ISBN Book validate result� End If Reponse.write (strFooter) %>

11.3. Söû duïng vuøng ñeäm Cache cuûa ASP.NET. Cache thöôøng ñöôïc hieåu laø vuøng ñeäm duøng taêng toác caùc thao taùc xöû lyù

nhaäp xuaát. ASP.NET caøi ñaët raát nhieàu möùc trong quaù trình xöû lyù trang. Khi trang ñöôïc goïi, trình bieân dòch trang seõ dòch toaøn boä noäi dung vaø maõ thöïc thi cuûa trang ra daïng nhò phaân ñöa vaøo vuøng ñeäm cache ñeå quaù trình trieäu goïi trong nhöõng laàn keá tieáp seõ nhanh hôn. ASP.NET cho pheùp baïn can thieäp vaø söû duïng vuøng ñeäm ñeå taêng toác cache ôû 2 möùc ñoä khaùc nhau ñoù laø thieát laäp cache cho noäi dung keát xuaát (output cache) vaø cho khai baùo löu tröõ bieán trong moâi tröôøng phaùt trieån ASP.NET.

11.3.1. Laäp vuøng ñeäm cho döõ lieäu keát xuaát. Ñoái vôùi caùc öùng duïng hoaøn chænh, thöôøng noäi dung raát ít thay ñoåi. Hieän

taïi ASP.NET cung caáp cô cheá cho pheùp nhaän daïng caùc chuoãi URL coù noäi dung truøng nhau ñeå traû veà trang yeâu caàu vaø löu treân cache tröôùc ñoù. Ví duï sau seõ minh hoïa caùch thieát laäp vaø söû duïng cache cho trang .aspx <%@OutputCache Duration = "15"%> <%@Page language ="vb" MaintainState = "False" EnableSessionSate="false"%> <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebApplication1.WebForm1"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <title>WebForm1</title> <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0"> <meta name="CODE_LANGUAGE" content="Visual Basic 7.0"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> <script language="vb" runat="server"> Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Page 198: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

195

'Put user code to initialize the page here If Not IsPostBack Then chkValue1.Checked = True End If End Sub Private Sub cmdExec_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdExec.ServerClick strMessage = "The Code in this page was executed :" & "<br><b>" & CStr(Now()) & "</b><p>" divExecutedTime.InnerHtml = strMessage End Sub </script> </HEAD> <body> <div id="divExecutedTime" runat="server"> <form id="Form1" method="get" runat="server"> Select a value for the query : <p> <input type="radio" value="1" name="queryvalue" id="chkValue1" runat="server">Value One <br> <input type="radio" value="2" name="queryvalue" id="chkValue2" runat="server">Value Two <br> <input type="radio" value="3" name="queryvalue" id="chkValue3" runat="server">Value Three <br> </p> Then click <input type="submit" id="cmdExec" value="here" runat="server" onserverclick="cmdExec_Click"> to re load this page </form> </div> </body> </HTML>

Baïn löu noäi dung treân vaøo trang output_cache.aspx. Trong ví duï treân, theû <form> cuûa chuùng ta söû duïng phöông thöùc chuyeån döõ lieäu method =�get� ñeå ñöa döõ lieäu ngöôøi duøng submit leân ñòa chæ URL (hieän ASP.NET chöa hoå trôï cache trang cho phöông thöùc post cuûa theû <form>) Neáu noäi dung cuûa chuoãi URL khoâng ñoåi thì noäi dung trang seõ laø noäi dung thöïc thi tröôùc ñoù. Haõy xem hieäu öùng caùc trang baèng caùch môû trình duyeät vaø goïi output_cache.aspx. Keát quaû laàn thöù nhaát ñöôïc theå hieän trong hình sau.Khi baïn nhaán nuùt radio ñaàu tieân vaø nuùt nhaán submit ngaøy giôø treân server seõ ñöôïc hieän treân maøn hình. Tuy nhieân laïi choïn nuùt thöù nhaát vaø nhaán nuùt Submit, keát quaû baïn laïi nhaän ñöôïc thôøi gian treân server cuûa laàn tröôùc ñoù. Dó nhieân ñoàng hoà treân server vaãn chaïy ñuùng. Vaán ñeà laø khi baïn choïn laïi radio thöù nhaát, chuoãi URL cuûa Form thöïc hieän submit coù noäi dung truøng vôùi laàn tröôùc ñoù. Trang coøn löu trong cache töông öùng vôùi chuoãi URL

Page 199: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

196

naøy treân server seõ ñöôïc traû veà ngay töùc khaéc maø khoâng caàn caäp nhaät laïi. Do chæ thò <%@OutputCache Duration = �15�%> neân sau 15 giaây cho duø baïn göûi chuoãi URL truøng vôùi laàn tröôùc ñoù thì noäi dung seõ ñöôïc huûy khoûi cache vaø ñöôïc bieân dòch laïi. Keát quaû seõ trôû neân ñuùng ñaén.

Hình 11.1

Chuùng ta coù theå söõ duïng cache trong nhöõng öùng duïng maø döõ lieäu töông ñoái tónh vaø ñöôïc caäp nhaät trong moät khoaûng thôøi gian nhaát ñònh. Keát quaû maø vuøng nhôù cache ñem laïi laø moät toác ñoä phaûn hoài ñaùng keå.

11.3.2. Söû duïng cache ñeå löu tröõ bieán moâi tröôøng 11.3.2.1 Taïo vaø truy xuaát caùc bieán cuûa ñoái töôïng cache

ASP.NET cung caáp cho baïn caùch thöùc löu tröõ caùc bieán trong cache ñeå taêng toác ñoä truy xuaát. Cache laø vuøng nhôù toaøn cuïc cho neân taïo vaø xöû lyù caù bieán cuûa cache gaàn gioáng vôùi khaùi nieäm Application hôn laø Session.

Ñeå taïo moät bieán trong cache baïn söû duïng ñoái töôïng cuøng vôùi teân bieán nhö sau :

Cache (�MyKey�)=�MyValue� Ñeå laáy giaù trò cuûa bieán löu trong cache tröôùc ñoù baïn goïi :

strValue = Cache(�MyKey�) Phöông thöùc Insert cuõng coù theå ñöôïc duøng ñw63 taïo bieán

trong cache theo caùch khaùc. Ví duï : Cache.Insert(�MyKey�,�MyValue�)

Ñeå loaïi boû moät bieán trong cache ta duøng phöông thöùc Remove

Cache.Remove(�MyKey�)

Page 200: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

197

Cache ñöôïc duøng ñeå löu moïi kieåu döõ lieäu töø kieåu ñôn giaûn nhö chuoãi, soá nguyeân, kyù töï cho ñeán caùc kieåu phöùc hôïp nhö maûng, ñoái töôïng, ñieàu khieån (control), pagelets,�

11.3.2.2 Söû duïng cache trong ASP.NET Trang aspplus_cashe.aspx döôùi ñaây seõ minh hoïa caùch taïo vaø

söû duïng caùc bieán cache. Chuùng ta xaây döïng hai oâ nhaäp lieäu, baïn coù theå nhaäp vaøo oâ giaù trò cho bieán, khi click chuoät vaøo nuùt Add, döõ lieäu seõ ñöôïc göûi veà server vaø bieán ñöôïc taïo ra trong cache. Haøm ShowCacheContent seõ hieån thò toaøn boä noäi dung cuûa cache trôû laïi trình khaùch ñeå baïn theo doõi . Muoán loaïi boû khoûi cache, baïn nhaäp vaøo teân bieán vaø nhaán nuùt Remove. Löu yù bieán lö trong caùch coù giaù trò toaøn cuïc töông öùng nhö caùc bieán löu trong ñoái töôïng Application.

<@Page Language =�VB� MaintainState =�False� EnableSessionState=�False� %> <%@OutputCache Duration =�15�%> <html> <script language =�VB� runat =�server�> Sub ShowCacheContents() strContents = �<b>The contents of the ASP.NET application� & �cache are : </b><br>� For Each objItem In Cache strName = objItem.Key If Left(strName,7) <> �System� Then strContens = strContents & strName & �=� & Cache(strName) & �<br>� End If divCacheContents.InnerHTML = strContents End Sub Sub cmdAdd_Click(objSender as Object, objArgs as EventArgs) If txtName.Value <> �� Then cache(txtName.value) = txtValue.value End If ShowCacheContents End Sub Sub cmdRemove_Click(objSender as Object, objArgs as EventArgs) If txtName.value <> �� Then Cache.Remove(txtName.Value) End If ShowCacheContents End Sub </script> <!�Su dung the div de hien thi noi dung cache> <div id= �divCacheContents� runat =�server�/> <form runat=�server�>Enter the name and value for adding to the ASP.NET cache: </p> <input type=�text� id=�txtName� size = �10� runat =�server� /> <input type =�text� id=�txtValue� size = �10� runat =�server�/> </p> Then click <input type = �submit� id = �cmdAdd� value = �here� runat =�server�

Page 201: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

198

onserverclick = �cmdAdd_Click�> to<b>Add</b> It to The ASP.NET cache </p> or click <input type = �submit� id = �cmdRemove� value = �here� runat =�server� onserverclick=�cmdRemove_Click�/> to<b>Remove</b>it from the ASP+ Cache </p> </form> </html>

Löu yù, chuùng ta khoâng hieån thò caùc mang bieán mang teân Sytem baèng

ñoaïn maõ sau: If Left(strName,7) <> �System.� Then strcontents = strContents & strName & �=� & Cache(strName) & �</br>� End If

11.4. Keát chöông Nhö vaäy trong chöông naøy chuùng ta xem qua moät soá tính naêng baäc cao hoå trôï

vieäc xaây döïng caùc trang duøng laïi. Kyû thuaät söû duïng vuøng nhôù cache.

Page 202: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

199

Chöông 12

NAÂNG CAÁP CAÙC ÑEÀ AÙN VB 6.0 LEÂN .NET (Upgrading VB to .NET)

Khi tieáp caän VB.NET , chuùng ta thaáy VB.NET coù goác reã saâu trong phieân baûn VB 6.0. vaø do ñoù, khi chuùng ta xaây ñöïng moät project VB.NET seõ tieáp nhaän töø phieân baûn VB 6.0 nhö theá naøo?. Vaán ñeà khaùc caàn quan taâm ñoù laø chuùng ta coù neân naâng caáp moät ñeà aùn coù saün töø VB 6.0 leân VB.NET hay khoâng. Ñeå baét ñaàu chuùng ta thöû laáy moät öùng duïng VB 6.0 window EXE leân .NET nhö theá naøo. 12.1. Nhöõng ñieàu löu yù (considerations) tröôùc khi naâng caáp leân .NET

Tröôùc khi quyeát ñònh naâng caáp chuùng ta caàn xem xeùt ,caân nhaéc. Vaø sau ñaây laø nhöõng ñieàu chi tieát sau:

' Giôùi haïn gaàn cuûa nhöõng bieán(Early binding of variables) : laø moät thöïc tieãn theå hieän moät bieán moät kieåu döõ lieäu rieâng bieät khaùc vôùi kieåu döõ lieäu Object. Ñieàu thuaän lôïi cuûa kieåu naøy laø bieân dòch nhöõng loãi , thöôøng söû duïng thuoäc tính incorrect hoaëc goïi nhöõng phöông thöùc khoâng toàn taïi (non_existent methods), coù theå doø tìm thaáy ngay laäp töùc.

' Traùnh söï phoå bieán NULL (avoiding null propagation): o Null propagation coù nghóa laø neáu Null ñöôïc duøng cho moät bieåu

thöùc , keát quaû bieåu thöùc laø luoân luoân Null. Trong VB 6.0 giaù trò Null ñöôïc phoå bieán suoát bieåu thöùc. Null döôïc duøng phoå bieán trong caùc öùng duïng cô sôõ döõ lieäu (chaúng haïn kieåm tra moät field(s) coù null hay khoâng) xem ví duï Null propagation trong moät bieåu thöùc

dim var var = 100 + null var = �hello� & null

o Null propagation khoâng hoå trôï Trong VB.NET ví duï var = 100 +

null traû veà maõ loãi. Hôn theá nöõa töø khoùa Null ñöôïc thay theá baèng System.DBNull.Value. Nhö vaäp muïc ñích cuûa vieäc chuyeån ñoåi , code cuûa baïn seõ luoân luoân kieåm tra Null thay vì null propagration. Visual Basic duøng haøm IsDBNull() ñeå xaùc ñònh moät bieåu thöùc coù giaù trò hay Null.

' Duøng ADO : VB.NET hoå trôï maõ DAO,RDO, vaø ADO nhöng vôùi moät söï söûa ñoåi nhoû. Nhöng ñoái vôùi vieäc söû duïng ADO, RDO controls , data control, hoaëc RDO user connection thì VB.NET khoâng hoå trôï naáng caáp leân ñöôïc.

Page 203: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

200

' Söû duïng kieåu döõ lieäu ngaøy cho vieäc cho vieäc döï tröõ ngaøy : Trong VB söû duïng kieåu döõ lieäu double ñeå löu tröõ hoaëc thao taùc ngaøy. Ñieàu naøy VB.NET khoâng hoã trôï, bôûi vì döõ lieäu ngaøy khoâng löu tröõ nhö double. Ñoaïn code sau ñaây khoâng coù hieäu löïc trong VB.NET Dim dblVal as Double Dim dtVal as Date dtVal = now dblVal = dtVal � Invalid in VB.NET

.NET Framework hoå trôï hai phöông thöùc ñeå chuyeån döõ lieäu töø Doubles sang Dates. Haøm FromOADate vaø ToOADate. haøm ToOADate chuyeån kieåu döõ lieäu ngaøy sang Double vaø haøm FromOADate ngöôïc laïi.

' Söû duïng Constants(haèng) thay vì nhöõng giaù trò thöïc söï(actual):moät ngöôøi laäp trình toát thöôøng söû duïng constant hôn nhöõng giaù trò thöïc söï(actual values). Trong .NET giaù trò cuûa TRUE ñöôïc thay ñoåi �1,1. Vieäc söû duïng nhöõng constant naøy baûo ñaûm giaù trò ñuùng noù thay theá khi project cuûa baûn upgrade. Tuy nhieân neáu moät giaù thöïc ñöôïc duøng (actual value) thì noù hoaøn toaøn coù theå duøng trong project cuûa baïn moät caùch ñuùng ñaén.

12.2. Caùc böôùc tieán haønh Naâng caáp (Upgrade) ' File/Open/Project, môû taäp tin *.vbp cuûa VB 6.0 , baïn ñöôïc chaøo ñoùn

bôûi Upgrade wizard.

' Tieán trình keùo theo moät soá böôùc sau : Tieán trình naøy hoûi xem coù

naâng caáp project cuûa baïn thaønh daïng thöùc EXE hay DLL hay khoâng (hieån nhieân caùc chuaån EXE chæ naâng caáp thaønh EXE). Keá tieáp

Page 204: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

201

' Hoûi baïn löu tröõ project môùi(.NET) ôû ñaâu.:

' Sau ñoù wizard thöïc hieän vieäc chuyeån ñoåi , vaø seû coù moät taäp tin teân

UpragdeReport.htm boå sung vaøo project cuûa baïn(baùo caùo laïi quaù trình Upgrade).

Page 205: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

202

12.3. Coù neân naâng caáp khoâng ?

Caên cöù vaøo tröôøng hôïp traéc nghieäp ñôn giaûn cuûa ta, Upgrade wizard laøm vieäc raát toát. Tuy nhieân vôùi moät ñeà aùn (project ) thöïc ngoaøi ñôøi coù theà bao goàm haønh chuïc ngaøn doøng maõ, nhieàu COM, DLL, vaø coù theå ñöôïc phaân phoái quan nhieàu maùy. Roõ raøng, tieán trình naâng caáp khoâng phaûi khoâng coù nhieàu thieáu soùt. NeÁu baïn coù moät öùng duïng quan troïng vaän haønh toát vaø quyeát ñònh naâng caáp , baïn coù theå mieãn cöôõng khi phaûi xem seùt tæ mæ baùo caùo naâng caáp phaùt sinh (UpgradePreport.html ) vaø töï tay söõa haøng traêm doøng maõ.

Caâu hoûi ñaët ra laø ñoù laø : baïn ñöôïc gì ? Trong ña soá tröôøng hôïp, traû lôøi chaúng ñöôïc bao nhieâu. Thöïc teá, baïn coù theå taïo theâm vieäc cho chính mình (vaø ñoäi cuûa baïn ) veà laâu daøi. Caâu traû lôøi ngaén goïn cho caâu hoûi ñoù laø �khoâng�. Khoâng coù lyù do naøo thieát phuïc maø baét hoï töø boû moâi tröôøng laøm vieäc VB 6.0 vaø naâng chuùng leân VB.NET (VB 7.0). Vaø thöïc teá thaäm chí ra ñôøi boä Visual Studio.NET, Microsoft hieän ñaõ cam keát hoã trôï vaø naâng caáp, caäp nhaät VB 6.0.

Khoâng phaûi noùi vaäy thì VB.NET coù caùi gì ñeå chuùng ta tieáp caän vaø vaän duïng noù. Chuùng ta duøng VB.NET ñeå xaây döïng môùi, vaø muoán vaän duïng caùc thö vieän höõu quan cuûa VB.NET.

Page 206: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

203

Phaàn 2

Baøi ÖÙng Duïng

Page 207: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

204

Ñeà taøi Xaây döïng Trang Web Daïy Hoïc VB.NET

1. Hieän Traïng

Hieän nay treân theá giôùi vieäc vaän duïng Web laø moät vaán ñeàu ñöôïc nhieàu ngöôøi quan taâm. Haàu heát nhöõng vieäc ñeàu thoâng qua maïng chaúng haïn nhö : Kinh doanh, tìm kieám taøi lieäu, mua baùn treân maïng, daïy hoïc tröïc tuyeán treân maïng ,v,v,.. Internet trôû thaønh phöông tieän lieân laïc xuyeân luïc ñòa vaø ñöôïc xem laø troïng taâm . Do ñoù vôùi vieäc tìm hieåu Visual Studio.NET vaø öùng duïng theá maïnh veà laäp trình Web(ASP.NET) , ADO.NET maø Visual Basic.NET hoå trôï ñeå vieát moät trang Web giôùi thieäu veà Visual Basic.NET

2. Yeâu caàu Xaây döïng trang web höôùng daãn hoïc VB.NET coù caùc yeâu caàu sau:

• Cho pheùp ngöôøi duøng ñaêng kyù accout vaø ñaêng nhaäp, gôûi baøi leân trang web vaø download taøi lieäu.

• Cho pheùp ngöôøi quaûn trò ñaêng nhaäp vaøo heä thoáng ñeå caäp nhaät noäi dung caùc baøi gôûi cuûa ngöôøi duøng. Taïm ngöng hoaëc huyû Account cuûa caùc thaønh vieân.

• Cho pheùp moïi ngöôøi tham khaûo lyù thuyeát vaø taøi lieäu veà Visual Basic.NET 3. Phaân Tích

• Sô ñoà lôùp

• Reletionships

SubjectsCategories Users

Page 208: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

205

• Moâ taû döõ lieäu caùc baûng Baûng Users

STT Teân Field Kieåu döõ lieäu

Moâ taû

1 AuthorID AutoNumber ID cuûa töøng field trong baûng 2 AuthorName Text(50) Teân cuûa ngöôøi gôûi 3 UserName Text(50) Teân ñaêng nhaäp gôûi baøi 4 Pass Text(50) Password ñaêngnhaäp gôûi baøi 5 Brithday Date Naêm sinh cuûa ngöôøi gôûi 6 address Text(50) Ñiaï chæ 7 ImageFileName Text(50) Teân aûnh cuûa ngöôøi gôûi baøi 8 Tel Text(50) Ñieän thoaïi cuûa ngöôøi gôûi 9 Email Text(50) Email cuûa ngöôøi gôûi 10 Status Yes/No Traïng thaùi ngöôøi gôûi(töùc laø

ngöôøi gôûi[thaønh vieân naøy] coøn coù quyeàn tham gia gôûi baøi nöõa hay khoâng )

11 TotalSubjects Number Soá baøi maø thaønh vieân naøy gôûi Baûng Categories

STT Teân Field Kieåu döõ lieäu Moâ taû 1 CategorieID AutoNumber ID cuûa töøng chuû ñeà 2 CategorieName Text(50) Teân cuûa chuû ñeà

Baûng Subjects

STT Teân Field Kieåu döõ lieäu

Moâ taû

1 SubjectID AutoNumber ID cuûa baøi gôûi(öùng vôùi 1 chuû ñeà)

2 CategorieID Number ID cuûa chuû ñeà 3 Title Text(50) Teân baøi gôûi 4 Content Memo Noäi dung baøi gôûi 5 DownloadFileName Text(50) Teân taäp tin source code

hay taøi lieäu muoán download

6 ImageFileName Text(50) Teân taäp tin hình aûnh duøng ñeå minh hoaï noäi dung cuûa phaàn trình baøy

Page 209: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

206

7 AuthorID Number ID cuûa ngöôøi gôûi baøi 8 DatePost Date Ngaøy gôûi baøi

4. Caøi ñaët

+ Boá cuïc: Trang web ñöôïc chia laøm 3 phaàn : - Phaàn beân treân (Header) chöùa banner cuûa trang web. - Phaàn beân traùi laø menu chöùa caùc muïc chính cuûa VB.NET, noäi dung

tìm kieám : Tìm kieám theo chuû ñeà, noäi dung, taùc giaû upload. - Phaàn beân phaûi chöùa caùc thoâng tin chi tieát : Danh muïc caùc chuû ñeà

theo muïc chính cuûa baøi hoïc, thoâng tin ñaêng nhaäp, gôûi taøi lieäu, � + Laäp Trình : Trang web söûõ duïng 5 Pagelets :

- Banner.ascx : chöùa tieâu ñeà cuûa trang web vaø caùc chöùc naêng chính nhö Ñaêng nhaäp vaøo taøi khoaûn, ñaêng kyù user, gôûi tin baøi leân server.

- Categories.ascx : Pagelets chöùa danh saùch caùc muïc chính cuûa VB.NET. Taát caû döõ lieäu hoaøn toaøn ñoäng (Load töø cô sôû döõ lieäu). Pagelets söûõ duïng DataList control vôùi caùc Item Templates ñeå hieän thò döõ lieäu.

- CategorieSubjects.ascx : Pagelets chöùa caùc danh saùch caùc chuû ñeà cuûa moät muïc chính.

- NewDaily.ascx : Pagelets chöùa caùc tin (baøi gôûi) môùi nhaát trong voøng 5 ngaøy trôû laïi ñaây.

- Search.ascx : Pagelets chöùa caùc tieâu chuaån tìm kieám tin baøi. Trang web söûõ duïng 4 Lôùp : chöùa caùc haøm xöõ lyù lieân quan ñeán cô sôû döõ lieäu taùch haún phaàn laäo trình giao dieän trang web.

- StdPage class : chöùa caùc haøm laáy chuoåi keát noái (GetDSNCached), laáy ñòa chæ URL hieän taïi(UrlBase), �

- Subjectsdb class : chöùa caùc haøm lieân quan ñeán baûng Subjects, Categories : Laáy danh saùch caùc muïc chính (GetCategories), danh saùch caùc chuû ñeà theo muïc chính (GetCategorieSubjects), laáy danh saùch caùc baøi môùi trong voøng 5 ngaøy (GetDailyPickList), caäp nhaät baøi gôûi (UpdateSubjects)�

- Usersdb class : chöùa caùc haøm lieân quan ñeán baûng Users : Haøm Theâm user (AddNewUser), taïm ngöng Account (DiableAccount) , Laáy ID cuûa User (GetAuthorID), laáy teân cuûa user (GetAuthorName), laáy thoâng tin user (GetUserInfo), ValidateLogin (kieåm tra ñaêng nhaäp), ValidateAdmin (Kieåm tra user hieän taïi coù laø Admin hay khoâng), �

Page 210: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

207

- UserControlModule Class : Ñaây laø lôùp keá thöøa töø lôùp UserControl, ñaây laø lôùp maø caùc lôùp trong Pagelets keá thöøa.

♣Söûû duïng 2 file : Style.css vaø Style1.css ñeå ñònh nghóa kieåu daùng cho caùc trang web. ♣Taäp tin Web.config : chöùa caùc thoâng tin keát noái, session cho trang web.

<ApplicationSetting> <add key = "DSN" value = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= e:\Inetpub\wwwroot\HuongDanHocVBNET\Database\Database.mdb" ></add> </ApplicationSetting>

<sessionState mode="InProc" stÿteConnectionString="tÿpip=127.0.0.1:42424" sqlConnUctionString="datK sour_u101 ?=127.0.0.1;user id=sa;password=" cookiel_'8s="false" timeout="20" />

5. Giao dieän • Sô ñoà giao dieän

Trang chuû

Trang Login

Trang ñaêng kyù Account

Trang user upload taøi lieäu

Trang tìm kieám Trang danh saùch baøi hoïc

Trang thoâng tin userTrang chi tieát baøi hoïc

Caäp nhaät thoâng tin userCaäp nhaät noäi dung baøi hoïc

Page 211: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

208

• Caùc trang chính o Trang chuû

Page 212: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

209

o Trang Login Dieãn Giaûi: Duøng ñeå ñaêng nhaäp vaøo heä thoáng gôûi tin baøy

o Trang Register

Dieãn Giaûi: Trang ñaêng kyù thaønh vieân môùi

Page 213: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

210

o Trang Upoad taøi lieäu Dieãn Giaûi: Duøng ñeå gôûi taøi lieäu(tin baøi ) leân server

Page 214: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

211

o Trang Upoad taøi lieäu Dieãn Giaûi: Trang chöùa thoâng tin chi tieát baøi öùng vôùi muïc maø user

choïn

Page 215: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

212

o Trang keát quaû tìm kieám Dieãn Giaûi: Trang chöùa keát quaû tìm kieám

Page 216: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

213

o Trang Thoâng tin User(thaønh vieân) Dieãn Giaûi: Trang chöùa thoâng tin caùc nhaân cuûa thaønh vieân, soá baøi

gôûi,�

Page 217: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

214

Ngoaøi ra khi user laø admin thì coøn coù moät soá chöùc naêng nhö : Taïm ngöng Account, chænh söõa noäi dung baøi gôûi, caäp nhaät thoâng tin Users,�

Page 218: VB.NET

Ñeà taøi:Tìm hieåu VB.NET vaø öùng duïng GVHD:Nguyeãn Taán Traàn Minh Khang

SVTH:Voõ Hoaøng Anh MSSV:9800503 Traàn Trung Hieáu MSSV:9800552

215

TAØI LIEÄU THAM KHAÛO

1/ VB.NET Developer�s Guide cuûa Cameron Wakefield, Henk- Evert Sonder, Wei Meng Lee. 2/ Mastering_VB.NET cuûa Evangelos Petroutsos haõng SyBex. 3/ A Programmer�s Introduction to Visual Basic.NET cuûa Paul Boger, Publisher, Sams, Publishing haõng SAMS 4/ Programming Visual Basic.NET cuûa Dave Grundgeiger 5/ VB .NET Language in a Nutshell cuûa Steven Roman, Ron Petrusha, Paul Lomax 6/ MSDN cuûa Visual Studio.NET 7/ Laäp trình Microsoft Visual Basic.NET kyõ thuaät vaø öùng duïng cuûa Ngoïc Anh Thö Press 8/ ASP 3.0 vaø ASP.NET cuûa Nguyeãn Phöông Lan 9/ http://www.vovisoft.com 10/ http://www.apress.com