Các bài tập Microsoft .NET

Các bài tập Microsoft .NET  
1
MỤ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  
Các bài tập Microsoft .NET  
2
Bà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:  
•
•
•
•
EN_VS_NET_BETA2_WINCUP.exe  
EN_VS_NET_BETA2_CD1.exe  
EN_VS_NET_BETA2_CD2.exe  
EN_VS_NET_BETA2_CD3.exe  
Chạy EN_VS_NET_BETA2_WINCUP.exe để Unzip nó vào một folder  
trong một harddisk (eg: E:\CD\WINCUP).  
Lần lượt chạy EN_VS_NET_BETA2_CD1.exe,  
EN_VS_NET_BETA2_CD2.exe và EN_VS_NET_BETA2_CD3.exe để  
Unzip chúng vào chung một folder trong một harddisk (eg: E:\CD ).  
Việc Unzip files có thể rất lâu, bạn phải kiên nhẫn chờ cho đến khi nó kết  
thú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  
Các bài tập Microsoft .NET  
3
hay 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 để ta  
dù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ờ  
Các bài tập Microsoft .NET  
4
Architect của application software hiện giờ có nói chung ba tầng (three  
tiers): 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 Java  
applet. Từ browser based Client ta dùng http để nối với middle tier qua  
IIS/ASP (có thể dùng COM ở đây).  
Middle Tier: Chứa các rules để validate data trên client và các business  
rules khác. Ta dùng VB6 ở đây, nhưng cách triển khai COM với những  
Object Oriented Programming concepts rắc rối hơn bình thường. Ta phải  
thiết kế sao cho các components scale well (dùng cho mọi cở). Có khi  
dù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 hay  
Oracle. Ngoài ra còn có Exchange hay các database xưa của mainframe.  
Do đó ta thấy:  
• Desktop tools không thích hợp cho Distributed System  
hay Internet  
Phải dùng nhiều thứ codes như VB6 Code, VBScript,  
JavaScript, Dynamic HTML, Cascading Style Sheet,  
VC++, Stored Procedures (Transact-SQL trong  
SQLServer hay PL-SQL trong Oracle).  
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  
Các bài tập Microsoft .NET  
5
hợ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ông  
compatible với các versions trước đó mà applications  
trê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ố Object  
Oriented features khác.  
• Khả năng Error handling giới hạn: On Error Goto ...,  
On Error Resume Next  
Các bài tập Microsoft .NET  
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ước  
response 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 như  
VC++.  
• Không tiện cho Web development: WebClass không  
thà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 từ  
con 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 nhau  
trong 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 Pocket  
Computers, đề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à .NET  
Framework. Nó sẽ trở thành một phần của MS Windows và sẽ được port  
qua 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à Visual  
Studio.NET rất ít bugs, có thể dùng cho software development ngay từ  
bâ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,  
Các bài tập Microsoft .NET  
7
gồ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êng  
nhau, không lộn xộn như trong ASP. Ngoài ra ASP.NET code hoàn toàn  
Object Oriented.  
Web Services giống như những Functions mà ta có thể gọi dùng từ các  
URL 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ới  
database mẹ qua ADO, application trong .NET làm việc với portable  
database 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ằm  
trên computer khác) dễ dàng như một local procedure. Kỹ thuật ấy gọi là  
Remoting.  
Các bài tập Microsoft .NET  
8
Security 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ính  
sau đây:  
• Việc triển khai đơn giản và nhanh hơn: developers sẽ  
dành thì giờ quyết định ráp những software  
components nào lại với nhau nhiều hơn là lập trình  
thật sự.  
• Các công tác thiết yếu ("plumbing") như memory  
management, process communication .v.v. được lo  
liệu tự động.  
• Các công cụ hổ trợ rất đầy đủ (no more API): .NET  
Framework Base classes rất phong phú cho file,  
network, serialisation, mã hóa, XML, database, v.v..  
• 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 lai  
Microsoft cài .NET framework chung với Windows.  
• Dùng cho từ WindowsCE đến Desktop, đến Web  
(scalability).  
Các bài tập Microsoft .NET  
9
Metadata  
Metadata 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 .NET  
application để có thể làm việc với nó thì gọi là Reflection.  
Hổ trợ và phối hợp mọi ngôn ngữ lập trình  
Common Language Runtime (CLR) là trung tâm điểm của .NET  
Famework, nó là hầm máy để chạy các năng tính của .NET. Trong .NET,  
mọi ngôn ngữ lập trình đều được compiled ra Microsoft Intermediate  
Language (IL) giống giống như byte code của Java. Nhờ bắt buộc mọi  
ngôn ngữ đều phải dùng cùng các loại data types (gọi là Common Type  
System) nên Common Language Runtime có thể kiểm soát mọi interface,  
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ể inherit  
C# 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  
Các bài tập Microsoft .NET  
10  
dùng C# một cách dễ dàng mà còn làm cùng một dự án với VB.NET  
programmers 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 ngữ  
VB.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ằng  
VC++ 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 (Just-In-  
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 Java  
Virtual Machine. Just-In-Time cũng có nghĩa là chỉ phần code nào cần xử  
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ác  
refrerence đế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ỗi  
khi một DLL đuợc loaded vào memory, system sẽ ghi nhận có bao nhiêu  
task 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ẽ bị  
memory leak (rỉ ), lần lần ta dùng hết memory, bị bắt buộc phải reboot  
Các bài tập Microsoft .NET  
11  
OS. Nhưng bây giờ .NET dùng một process độc lập để làm việc garbage  
collection. 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 trong  
background, chỉ khi nào system memory gần cạn nó mới nâng cao  
priority lên. Dĩ nhiên, nếu muốn, ta có thể đòi hỏi system Dispose một  
Object 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ủa  
assembly) mà assembly này tùy thuộc vào để chạy  
Các bài tập Microsoft .NET  
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 (security  
permissions)  
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ình  
trên .NET hay không. Nói chung, về lập trình có nhiều tôn giáo như  
VC++/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  
tiển là:  
• Kỹ thuật .NET sẽ hoành hành trên giang hồ trong từ 5  
đến 10 năm tới.  
• Tính trung bình, lập trình trong .NET sẽ tiết kiệm thì  
giờ cho bạn từ 25% đến 50% so với trước đây. Lý do  
là trong .NET bạn sẽ nghiên cứu để dùng component  
nào nhiều hơn là thật sự viết code. Hơn nữa, hầu như  
code nào bạn cần phải viết, bạn sẽ dùng nó lại trong  
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 .  
Các bài tập Microsoft .NET  
13  
Bài 2  
Visual Studio.NET  
Visual 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 ta  
dù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ói  
trê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:  
Các bài tập Microsoft .NET  
14  
Khi 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 Deployment  
bây giờ là một loại project nằm trong IDE của Visual Studio.NET, ta  
không cần phải chạy riêng chương trình Package and Deployment bên  
ngoà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ững  
files ấy bị thay đổi bên ngoài VS.NET, khi VS.NET khám phá ra nó sẽ  
load vào trong VS.NET cho bạn nếu bạn đồng ý.  
Các bài tập Microsoft .NET  
15  
Để mở 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  
Các bài tập Microsoft .NET  
16  
Giao diện của VS.NET có những đặc điểm giống như Delphi và Visual  
InterDev ở chỗ code được generated tự động, Windows nằm chung thành  
Tab set hay float khắp nơi, và hổ trợ Solution rất thích hợp cho việc triển  
khai 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 trong  
Toolbox để 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ể click  
câ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:  
Các bài tập Microsoft .NET  
17  
Bạ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ững  
Tabs trong một Window set hay nằm cạnh nhau vertically tiled. Nắm  
Tittle bar để dời nguyên một Window set đi. Nắm Window Tab của một  
Window set để kéo chỉ một Window ra. Bạn có thể để chồng hai  
Các bài tập Microsoft .NET  
18  
Windows 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ông  
Window 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 List  
Window. Double click lên một hàng error để mang cursor đến chỗ gây ra  
error ấ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)  
Các bài tập Microsoft .NET  
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ác  
Debug 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ả  
Các bài tập Microsoft .NET  
20  
lờ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 User  
developed 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.  
Tải về để xem bản đầy đủ
pdf 174 trang baolam 53360 Free
Bạn đang xem 20 trang mẫu của tài liệu "Các bài tập Microsoft .NET", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfcac_bai_tap_microsoft_net.pdf