Tải bản đầy đủ (.pdf) (174 trang)

Tài liệu Bài tập Microsoft Visual Studio.Net ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.02 MB, 174 trang )

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.
Các bài tp Microsoft .NET 21
Trong 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ào
MainMenu. 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.
Các bài tp Microsoft .NET 22

Edit MainMenu, insert mt Separator
Các bài tp Microsoft .NET 23
Chú ý danh sách các References đc lit kê trong Solution Explorer.
Edit Shortcut cho mt menu item.
Các bài tp Microsoft .NET 24
Button 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 đ khi
form 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.
Các bài tp Microsoft .NET 25
Trong 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 nh
System.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

×