Trong browser based Client ta dùng Javascript hay Javaapplet.. Nh ng b n c ng có th dùng ActiveX có s n trong VB6 trong .NET application b ng cách Add Reference COM click Tab COM trên Ad
Trang 1M C L C
Bài 1 Microsoft NET Framework 2
Bài 2 Visual Studio.NET 13
Bài 3 Nh ng khác bi t gi a VB.NET v i VB6 37
Bài 4 Nh ng ch c n ng i T ng m i c a VB.NET (ph n I) 59
Bài 5 Nh ng ch c n ng i T ng m i c a VB.NET (ph n II) 68
Bài 6 Nh ng ch c n ng i T ng m i c a VB.NET (ph n III) 82
Bài 7 Nh ng ch c n ng i T ng m i c a VB.NET (ph n IV) 95
Bài 8 Nh ng ch c n ng m i trong giao di n c a s c a VB.NET (ph n I) 112
Bài 9 Nh ng ch c n ng m i trong giao di n c a s c a VB.NET (ph n II) 124
Bài 10 Nh ng ch c n ng m i trong giao di n c a s c a VB.NET (ph n III) 134
Bài 11 Nh ng ch c n ng m i trong giao di n c a s c a VB.NET (ph n IV) 144
Bài 12 Nh ng ch c n ng m i trong giao di n c a s c a VB.NET (ph n V) 161
Trang 2Bài 1 Microsoft NET Framework
Cài đ t Visual Studio.NET Beta 2
Visual Studio.NET n m trong 3 CDs, g m có 4 files:
Vi c Unzip files có th r t lâu, b n ph i kiên nh n ch cho đ n khi nó k tthúc N u không, khi cài đ t có th b than phi n là thi u files
K đó, tr c h t ch y Setup.exe c a Windows Component Update nh
d i đây, click No khi Warning dialog hi n ra:
Ti p theo, ch y Setup.exe c a Visual Studio.NET:
B n nên có CPU Pentium III, 500MHz tr lên, v i 256 MB RAM và ít
nh t 10GB Harddisk V OS b n nên dùng Windows 2000 (Professional
Trang 3hay Server) hay Windows XP Lý do chính là các versions Windows này
h tr Unicode và có Internet Information Server (IIS) h tr ASPX đ tadùng cho ASP.NET
M các Samples c a QuickStart
Tr c khi expand Samples c a Quickstart b n c n ph i cài đ t IIS N u
ch a làm vi c y b n b CD c a Windows2000 hay WindowsXP vào đinstall IIS component
QuickStart Samples c a NET Framework ch a các gi i thích c n b n vànhi u thí d expand các Samples doubleclick Webpage
Starthere.htm nh trong hình d i đây:
Khi trang Web c a QuickStart hi n ra, click QuickStart, tutorials and samples r i sau đó theo ch d n t ng b c
Trang Framework SDK QuickStart Tutorials cho ta các bài t p c a
ASP.NET, Windows Forms và How Do I
Nh đ nguyên các folders c a Unzipped files (E:\CD, E:\CD\WINCUP),
đ ng delete chúng, vì NET s còn dùng chúng Ngoài ra, n u sau này.NET b corrupted vì conflict v i các application software khác, b n có
th cài đ t NET l i
Gi i h n c a Software Tools hi n gi
Trang 4Architect c a application software hi n gi có nói chung ba t ng (threetiers): t ng giao di n (Presentation Tier), t ng gi a (Middle Tier) và t ng
d ki n (Data Tier):
Presentation Tier: Trong desktop Client ta dùng VB6 và n i v i middle
tier qua DCOM Trong browser based Client ta dùng Javascript hay Javaapplet T browser based Client ta dùng http đ n i v i middle tier quaIIS/ASP (có th dùng COM đây)
Middle Tier: Ch a các rules đ validate data trên client và các businessrules khác Ta dùng VB6 đây, nh ng cách tri n khai COM v i nh ngObject Oriented Programming concepts r c r i h n bình th ng Ta ph ithi t k sao cho các components scale well (dùng cho m i c ) Có khidùng Microsoft Transaction Server trên Windows NT hay COM+Services trên Windows 2000 L p ráp các versions c a components là
m t thách th c l n
Nhi u khi middle tier còn nói chuy n v i các database qua HTTP, ADO
và CDO (Collaborative Data Objects), v.v
Data Tier: Th ng là relational database nh Microsoft SQL Server hayOracle Ngoài ra còn có Exchange hay các database x a c a mainframe
Tùy thu c quá nhi u vào central database: Ngay c ADO dù là ti n d ng
c ng đòi h i Client luôn luôn connect v i Server i u này không thích
Trang 5h p cho Internet applications, vì b n ch t c a Internet là stateless (không
gi tr ng thái), m i l n c n làm vi c m i connect l i m t chút thôi
• DLL "Hell": Các ActiveX c n ph i đ c registered
v i Windows Registry, ch có m t version đ c ch p
nh n N u version m i nh t c a m t DLL khôngcompatible v i các versions tr c đó mà applicationstrên máy đang c n thì có r c r i
Gi i h n c a VB6
• Thi u kh n ng inheritance (th a k ) và m t s ObjectOriented features khác
• Kh n ng Error handling gi i h n: On Error Goto ,
On Error Resume Next
Trang 6• Nhi u khi c n ph i g i Windows API đ làm nh ng
vi c VB6 không h tr : vi c này không t nhiên vàđôi khi nguy hi m
• Không có multi-threading: không th đoán tr cresponse c a code ch y trong các windows c a cùng
m t VB6 application Ngay c gi i quy t v n đmultitasking b ng Timers c ng không đáng tin c y
• Không d dùng chung v i các ngôn ng khác nhVC++
• Không ti n cho Web development: WebClass khôngthành công l m Ít ai ch u cho ta cài ActiveX trên máy
c a h
.NET Framework
.NET đ c developed t đ u n m 1998, lúc đ u có tên là Next Generation Windows Services (NGWS) Nó đ c thi t k hoàn toàn tcon s không đ dùng cho Internet Vi n t ng c a Microsoft là xây d ng
m t globally distributed system, dùng XML (ch a nh ng databases tí
hon) làm ch t keo đ k t h p ch c n ng c a nh ng computers khác nhautrong cùng m t t ch c hay trên kh p th gi i
Nh ng computers này có th là Servers, Desktop, Notebook hay PocketComputers, đ u có th ch y cùng m t software d a trên m t platform duy
nh t, đ c l p v i hardware và ngôn ng l p trình ó là NETFramework Nó s tr thành m t ph n c a MS Windows và s đ c portqua các platform khác, có th ngay c Unix
M c d u hãy còn là Beta, NET Framework r t stable và VisualStudio.NET r t ít bugs, có th dùng cho software development ngay tbây gi Hi n nay đã có m t s sách v l p trình NET do Wrox vàOreilly xu t b n
Các ph n chính c a Microsoft.NET Framework:
.NET application đ c chia ra làm hai lo i: cho Internet g i là ASP.NET,
Trang 7g m có Web Forms và Web Services và cho desktop g i là Windows Forms.
Windows Forms gi ng nh Forms c a VB6 Nó h tr Unicode hoàn
toàn, r t ti n cho ch Vi t và th t s Object Oriented
Web Forms có nh ng Server Controls làm vi c gi ng nh các Controls
trong Windows Forms, nh t là có th dùng codes đ x lý Events y h t
nh c a Windows Forms
i m khác bi t chánh gi a ASP (Active Server Pages) và ASP.NET làtrong ASP.NET, ph n đ i di n visual components và code n m riêngnhau, không l n x n nh trong ASP Ngoài ra ASP.NET code hoàn toànObject Oriented
Web Services gi ng nh nh ng Functions mà ta có th g i dùng t cácURL trên Internet, thí d nh Credit Card authorisation
ADO.NET là m t lo i cache database nho nh (g i là disconnected
database) đ thay th ADO Thay vì application connects v nh vi n v idatabase m qua ADO, application trong NET làm vi c v i portabledatabase ch ch a m t hai tables, là copy t database m Khi nào c n,portable database này (ADO.NET) s đ c reconciled v i database m đupdate các thay đ i Hai tables trong ADO.NET có th đ c related nhau trong Master/Details relationship Vì ADO.NET có ch a original data
l n data m i nh t nên Rollback trong ADO.NET r t d dàng và nh ký.
XML đ c y m tr t i đa N m phía sau ADO.NET là XML XML có
th là Table of records trong ADO.NET hay Tree of nodes trong DOM (Document Object Model).
IO đ c h tr b ng toàn b Stream k c Memory Stream và StreamReader/StreamWriter Thêm vào là DataFormatting cho Serialisation đ ch a Object xu ng binary file hay text file
TCP/IP và http là hai protocols thông d ng nh t trong NET, nh ng
chúng làm vi c phía sau sân kh u giúp ta g i m t remote procedure (n mtrên computer khác) d dàng nh m t local procedure K thu t y g i là
Remoting.
Trang 8Security h tr Cryptography, Permissions và Policy.
Diagnostics cho ta Debug và Trace.
Threading r t ti n và đ n gi n đ implement Lightweight Process V n
đ Timing trong NET program r t linh đ ng, hi u qu và chính xác
Vi c thi t k Common Language Runtime nh m vào các m c tiêu chínhsau đây:
• Vi c tri n khai đ n gi n và nhanh h n: developers sdành thì gi quy t đ nh ráp nh ng softwarecomponents nào l i v i nhau nhi u h n là l p trình
• Cài đ t đ n gi n và an toàn (no more DLL "hell"): ch
c n xcopy files, gi ng nh th i vàng son c a DOS Lý
do là NET application ch y trên NET framework,
m t khi ta đã cài NET framework vào máy r i thì có
đ y đ m i DLL c n thi t Có l trong t ng laiMicrosoft cài NET framework chung v i Windows
• Dùng cho t WindowsCE đ n Desktop, đ n Web(scalability)
Trang 9Metadata là các d ki n c t ngh a cho ta bi t v d ki n Thí d XML Schema c a m t XML file là metadata c t ngh a v data structure c a
data trong XML file Chính cái XML Schema c ng là m t XML file Các
.NET application components, g i là Assembly, ch a r t nhi u metadata
đ c t ngh a v chính nó (self describing) Tìm bi t v m t NETapplication đ có th làm vi c v i nó thì g i là Reflection.
g i gi a các components và cho phép các ngôn ng có th h p tác nhau
m t cách thông su t T c là trong NET, VB.NET program có th inheritC# program và ng c l i m t cách hoàn toàn t nhiên
i u này ch ng nh ng giúp các VC++ hay Java programmers b t đ u
Trang 10dùng C# m t cách d dàng mà còn làm cùng m t d án v i VB.NETprogrammers n a.
N u VC++ linh đ ng và hi u n ng h n VB6, thì C# ch ng khác gìVB.NET B n có th port C# code qua VB.NET code r t d dàng Vìsource code VC++ và Java g n g i C# h n VB6 v i VB.NET nên ngoài
đ i có nhi u C# code h n VB.NET Do đó, m c d u hai ngôn ngVB.NET và C# đ u ngang c nhau, n u dùng C# b n đ c l i đi m cónhi u source code s n và nh t là lâu nay ng i ta v n mang n t ng r ngVC++ hay Java programmers m i th t s là các cao th l p trình, và cókhuynh h ng tr l ng các guru VC++/Java cao h n VB programmers
Khi ch y NET application, nó s đ c compiled b ng m t JIT Time) compiler r t hi u n ng ra machine code đ ch y i m này giúp.NET application ch y nhanh h n Java interpreted code trong JavaVirtual Machine Just-In-Time c ng có ngh a là ch ph n code nào c n x
(Just-In-lý trong lúc y m i đ c compiled IL code ch y trong CLR đu c nói là
managed code.
.NET code có th ch y chung v i ActiveX, nh ng code trong ActiveX
đ c g i là unmanaged code, t c là CLR không ch u trách nhi m.
Ngoài vi c allocation và management of memory, CLR còn gi cácrefrerence đ n objects và đ rác (handle garbage collection), t c là thâu
l i các m nh v n memory khi chúng không c n dùng n a Tr c đây, m ikhi m t DLL đu c loaded vào memory, system s ghi nh n có bao nhiêutask dùng nó đ khi task cu i cùng ch m d t thì system unload DLL và
tr l i ph n memory nó dùng tr c đây đ system dùng cho chuy n khác
Ch n u allocate memory đ dùng mà không nh dispose nó thì s bmemory leak (r ), l n l n ta dùng h t memory, b b t bu c ph i reboot
Trang 11OS Nh ng bây gi NET dùng m t process đ c l p đ làm vi c garbagecollection Cái ph n ng ph c a vi c này là khi ta đã Dispose m t
Object r i, ta v n không bi t ch c ch n ch ng nào nó m i th t s bi n
m t Vì garbage collector là m t low priority process làm vi c trongbackground, ch khi nào system memory g n c n nó m i nâng caopriority lên D nhiên, n u mu n, ta có th đòi h i system Dispose m tObject ngay l p t c
Assembly
.NET application xây d ng t các assemblies M i assembly ph i có m t manifest Có th nó n m riêng trong m t file hay n m bên trong m t
module Manifest ch a nh ng metadata sau đây:
• Tên và Version number c a assembly
• Nh ng assembly khác (k c version number c aassembly) mà assembly này tùy thu c vào đ ch y
Trang 12• Types (classes và members) mà assembly này cho
xu t kh u
• Assembly này đòi h i đi u ki n an ninh nào (securitypermissions)
Manifest cho phép ta dùng h n m t version c a assembly (t ng đ ng
v i DLL tr c đây) cùng m t lúc T đây không còn register DLL n a.Thay vào đó, ta ch c n copy các assembly vào m t subfolder /bin c a
ch ng trình chính
Quy t đ nh c a b n
Sau khi bi t qua v NET, câu h i b n s đ t ra là b n có nên h c l p trìnhtrên NET hay không Nói chung, v l p trình có nhi u tôn giáo nhVC++/Java, VB6, Delphi v.v B n có th ch n gi a C# và VB.NET
i v i VB6 programmers, h c l p trình VB.NET s m t m t th i gian,
nh ng không khó Nên nh r ng NET không ph i ch cho ta các ngôn
ng l p trình, mà c m t h th ng tri n khai ph n m m chú tr ng vào
m c tiêu h n là cách th c Các l i ích NET c ng hi n cho b n cách th c
t ng lai Và b o trì NET code thì l i càng kh e h n
tr c đây, vì chính b n có vi t bao nhiêu code (có th
b bugs) đâu mà b o trì
Do đó, có l trong t ng lai NET programmers chúng ta s ng đ n 10
gi sáng m i th c, m t ngày ch c n làm vi c vài ti ng, r nh rang đ làm
v n, câu cá
Trong bài t i ta s h c v Visual Studio.NET interface và b t đ u vi t th
m t program Demo
Trang 13Bài 2 Visual Studio.NETVisual Studio.NET
ch y VisualStudio.NET b n c n ph i Set Time c a Windows l i tr c
cu i tháng 7,2001, eg: 1-July-2001
Visual Studio.NET Beta 2 hi n nay có Service Pak 2, nó cho phép tadùng Visual Studio.NET Beta 2 sau ngày 31-July-2001, t c là không cótime-bomb N u VS.NET version c a b n b gi i h n v th i gian nóitrên, t trong VS.NET b n có th download Service Pak 2 đ cài đ t b ng
cách dùng IDE Menu Command Help | Check for Updates.
Có hai cách đ b t đ u m t project m i trong VS.NET Ho c Click New Project trong trang Web StartPage nh d i đây:
Ho c dùng Menu command File | New | Project gi ng nh trong VB6
IDE:
Trang 14Khi Add New Project, Name s là subfolder name c a New Project B n
có th ch n VB.NET, C# hay VC++.NET project Trong t ng lai chúng
ta s ch nh m vào VB.NET và C# thôi Ngoài ra SetUp and Deploymentbây gi là m t lo i project n m trong IDE c a Visual Studio.NET, takhông c n ph i ch y riêng ch ng trình Package and Deployment bênngoài VB6 IDE nh tr c đây
Solution trong VS.NET có th ch a h n m t Project và bao g m t t c
nh ng files b n li t ra là c n thi t cho Solution N u m t trong nh ngfiles y b thay đ i bên ngoài VS.NET, khi VS.NET khám phá ra nó sload vào trong VS.NET cho b n n u b n đ ng ý
Trang 15m m t Solution/Project có s n, b n có th click link c a tên project trên trang StartPage, hay dùng Menu command File | Open | Project , hay Menu Command File | Recent Projects.
Visual Studio.NET IDE
Trang 16Giao di n c a VS.NET có nh ng đ c đi m gi ng nh Delphi và VisualInterDev ch code đ c generated t đ ng, Windows n m chung thànhTab set hay float kh p n i, và h tr Solution r t thích h p cho vi c tri nkhai c a c đ i.
Toolbox bên trái ch a Controls cho Windows Forms, Web Forms, General Components, Data Components, HTML tags, XML Schema tools v.v Khi m t Form đang hi n th , click lên m t button trongToolbox đ ch n Tool Set b n c n Toolbox tr ng thái Fixed displayed
(nh trong hình trên) khi cây ghim phía trên đâm xu ng B n có th clickcây ghim cho nó n m ngang và vertical Toolbox tab hi n ra bên trái Lúc
y, Toolbox trong tr ng thái Auto Hide (hi n ra/rút vào) nh d i đây:
Trang 17B n có th g i h u h t các Windows hi n th b ng cách dùng Menu
commands View, View | Other Windows và Debug | Windows:
Các Windows bên ph i có th float, n m ch ng lên nhau thành nh ngTabs trong m t Window set hay n m c nh nhau vertically tiled N mTittle bar đ d i nguyên m t Window set đi N m Window Tab c a m tWindow set đ kéo ch m t Window ra B n có th đ ch ng hai
Trang 18Windows l i v i nhau b ng cách n m Tittle bar c a m t Window đ
ch ng lên m t Window khác Th nhích đi, nhích l i, tr c khi buôngWindow ra đ làm quen v i k t qu
Phía d i có Task List Window đ b n gi s sách v di n ti n c a d
án và qu n lý c đ i Khi b n dùng menu command Build | Build đ
compile program, n u có errors chúng s đ c hi n th trong Task ListWindow Double click lên m t hàng error đ mang cursor đ n ch gây raerror y trong code window
Trong hình d i đây, ta c ý comment out hàng Dim sw As StreamWriter:
Ngoài ra, đ Debug bây gi b n có Output Window đ in ra các
messages mà trong VB6 b n dùng Immediate Window Thí d trong VB6
b n vi t:
Debug.Print "Count=" & CStr(Count)
đ in ra trong Immediate Window, thì trong VB.NET b n có th vi t:
Console.WriteLine("Count= {0}", Count)
Trang 19đ in ra trong Output Window.
D nhiên b n v n có th ti p t c dùng Immediate Window trong công tácDebug nh tr c đây trong VB6
Ch a h t, VS.NET còn cho b n Command Window đ ta có th enter
nh ng VS.NET commands đ manipulate IDE, x lý macros, v.v
hi n th Window này b n dùng menu command View | Other Windows | Command Window ti n h n, b n drag title bar c a nó đ
ch ng lên tab bar c a Task List và Output windows
N u ta enter m t command nh :
File.AddNewProject
IDE s hi n th Add New Project dialog.
VS.NET h tr Macro đ b n có th record và playback m t chu i công
tác
Ph ng ti n Integrated Debugging cho ta Debug Menu, Call Stack Window, Breakpoints Window và Watch and Value Display Windows.
Th ng th ng b n s Add Reference các NET components Nh ng b n
c ng có th dùng ActiveX (có s n trong VB6) trong NET application
b ng cách Add Reference COM (click Tab COM trên Add Reference Dialog) .NET s gói ActiveX thành m t NET component (click Yes tr
Trang 20l i câu h i "Would you like to have a wrapper generated for you?").
Ngoài ra dùng Add Reference Projects đ refer đ n DLL c a các Userdeveloped DLL
Demo Program
Trong ch ng trình bi u di n này, ta dùng giao di n h u nh hoàn toàn
b ng ch Vi t Ta có th đánh ch Vi t (Unicode) cho Title Bar, Menu,
TextBox, ListBox v.v
N u b n c n m t key input software cho ch Vi t h tr Unicode thì
download VPS, Vietkey hay Unikey.
Các documents nh Form, XML v.v trong NET project đ u đ c Saved
v i UTF-8 encoding.
Trang 21Trong program S thú Saigon này ta có hai Listboxes Khi ch y, b n có
th drag tên các lo i thú t Listbox1 (bên trái) đ drop vào Listbox2 (bên
ph i) Phía d i là m t Label dùng đ hi n th ngày gi Có m t button
L u tr danh sách đ ta save data trong Listbox2 vào file animal.txt trong subFolder bin Ngoài ra b n c ng có th dùng Main menu Item c danh sách đ Load data t file animal.txt vào Listbox2
Nh ng components không c n ph i hi n ra lúc runtime nh Timer, Menu, Tooltip v.v n m trong m t Component Tray (mâm) riêng Mu n
Edit MainMenu, click lên MainMenu1 icon r i đánh tr c ti p vàoMainMenu Thêm các menuitems m i b ng cách đánh th ng vào các ch
có ch Type Here L u ý các Tabs bên trên Editing Area khi b n m
nhi u forms
Trang 22
Edit MainMenu, insert m t Separator
Trang 23Chú ý danh sách các References đ c li t kê trong Solution Explorer.
Edit Shortcut cho m t menu item
Trang 24Button bây gi ch ng nh ng có th ch a hình mà còn cho b n ch n v trí
c a hình trong button b ng ImageAlign n a.
B n có th Anchor m t Button đ nó dính vào m t góc c a form đ khiform resizes thì Button ch y theo góc y c a form đây ta click hai
thanh D i và Ph i cho chúng tr nên màu đen đ ch n Anchor Bottom
và Right.
Trang 25Trong lúc thi t k ta có th edit các List items c a m t Listbox b ng cách
m property Items Collection ra và Edit vào m t trang.
Walk Through Code
Trong NET, các classes đ c chia ra thành nhi u nhóm nh System.IO,System.XML, System.Data, System.Drawing v.v Ngoài ra trong m i nhóm l i còn chia thành nh ng nhóm con, cháu nhSystem.Windows.Forms, System.Windows.Collections,System.Windows.Diagnostics, v.v M c d u m t khi đã Project | Add
Reference các NET components y ta có th dùng chúng trong program
Trang 26nh ng v n ph i biên m t tên dài nh System.IO.StreamReader đ tránh
l n l n có th vi t tên class g n h n ta dùng Imports nh Imports System.IO, sau đó ta ch c n vi t StreamReader là đ Công vi c
Imports này đ c g i là importing Namespace (c a System.IO).
T ng t nh th , đ có th ti p t c dùng các Functions Left, Right, Mid
c a VB6 trong NET ta có th thêm câu Imports VB6 = Microsoft.VisualBasic đ u ch ng trình Sau đó ta có th vi t: AppPath = VB6.Left(AppPath, Pos)
Nguyên program chúng ta t i đây là Public Class Form1 Form1 th a k
standard form class c a NET Framework nên ta declare:
Dim AppPath As String
PrivateSub MenuItem4_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles MenuItem4.Click
End ' Terminate the program
Trang 27Dim AppPath As String
Dim Pos As Integer
' Fetch full pathname of the EXE file
AppPath = System.Reflection.Assembly.GetExecutingAssembly.Location
' Locate the last slash in the pathname string
Pos = InStrRev(AppPath, "/")
' Extract the part up to the backslash
AppPath = VB6.Left(AppPath, Pos)
' Initialise the tooltip for Listbox1
ToolTip1.SetToolTip(ListBox1, "Xin n m kéo tên m t con thú qua Listbox bên ph i")
End Sub
Hãy xem cách vi t m t Event Handler nh :
Private Sub MenuItem4_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles MenuItem4.Click
Khác v i VB6, nó có thêm các ch Handles MenuItem4.Click phía cu i
đ nói handling event Click c a MenuItem4 M i Event Handler đ u
đ c passed cho hai parameters: ByVal sender As System.Object vàByVal e As System.EventArgs Parameter th nh t, sender, là Object ch
đ ng chuy n RaiseEvent, còn e là Event có ch a nhi u d ki n khác nhautùy theo tình hu ng Khi edit code b n có th nh Intellisense c a IDEgiúp đ cho bi t parameter e ch a nh ng d ki n gì
Trong NET, v n đ handling event không ph i là m t đi u bí hi m nhtrong VB6 Khi m t control có th RaiseEvent thì ch ng nh ng m t, mà
Trang 28nhi u controls khác đ u có th ng ký (Register) đ đ c Thông báo(Notified) khi Event y xãy ra.
Control RaiseEvent đ c g i là Publisher (Nhà Xu t B n), các controls
mu n handle event đ c g i là Subcribers (nh ng Ng i t Mua dài
h n) D nhiên cách handle event c a m i control đ u khác nhau, d u
r ng đ c passed cho cùng hai parameters Các EventHandlers này đ c
g i là Delegates (nh ng Nhà i Di n lãnh trách nhi m gi i quy t m t s
1 Ng i giao c m s đ "gà-mên" c m tr c nhà, c nhbên h p th Khi đi làm v , b n s mang nó vô nhà.Trong tr ng h p này b n x lý công vi c khi nào
ti n, t c là lúc v đ n nhà Cách này có đi m b t l i làhôm nào b n đi làm v tr thì c m có th b thiêu vì
tr i nóng
B n đ a chìa khóa nhà cho ng i giao c m gi Khi giao c m, ng i y
s t đ ng m c a vô nhà đ "gà-mên" th ng vào trong t l nh Trong
cách này Event GiaoC m đ c handled b ng EventHandler Sub OpenDoorPutIntoFridge, do ng i giao c m x lý, ch không ph ichính b n
Nh th , là Subscriber (ng i n c m tháng giao t n nhà) b n registerEventHandler "Sub OpenDoorPutIntoFridge" v i ng i giao c m qua
Trang 29vi c đ a chìa khóa Khi Event "GiaoC m" xãy ra, ng i giao c m t
đ ng executes Sub OpenDoorPutIntoFridge K thu t giao AddressOf
Sub cho m t Object khác đ nó execute khi c n còn có tên là CallBack.
Do đó, ngay c trong lúc runtime (không ph i khi design), đ Register
EventHandler Sub MenuItem4_Click v i system đ handle Event Click
c a MenuItem4 ta có th execute code:
AddHandler MenuItem4.Click, AddressOf MenuItem4_Click
L u ý cách ta dùng control ToolTip1 đ register Tooltip Text v iListbox1 Ta có th dùng ch m t control ToopTip1 đ register nhi uTooltip Texts v i nh ng controls khác nhau nh TextBox, ComboBox.v.v
B n có th thay th hàng:
AppPath = VB6.Left(AppPath, Pos)
b ng
AppPath = AppPath.SubString(0,Pos)
Trong VB6, Visual components c a m t form đ c ch a d i d ng Text
di n t các controls r t d đ c ngay đ u form file, nh ng nó không ph i
là VB6 code
Trong NET, Visual components c a m t form đ c ch a d i d ng code
th t s T c là, n u không có VS.NET ta có th dùng Notepad vi t code
nh th và sau khi compile, nó v n ch y y h t nh trong tr ng h p tadùng VS.NET i m này gi ng nh trong Java, ta có th vi t code b ngNotepad và dùng Command line đ compile và link code file v i cáccomponents khác
Thí d nh khi ta vi t m t VB.NET program đ n gi n đ ch y trên trongDOS Console, ta có th compile nó nh sau:
Trang 30vbc /t:exe /r:system.dll mysource.vb
vbc là VisualBasic Compiler, /t: có ngh a target t c là EXE đ ch y
trong DOS console /r: có ngh a reference đ n DLL
ôi khi ta c ng có th Edit generated code, nh ng b n nh backup code
tr c, đ r i form không th hi n th vì b error, ch cho ta m t trang gi y
tr ng, thì ta còn có đ ng restore
Trang 31M i class đ u có ít nh t m t Sub New, g i là Constructor (gi ng nh Class_Initialize c a VB6 class) và Sub Dispose, g i là Destructor ó
là hai Sub dùng đ t o ra và phá h y Object Vì Form1 th a k t
Standard Form nên trong Sub New tr c h t ph i g i constructor MyBase.New() c a cha nó, và trong Sub Dispose sau h t ph i g i destructor MyBase.Dispose c a cha nó.
M Class View Window
B n có th Navigate trong Code qua Class View DoubleClick lên tên c aObject hay Sub/Function trong Class View đ mang cursor đ n code c a
nó trong trang Edit
Trang 32Bi u di n DragDrop
Code c a DragDrop, l u ý ta ph i vi t thêm Sub ListBox2_DragEnter
đ handle Event DragEnter
PrivateSub ListBox1_MouseDown(ByVal sender As Object, ByVal e AsSystem.Windows.Forms.MouseEventArgs) Handles
ListBox1.MouseDown
' Start the DragDrop process
Dim ItemIndex AsInteger
Trang 33' Identify the Listbox item that has mousedown using mouse coordinates ItemIndex = ListBox1.IndexFromPoint(New System.Drawing.Point(e.X, e.Y))
' Start the DragDrop process passing along the ListboxItem as
' Apply the copy effect
' AND remember to set the property Allow Drop of Listbox2 to TRUE
Trang 34' Obtain the Source ListItem String
PrivateSub MenuItem2_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles MenuItem2.Click
' Read the list of animals from a text file into Listbox2
Dim sr As StreamReader
Dim Pos As Integer
Dim TStr As String
ListBox2.Items.Clear() ' Clear Listbox2
' Use a StreamReader to open the UTF-8 file to read.
sr = New StreamReader(AppPath & "animals.txt")
' Read each line in the file.
' When the end of the file is reached, return the value "-1".
Dim x As String
Trang 35While sr.Peek <> -1
x = sr.ReadLine() ' Read a line
ListBox2.Items.Add(x) ' Add it to Listbox2
End While
sr.Close() ' Close the file
End Sub
Private Sub SaveAnimalList()
' Save the content of Listbox2 into a UTF-8 Text file
Dim i As Integer
Dim sw As StreamWriter
' Open the file to write in UTF-8 mode, using a StreamWriter.
sw = New StreamWriter(AppPath & "Animals.txt")
' Write each line in the Listbox.
' Display Date and Time every half a second
Label3.Text = DateTime.Now.ToLongDateString & " " & DateTime.Now.ToLongTimeString
End Sub
B n c ng có th hi n th ngày gi trong format khác b ng cách vi t:
Label3.Text = DateTime.Now.ToString("ddd dd/MM/yyyy hh:mm:ss")
đ có: WED 18/07/2001 09:16:42
Trang 36ý trong Format string ta dùng MM cho Month và mm cho Minute.
Trang 37D u v y, đ i v i VB6 programmers h c VB.NET không khó Lý do là
VB.NET không cho thêm nhi u t m i (reserved words) Nói chung các
ý ni m m i trong VB.NET đ u d l nh h i, nh t là khi đem ra áp d ng
cách th c t ó là nh Microsoft v n gi nguyên t c d u và làm s n
(c a VB6) nh ng gì r c r i phía sau sân kh u, đ ta có th t p trung vào
vi c tìm ki m m t gi i pháp, thay vì quá b n tâm vào cách th c làm m t
vi c gì Chính nguyên t c y đã giúp Microsoft chiêu m đ c 3 tri uVB6 programmers trên kh p th gi i VB.NET c ng hi n cho VBprogrammers m t công c r t h u hi u đ dùng cho m i hoàn c nh, tdatabase, desktop, distributed, internet cho đ n real-time hay mobile(pocket PC)
Nh ng u đi m (features) c a VB.NET đ n t ch c n ng c a NET Framework Nó mang đ n ph ng ti n l p trình cho m ng cách ObjectOriented nh XML, Remoting, Streaming, Serialisation, Threading v.v
Nh ng th này tuy l nh ng không khó h c, ng c l i s ti t ki m r tnhi u thì gi
M c d u VB6 là m t ngôn ng l p trình tr ng thành và hi u n ng, ch c
ch n hãy còn t n t i trong nhi u n m n a, nh ng h c thêm VB.NET là
m t đ u t t ng đ i ít t n kém và đ m b o huê l i g p bao nhiêu l ntrong hàng th p niên t i
Trong bài này ta s bàn v nh ng đi m khác nhau gi a VB6 và VB.NET
t quan đi m ngôn ng l p trình Trong m t bài khác ta s bàn v nh ng
ch c n ng i t ng (Object Oriented) c a VB.NET
Namespaces
Namespaces là m t cách đ t tên đ giúp s p đ t các Classes ta dùngtrong program m t cách th t h u d tìm ki m chúng T t c code trong
Trang 38.NET, vi t b ng VB.NET, C# hay ngôn ng nào khác, đ u đ c ch atrong m t namespace.
i m này c ng áp d ng cho code trong NET system class libraries
Ch ng h n, các classes c a WinForms đ u n m trongSystem.Windows.Forms namespace Và các classes dùng cho collections
nh Queue, Stack, Hashtable v.v đ u n m trong System.Collectionsnamespace
T t c code ta vi t trong program c a mình c ng đ u n m trong cácnamespaces
Tr c đây trong VB6, m i khi nh c đ n m t Class trong m t COM tên
CompName ta vi t CompName.classname (còn g i là PROGID) , t c là
c ng dùng m t d ng namespace
Tuy nhiên ph ng pháp này có m t vài gi i h n:
• a ch c a class b bu c c ng vào component đang
Nhi u assemblies có th n m trong cùng m t namespace, ngh a là classes
tuyên b trong các components khác nhau có th có chung m tnamespace i u này c ng áp d ng xuyên qua các ngôn ng , giúp cho
m t class vi t trong VB.NET có th n m trong cùng m t namespace v i
m t class vi t trong C#, ch ng h n
H n n a, trong m t assembly có th có nhi u namespaces, dù r ng thông
Trang 39th ng ta ch dùng m t namespace duy nh t cho t t c các classes trongy.
Nh là m t assembly trong NET thì đ i khái t ng đ ng v i m t COM component.
T t c code trong NET đ u n m trong nh ng assemblies.
By default, tên c a project đ c dùng làm namespace N u b n right click
lên project name NETListbox trong Solution Explorer c a program Demo, r i ch n Properties trong popup menu, IDE s hi n th Property
Pages dialog nh d i đây:
B n th y Root namespace c a project là NETListbox B n có th thay
đ i tên namespace y n u b n mu n
Namespaces có th đ c phân chia th b c gi ng nh Folders trong m tFile Directory Nó s giúp user s p đ t các classes theo đúng nhóm chotrong sáng và d đ c Thí d b n đang vi t m t program cho m t h ng
s n xu t, b n s dùng namespace NhàS nXu t root level Bên trong
Trang 40Nh th ta đã đ nh ngh a m t base namespace tên NhàS nXu t, v i
nh ng namespaces con, cháu bên trong, m i namespace có ch a classes,modules, enums, structures và các namespaces khác
M i namespace ch a nh ng ph n c a code thích h p cho nó trongprogram nói chung Trong File Directory, ta có th có hai files dù mangcùng tên nh ng n m trong hai folders khác nhau Gi ng nh v y, trong.NET ta có th có hai classes có cùng m t tên nh ng n m trong hainamespaces khác nhau ó là vì khi ta vi t tên c a m t class v i cnamespace c a nó thì có th phân bi t v i m t class khác v i cùng tên
Local và Global Namespaces
Khác v i COM components v i "namespace" c a chúng áp d ng cho
kh p c computer, namespaces c a NET thông th ng là Local, ch có application program c a nó th y mà thôi .NET c ng h tr Global
namespace, nh ng ph i đ c ký tên (digitally signed) và đ ng ký v i.NET runtime đ ch a nó trong global assembly cache.Công vi c làm m t namespace Global r c r i nh th đ gi m thi u
tr ng h p ta tr v tình tr ng DLL hell tr c đây
Dùng Namespaces
Ta có th dùng namespaces b ng cách nói th ng ra (explicitly) v inguyên tên (Direct Addressing) hay hàm ý (implicitly) v i Importkeyword Nh ng đi u tiên quy t là ta ph i reference cái assembly ch anamespace mà ta mu n dùng Ta th c hi n vi c y v i Menu command
Project | Add References Khi Add References dialog hi n ra, ch n Tab NET cho standard NET components hay Tab Projects cho DLL c a
m t NET project khác , highlight DLL b n mu n r i click Select button,
đo n click OK.