SlideShare a Scribd company logo
1 of 222
Download to read offline
1
Chương M t - Hoan nghênh ñ n v i VB6
Chào m ng b n ñ n v i Visual Basic 6
Dùng VB6 là cách nhanh và t t nh t ñ l p trình cho Microsoft Windows. Cho dù b n là chuyên
nghi p hay m i m ñ i v i chương trình Windows, VB6 s cung c p cho b n m t b công c hoàn
ch nh ñ ñơn gi n hóa vi c tri n khai l p trình ng d ng cho MSWindows.
Visual Basic là gì? Ph n "Visual" ñ c p ñ n phương phàp ñư c s d ng ñ t o giao di n ñ h a
ngư i dùng (Graphical User Interface hay vi t t c là GUI) . Có s n nh ng b ph n hình nh, g i là
controls, b n tha h s p ñ t v trí và quy t ñ nh các ñ c tính c a chúng trên m t khung màn hình, g i là
form. N u b n ñã t ng s d ng chương trình v ch ng h n như Paint, b n ñã có s n các k năng c n
thi t ñ t o m t GUI cho VB6.
Ph n "Basic" ñ c p ñ n ngôn ng BASIC (Beginners All-Purpose Symbolic Instruction Code), m t
ngôn ng l p trình ñơn gi n, d h c, ñư c ch ra cho các khoa h c gia (nh ng ngư i không có thì gi
ñ h c l p trình ñi n toán) dùng.
Visual Basic ñã ñư c ra t MSBasic, do Bill Gates vi t t th i dùng cho máy tính 8 bits 8080 hay Z80.
Hi n nay nó ch a ñ n hàng trăm câu l nh (commands), hàm (functions) và t khóa (keywords). R t
nhi u commands, functions liên h tr c ti p ñ n MSWindows GUI. Nh ng ngư i m i b t ñ u có th
vi t chương trình b ng cách h c ch m t vài commands, functions và keywords. Kh năng c a ngôn
ng này cho phép nh ng ngư i chuyên nghi p hoàn thành b t kỳ ñi u gì nh s d ng ngôn ng l p
trình MSWindows nào khác.
Ngư i mang l i ph n "Visual" cho VB là ông Alan Cooper. Ông ñã gói môi trư ng ho t ñ ng c a
Basic trong m t ph m vi d hi u, d dùng, không c n ph i chú ý ñ n s tinh x o c a MSWindows,
nhưng v n dùng các ch c năng c a MSWindows m t cách hi u qu . Do ñó, nhi u ngư i xem ông
Alan Cooper là cha già c a Visual Basic.
Visual Basic còn có hai d ng khác: Visual Basic for Application (VBA) và VBScript. VBA là ngôn
ng n m phía sau các chương trình Word, Excel, MSAccess, MSProject, .v.v.. còn g i là Macros.
Dùng VBA trong MSOffice, ta có th làm tăng ch c năng b ng cách t ñ ng hóa các chương trình.
VBScript ñư c dùng cho Internet và chính Operating System.
Dù cho m c ñích c a b n là t o m t ti n ích nh cho riêng b n, trong m t nhóm làm vi c c a b n,
trong m t công ty l n, hay c n phân b chương trình ng d ng r ng rãi trên th gi i qua Internet, VB6
cũng s có các công c l p trình mà b n c n thi t.
Các n b n Visual Basic 6
Có ba n b n VB6: Learning, Professional và Enterprise. Chúng ta hãy gát qua n b n Learning. B n
có th dùng n b n Professional hay Enterprise.
n b n Professional cung c p ñ y ñ nh ng gì b n c n ñ h c và tri n khai m t chương trình VB6,
nh t là các control ActiveX, nh ng b ph n l p trình ti n ch và r t h u d ng cho các chương trình
ng d ng (application programs) c a b n trong tương lai. Ngoài ñĩa compact chính cho VB6, tài li u
ñính kèm g m có sách Visual Studio Professional Features và hai ñĩa CD Microsoft Developer
Network (MSDN).
n b n Enterprise là n b n Professional c ng thêm các công c Back Office ch ng h n như SQL
Server, Microsoft Transaction Server, Internet Information Server.
Cài ñ t VB6
ð cài ñ t VB6, máy tính c a b n c n ph i có m t ñĩa CD-ROM (CD drive) . B n c n ít nh t 32 MB
RAM, 2 GB hard disk và CPU Pentium II. Khi b VB6 CD vào CD drive, nó s t kh i ñ ng ñ
display menu cho b n ch n nh ng th gì c n Setup, hãy click Install Visual Basic 6.0 ñ cài VB6.
2
Ngo i tr các file h ñi u hành (Operating System) trong thư m c (folder) Os, các file trong ñĩa
compact ñ u không b nén. Vì th , b n có th s d ng chúng tr c ti p t ñĩa. Ví d , có nhi u công c
và thành ph n trong folder Tools v n có th ñư c cài ñ t tr c ti p t CD-ROM.
Ngoài ra, b n có th ch y Setup khi nào c n thi t. Ví d , b n có th ch y Setup ñ cài ñ t l i Visual
Basic trong folder khác, ho c ñ cài ñ t thêm b t các ph n c a VB6.
N u vì lý do gì h th ng không install các ñĩa compact MSDN (b n s khám phá ra ñi u n y khi th y
Help không có m t lúc ch y VB6), b n có th cài ñ t chúng tr c ti p t ñĩa s 1 c a b MSDN.
ð b xung và xóa các thành ph n VB:
1. B ñĩa compact vào CD drive.
2. N u menu không t ñ ng hi n lên thì ch y chương trình Setup có s n tong folder g c trên ñĩa
compact.
3. Ch n nút Custom trong h p tho i (dialog) Microsoft Visual Basic 6.0 Setup.
4. Ch n hay xóa các thành ph n b ng cách check hay uncheck các h p danh sách Options c a dialog
Custom.
5. Th c hi n các ch d n Setup trên màn hình.
Ghi chú: Trong lúc cài VB6, nh ch n Graphics n u không b n s thi u m t s hình nh như icons,
bitmaps v.v... ðáng l Microsoft cho t ñ ng cài ñ t Graphics, t c là Default (không có nói gì) thì cài
ñ t Graphics.
Integrated Development Environment (IDE) c a VB6
Khi kh i ñ ng VB6 b n s th y m ra nhi u c a s (windows), scrollbars, v.v.. và n m ch ng lên là
New Project dialog. ñây VB6 cho b n ch n m t trong nhi u lo i công trình.
Ch n Standard EXE. M t lát sau trên màn nh s hi n ra giao di n c a môi trư ng phát tri n tích h p
(Integrated Development Environment - IDE ) gi ng như dư i ñây:
3
IDE c a VB6 bao g m các y u t sau:
Menu Bar
Ch a ñ y ñ các commands mà b n s d ng ñ làm vi c v i VB6, k c các menu ñ truy c p các
ch c năng ñ c bi t dành cho vi c l p trình ch ng h n như Project, Format, ho c Debug. Trong Menu
Add-Ins có Add-Ins Manager cho phép b n g n thêm nh ng menu con nhi m ý ñ ch y các chương
trình l i ích cho vi c l p trình.
Trong Add-Ins Manager dialog b n ch n m t Add-In r i check m t hay nhi u h p trong khung Load
behavior:
Toolbars (Debug, Edit, form Editor, Standard)
4
Các toolbars có hình các icons cho phép b n click ñ th c hi n công vi c tương ñương v i dùng m t
menu command, nhưng nhanh và ti n hơn. B n dùng menu command View | Toolbars (click lên
menu command View cho popupmenu hi n ra r i click command con Toolbars) ñ làm cho các
toolbars hi n ra hay bi n m t ñi. B n có th thay ñ i v trí m t toolbar b ng cách n m vào hai g ch
vertical n m bên trái toolbar r i d i toolbar ñi ch khác (n m ñây nghĩa là ñ pointer c a mouse lên
ch ch m ñ trong hình phía dư i r i b m xu ng và gi nút bên trái c a mouse, trong khi kéo pointer
ñi nơi khác).
Ngoài ra b n cũng có th s a ñ i các toolbars theo ý thích b ng cách dùng Menu command View |
Toolbars | Customize...
Toolbox
ðây là h p ñ ngh v i các công c , g i là controls, mà b n có th ñ t lên các form trong lúc thi t k
(design). N u Toolbox bi n m t, b n có th display nó tr l i b ng cách dùng menu command View |
Toolbox. B n có th khi n toolbox display nhi u controls hơn b ng cách ch n Components... t
context menu (ch n Toolbox r i b m nút ph i c a mouse ñ display context menu) hay dùng menu
command Project | Components. Ngoài vi c trình bày Toolbox m c ñ nh, b n có th t o cách trình
bày khác b ng cách ch n Add Tab... t context menu và b sung các control cho tab t k t qu .
Project Explorer
S li t kê các forms và các modules trong project hi n hành c a b n. M t project là s t p h p các
files mà b n s d ng ñ t o m t trình ng d ng. T c là, trong VB6, khi nói vi t m t program có nghĩa
là tri n khai m t project.
Properties window
5
Li t kê các ñ c tính c a các forms ho c controls ñư c ch n. M t property là m t ñ c tính c a m t
object ch ng h n như size, caption, ho c color. Khi b n s a ñ i m t property b n s th y hi u qu
ngay l p t c, thí d thay ñ i property Font c a m t Label s th y Label y ñư c display b ng Font ch
m i. Khi b n ch n m t Property c a control hay form trong Properties window, phía bên ph i ch
value c a property có th display ba ch m (. . .) hay m t tam giác ch a xu ng. B m vào ñó ñ display
m t dialog cho b n ch n value. Thí d dư i ñây là dialog ñ ch n màu cho property ForeColor c a
control Label1.
Form Layout
B n dùng form Layout ñ ch nh v trí c a các forms khi form hi n ra l n ñ u lúc chương trình ch y.
Dùng context command Resolution Guides ñ th y n u dùng m t màn nh v i ñ m n (resolution) t
hơn, thí d như 640 X 480, thì nó s nh như th nào.
Form Designer
Dùng ñ thi t k giao di n l p trình. B n b sung các controls, các ñ h a (graphics), các hình nh và
m t form ñ t o s ma sát mà b n mu n. M i form trong trình ng d ng c a b n có designer form
riêng c a nó. Khi b n maximise m t form designer, nó chi m c khu làm vi c. Mu n làm cho nó tr
l i c bình thư ng và ñ ng th i ñ th y các form designers khác, click nút Restore Window góc bên
ph i, phía trên.
Immediate Window
Dùng ñ g r i (debug) trình ng d ng c a b n. B n có th display d ki n trong khi ch y chương
trình ng d ng. Khi chương trình ñang t m ng ng m t break point, b n có th thay ñ i giá tr các
variables hay ch y m t dòng chương trình.
View Code button
Click lên nút n y ñ xem code c a m t form mà b n ñã ch n. Window c a code gi ng như dư i ñây:
6
Trong Code window b n có th ch n display t t c Sub c a code cùng m t lúc như trong hình hay
display m i l n ch m t Sub b ng cách click button có hình ba dòng n m góc bên trái phía dư i.
View form button
Click lên nút n y ñ xem form c a m t form mà b n ñã ch n.
Ghi chú: Nhi u windows trong IDE như Toolbars, Toolbox, Project Explorer .v.v..có th trôi lình bình
(floating) hay ñ u b n (docked). B n có th thay ñ i v trí chúng b ng cách n m vào Title Bar c a
window r i d i ñi. Dĩ nhiên b n cũng có th m r ng hay làm nh m t window b ng cách d i m t
c nh vertical hay horizontal c a nó. Khi ñ m t window lên trên m t window khác chúng có th tìm
cách dính nhau.
Trong hình dư i ñây, Properties Window và Form Layout ñã ñư c kéo ra ngoài cho floating.
Nh n tr giúp trong khi ñang làm vi c
Trong khi l p trình b n có th c n tìm hi u các thông tin liên quan ñ n các commands, functions .v.v..
c a VB6. B n có th kh i ñ ng Microsoft Developer Network | MSDN Library Visual Studio 6.0
t nút Start, hay click Help | Contents t Menu Bar c a VB6, hay ch n m t keyword (highlight
keyword) r i n F1 ñ ñ c Help.
N i dung Help bao g m nhi u ñ c ñi m ñư c thi t k ñ th c hi n vi c tìm ki m thông tin d dàng
hơn. B n có th d a trên Contents ñ ñ c tài li u như m t quy n sách, Index ñ ñ c nh ng ño n có
nh c ñ n m t keyword hay Search ñ tìm m t tài li u nhanh hơn. Ví d , vi c g r i thông tin b t
ngu n t nhi u ñ c tính khác nhau ph thu c vào lo i ñ án mà b n ñang làm vi c. Các liên k t ñư c
7
mô t trong ph n n y th c hi n vi c tìm ki m d dàng hơn.
Ngoài ra, b n cũng có th click See Also dư i tiêu ñ c a ch ñi m ñ xem các tiêu ñ c a các ch
ñi m mà b n có th ñi ñ n ho c liên h ñ n nhi u thông tin.
Context Sensitive Help (tr giúp trong ñúng tình hu ng)
Nhi u ph n c a VB6 là context sensitive, có nghĩa là lúc b i r i ch c n n nút F1 ho c highlight
keyword r i nh n F1 là ñư c thông tin nh ng gì liên h tr c ti p v i tình hu ng hi n gi c a b n.
B n có th nh n F1 t b t kỳ ph n context sensitive nào c a giao di n VB6 ñ display thông tin Help
v ph n ñó. Các ph n context sensitive là:
• Các Windows c a VB6 như Properties, Code .v.v..
• Các control trong Toolbox.
• Các Object trên m t form ho c Object tài li u.
• Các ñ c tính trong Window Properties.
• Các keywords c a VB6
• Các thông báo l i (error messages)
Ngoài ra, trong Help thư ng có Example. B n click lên ch Example ñ display m t thí d minh h a
cách dùng m t function hay property.
Microsoft on the Web
Web site c a Microsoft ch a nhi u thông tin c p nh t cho nh ng ngư i l p trình VB6. Trang ch
Visual Basic ñ t t i URL http://www.microsoft.com/vbasic/. Thông tin có s n t i ñ a ch n y bao g m:
• C p nh t các ñ c tính m i, các phiên b n s n ph m, các s n ph m liên h , các thuy t trình
(seminar) và các ho t ñ ng (event) ñ c bi t.
• Thông tin b sung trên các ñ c tính VB6 ch a trong các bài vi t g i là White Papers, các mách
nư c (tips) và các trình tr giáo, ngu n ñào t o.
• S n ph m m i t i xu ng (download) bao g m s c p nh t ñ n các file chương trình, các c p nh t
tr giúp, các trình ñi u khi n, và các file liên h khác c a VB6.
ð truy c p Web site c a Microsoft, t menu Help ch n Microsoft on the Web r i ch n menu con tùy
thích như dư i ñây.
8
Ghi chú: M t s n i dung trên Web site c a Microsoft ñư c t i ưu hóa dành cho Microsoft Internet
Explorer và không th display ñ y ñ trong m t b trình duy t (browser) khác. Do ñó b n nên ch
dùng Internet Explorer làm browser trên máy b n mà thôi.
Chương Hai- Vi t chương trình ñ u tiên
B n ñang làm quen v i môi trư ng tri n khai l p trình (Integrated Development Environment - IDE)
c a MS VB6 và r t nóng ru t mu n vi t nh ng dòng mã ñ u tiên ñ chào m ng th gi i.
Ta th ôn l i m t s v n ñ mà có l b n ñã bi t r i. M t chương trình Visual Basic g m có ph n mã
l p trình và các hình nh (visual components). B n có th thi t k ph n hình nh b ng cách dùng
nh ng ñ ngh (Controls hay Objects) t Túi ñ ngh (Toolbox) n m bên trái. N u b n không th y cái
Túi ñ ngh thì dùng m nh l nh Menu View|Toolbox ñ b t nó hi n ra.
Khi b n b t ñ u thi t k m t chương trình b ng cách ch n Standard EXE, môi trư ng tri n khai l p
trình (IDE) cho b n s n m t Form tên là Form1. B n có th ñ i tên (Name) nó trong cái c a s
Propeties n m phía dư i bên ph i (trong hình dư i ñây ta edit Name property c a Form1 thành ra
frmMainForm). B n cũng có th s a ñ t a (Title) c a form ra cái gì có ý nghĩa hơn b ng cách ñ i
Caption c a form cũng trong c a s Propeties (trong hình dư i ñây ta edit Caption property c a form
thành ra "Chi tiet cua ban toi").
9
S p ñ t các v t d ng lên Form
Mu n ñ t m t Control lên Form, click hình cái Control trong Toolbox r i Drag (b m nút trái c a con
chu t r i kéo cho thành hình ch nh t trư c khi buông nút trái ra) con chu t trên Form v thành c
c a Control. Nh ng Controls b n s dùng thư ng nh t t Toolbox là Label (nhãn), Textbox (h p ñ
ñánh ch vào) và CommandButton (nút b m m nh l nh).
Trong hình trên ta có ba Label và ba Textbox. Mu n s a ch Label1 ra "Ten" thì edit Property
Caption. Còn Textbox không dùng Property Caption mà dùng Property Text. Ta cũng có th thay ñ i
các Property Caption và Text trong khi ch y chương trình (at run-time). Trong lúc thi t k (design
time) b n có th s a ñ i ki u ch c a nh ng Controls b ng cách edit Property Font c a chúng trong
c a s Properties (click bên ph i c a Property Font trong Properties Window, IDE s pop-up cái Font
dialog ñ b n l a ch n nh ng ñ c tính c a Font như trong hình dư i ñây).
N u b n th y b c mình t i sao cái c ch t có (default size) c a các Control hơi nh , b n có th gi i
quy t b ng cách s a c ch c a chính Form cho nó l n hơn. Vì khi m t Control ñư c ñ t lên m t
Form, nó th a k c ch c a Form.
ð s p x p cho m t s Control th ng hàng v i nhau b n ch n c nhóm r i dùng m nh l nh Menu
Format|Align|Lefts .v.v..N u b n chưa bi t cách ch n m t nhóm Control thì có hai cách. Cách th
nh t b n ñè nút Shift trong khi click các Control b n mu n ch n. Cái Control mà b n ch n sau cùng s
là cái chu n ñ các Control khác s làm gi ng theo. Cách th hai là Drag cho s i dây thun (rubber
band) b c chung quanh các Control. Trong trư ng h p các Control n y n m trong m t container, thí
d như m t khung (Frame) hay PictureBox, thì b n ph i click Form trư c, r i ñè nút Ctrl trong khi
Drag rubber band bao các Control.
10
Ch a m i th c a m t d án VB
T i ñây b n ñ ý th y trong c a s bên ph i, phía trên, g i là Project Explorer, có hình gi ng như m t
cái cây (tree) cho th y ta có m t Form trong m t Project (d án). Project là m t cách ti n d ng ñ ta
s p x p nh ng gì c n thi t cho m t d án. Thư ng thì m t d án có nhi u Form và có th c n nh ng
th khác.
M i Form s ñư c ch a vào ñĩa dư i d ng "frmMainForm.frm". B n save m t form b ng menu
command File | Save formfilename.frm. N u trong Form1 có ch a hình nh (thí d b n dùng
Properties Window ñ ch n m t icon hình gương m t cư i làm icon cho frmMainForm) thì các hình
nh c a frmMainForm s ñu c t ñ ng ch a trong h sơ "frmMainForm.frx". Lưu ý là không nh t
thi t tên c a h sơ (file) mà b n ph i cho bi t khi ch a (save) ph i gi ng như tên c a Form mà b n
dùng trong chương trình. Tuy nhiên b n nên dùng cùng m t tên cho c hai ñ sau n y d tìm h sơ n u
có th t l c. Theo qui ư c thông thư ng, các Form ñư c ñ t tên b t ñ u b ng "frm", thí d như
"frmMainForm".
Khi b n save m t Project thì có nghĩa là save t t c h sơ dùng cho d án, k c các Form và m t h
sơ cho chính Project, thí d như "MyFirstProg.vbp" ("vbp" là vi t t t ch Visual Basic Project). B n
save Vb6 project b ng menu command File | Save Project. À, mu n ñ i tên Project, b n click lên
hàng trên cùng bên ph i trong c a s Project Explorer (Project1 (Project1.vbp)), r i edit tên c a
Project trong c a s Properties phía dư i. B n nên ch a t t c nh ng h sơ dùng cho cùng m t Project
trong cùng m t t p (Folder/Directory).
B n có th dùng Notepad ñ m ra xem chơi, coi trong "frmMainForm.frm" có gì. B n s th y trong
y g m có hai ph n: ph n ñ u là di n t các Control n m trong Form, ph n còn l i là mã l p trình mà
b n vi t. B n cũng s chú ý là các properties mà b n ñã s a cho các Control ñ u ñư c ghi l i trong
ph n ñ u nói trên. VB d a vào ph n di n t các Control ñ thi t l p l i (reconstruct) hình nh c a
Form.
11
Sau n y, khi ñã lão luy n VB, b n có th dùng m t chương trình t ñ ng ch (generate) ra nh ng hàng
di n t các Control cho m t Form.
ðó là k thu t dùng trong các Wizards c a VB ñ ch m t s chương trình kh i ñ u cho chúng ta t
các b ng k m (Template).
Thêm mã l p trình ñ x lý m t s c
H u h t l p trình trong Visual Basic là vi t mã ñ x lý các s c (Event). Thí d mu n ch m d t
chương trình, ngư i s d ng s click nút "Xuat". ð th c hi n ñi u n y trong khi tri n khai chương
trình b n doubleClick (click liên ti p 2 l n) nút "Xuat". VB IDE s vi t s n cho b n cái v c a m t
Subroutine:
Private Sub cmdXuat_Click()
End ' B n ch vi t thêm dòng n y ñ k t thúc chương trình
End Sub
ð ý là tên (Name) c a nút Xuat là "cmdXuat" ("cmd" là vi t t t ch CommandButton), VB g n thêm
d u g ch dư i và Event Click ñ làm thành tên cmdXuat_Click c a Sub, chương trình nh s ñư c
x lý khi ngư i s d ng click nút Xuat. Chương trình nh hay Subroutine n y còn ñư c g i là Event
Handler cho Event Click. Hàng ch xanh lá cây là dùng ñ gi i thích cho l p trình viên (g i là
Comment), VB s hoàn toàn không chú ý ñ n nó khi x lý Sub cmdXuat_Click.
Comment có nghĩa là chú thích. Trong VB chú thích b t ñ u b ng d u single quote '. Khi VB th y d u
n y là nó b qua nh ng gì còn l i trên dòng mã.
12
Là L p trình viên chuyên nghi p b n nên t p thói quen dùng Comment m i nơi ñ giúp ngư i khác và
chính b n hi u chương trình c a mình. Nên nh là ti n phí t n ñ b o trì m t chương trình thì ít nh t
là tương ñương v i s ti n b ra l n ñ u ñ tri n khai. B o trì có nghĩa là thăm vi ng l i chương trình
ñ s a l i (fix bug) và thêm các ñ c ñi m cho hay hơn (enhancement).
Nói chung h b n làm ñi u gì bí hi m hay c c c thì làm ơn gi i thích rõ ràng.
N u mu n c t m t dòng mã VB ra làm hai dòng thì ch m d t dòng th nh t b ng d u g ch dư i _.
Ti p theo, b n doubleClick nút "Viet vao dia" và vi t nh ng hàng mã sau:
Private Sub cmdViet_Click()
Open "myFriends.txt" For Output As #2 ' M m t h sơ ñ vi t ra và g i là c ng s 2
' Vi t vào c ng s 2: Tên, ð a ch và Tu i, ngăn cách nhau b ng d u ch m ph y
Print #2, txtTen & ";" & txtDiachi & ";" & txtTuoi
Close #2 ' ðóng c ng s 2
End Sub
Trong Sub cmdViet_Click, trư c h t ta m m t h sơ tên là "myFriends.txt" và g i nó là c ng s 2.
Sau khi m h sơ ñ vi t ra ta ráp Tên, ð a ch và Tu i l i, ngăn cách b ng d u ch m ph y (;) ñ ñánh
d u nh sau n y ta mu n g riêng ba th ra tr l i. D u "&" là operator ñ ráp (concatenate) hai dòng
ch (text string) l i v i nhau.
Print #2 có nghĩa là vi t ra c ng s 2, t c là h sơ "myFriends.txt".
Th chúng ta vi t ra c ng 2 là Tên, ð a ch và Tu i (txtTen & ";" & txtDiachi & ";" & txtTuoi).
Nh ng r c r i c a vi c m m t h sơ
Cái c ng s 2 trên là ta t ch n (arbitrary). Th t ra mu n g i c ng s m y cũng ñư c, mi n là chưa
có ph n nào khác trong cùng chương trình n y ñang dùng c ng s y. ðây là m t cách VB làm vi c
cho ti n thay vì g i nguyên m t cái tên h sơ dài.
N u mu n ch c ch n không trùng s c ng v i ch nào khác, ta có th làm như sau:
fileNo = freefile
R i thay th s 2 b ng ch fileNo trong Sub cmdViet_Click. freeFile là m t Function (chương trình
nh dùng ñ tính ra m t th gì) nh VB c p phát cho m t con s ñ i di n h sơ chưa ai dùng.
Ch Output trong câu ( Open "myFriends.txt" For Output As #2 ) dùng ñây ñ nói t CPU (Central
Processing Unit) ta mu n "vi t ra" m t h sơ. Khi m m t h sơ ñ vi t ra ki u n y thì n u h sơ chưa
có nó s ñư c d ng nên (created). N u h sơ ñã có r i thì nó s b xoá b (delete) và ñ ng th i m t h
sơ tr ng và m i s ñư c d ng nên. ð ng t chuyên môn là "vi t ch ng lên" (overwrite).
N u ta m m t h sơ ñ "ñ c vào" thì dùng ch "Input" thay vì "Output". Còn n u "vi t thêm" vào
m t h sơ có s n (ch không overwrite h sơ y) thì dùng ch "Append" thay vì "Output". Trong
trư ng h p y b n ph i ki m xem h sơ "myFriends.txt" ñã có s n chưa. B n có th vi t như sau:
If Dir("myFriends.txt") <> "" then ' N u h sơ "myFriends.txt" hi n h u
Open "myFriends.txt" For Append As #2 ' M m t h sơ ñ vi t thêm và g i là c ng s 2
Else
Open "myFriends.txt" For Output As #2 ' M m t h sơ ñ vi t ra và g i là c ng s 2
End If
Function Dir("myFriends.txt") dùng trên s cho ta tên c a h sơ n u h sơ hi n h u, ngư c
l i nó s cho m t dòng ch tr ng (empty string), bi u hi u là "". T i ñây, n u lanh ý b n s h i
h sơ "myFriends.txt" n m folder nào. Câu tr l i là không bi t ch c. N u b n chưa ch a
(save) chương trình vào dĩa (vì m i vi t) thì nó n m folder c a VB6.EXE. Còn như ñã ch a
chương trình r i thì có l nó n m folder c a chương trình b n. Mu n h sơ "myFriends.txt"
luôn luôn ñi cùng v i chương trình, b n có th làm như sau:
13
MyLocalFolder = App.path ' L y folder c a chương trình x lý c a b n
If Right(MyLocalFolder,1) <> "" then ' N u ch cu i cùng không ph i là backslash
MyLocalFolder = MyLocalFolder & "" ' thì g n thêm m t backslash cu i
End If
' M m t h sơ v i tên có folder (full pathname) ñ vi t ra và g i là c ng s 2
Open MyLocalFolder & "myFriends.txt" For Output As #2
Cu i cùng ta ñóng h sơ l i b ng câu Close #2.. T rày VB có th c p s 2 ñ làm c ng cho ch khác
trong chương trình.
Default Property c a m t Control
"txtTen" ñư c dùng ñây là vi t t t cho "txtTen.text", vì Default Property c a m t TextBox là text
c a nó. Default Property c a m t Control là Property ñư c VB dùng khi b n ch cho tên c a Control
mà thôi.
Trong khi ñó Default Property c a Label là Caption.
Vì txtTen ñư c dùng như txtTen.txt ñ nói ñ n m t dòng ch , nên trong chương trình ta nh c ñ n nó y
như m t variable (mã s ) dùng cho m t string. Do ñó v i qui ư c dùng ba ch ñ u "txt" cho tên c a
m t Textbox giúp ta nh n di n ngay nó không ph i là m t string variable bình thư ng. Hãy lưu ý s
khác bi t khi g i m t Sub trong hai trư ng h p sau:
Call CheckmyTextbox (txtDiachi) ' txtDiachi ñư c xem là Textbox tr n
v n
CheckmyTextbox txtDiachi ' txtDiachi ñư c xem là txtDiachi.text, m t
dòng ch
Th t các Control trên m t Form
Trong chương trình n y ta mu n ngư i x d ng cho vào d ki n theo th t "Tên, ð a ch , Tu i". Khi
m i vào, ta mu n cái d u ch p t t (cursor ) n m trong txtTen ngay ñ ngư i x d ng kh i m t công
click vào Textbox y khi mu n mang cursor tr l i ñó. Ta nói là txtTen có cái Focus.
Sau khi ngư i x d ng ñã cho tên vào r i, cô s ñánh nút Tab ñ di chuy n cursor qua Control ti p
theo, mà ta mu n là txtDiachi. ð s p th t các Control cho s di chuy n c a cursor khi ngư i x
d ng ñánh nút Tab ta edit Property TabIndex c a các Control. TabIndex b t ñ u b ng s 0. Nhi u khi
ngư i x d ng thích dùng nút Enter thay vì Tab ñ di chuy n Cursor qua Control ti p theo, b n có th
làm như sau cho Textbox txtTen:
Private Sub txtTen_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then ' N u nút b m là Enter
SendKeys "{TAB}" ' gi m o g i nút Tab
KeyAscii = 0 ' Nu t tr ng nút Enter ñ Windows không còn lo cho nó
End If
End Sub
Cho các Textbox khác như txtDiachi, txtTuoi b n cũng làm tương t như v y. Khi b n doubleClick
txtTen l n ñ u ñ vi t mã, VB cho b n Private Sub txtTen_Change(). B n ph i click cái Combobox
bên ph i, phía trên c a Code Window, cho nó m ra và ch n Event KeyPress.
14
N u b n mu n chương trình mình còn chuyên nghi p hơn, b n cho phép ngư i x d ng b m nút
Alt+o (b m nút Alt xu ng trong khi b m nút o) ñ mang Cursor v txtTuoi hay Alt+d ñ mang Cursor
v txtDiachi. Mu n th b n ph i thêm vào d u "&" phía trư c các ch T, D và o trong Caption c a
các label lblTen, lblDiachi và lblTuoi.
K ñó b n ph i cho giá tr TabIndex c a lblTen, txtTen, lblDiachi, txtDiachi, lblTuoi, txtTuoi liên ti p
là 0,1,2,3,4,5. Khi ngư i x d ng ñánh Alt+o, VB s mang Cursor v nhãn lblTuoi, nhưng vì không có
ch cho nó ñáp trong label nên nó ph i ñáp vào Control k ñó, t c là txtTuoi.
Khi ta ñã cho TabIndex c a các Control nh ng giá tr k trên thì khi Form hi n ra Cursor s n m trong
TextBox txtTen vì m c d u lblTen có TabIndex nh nh t(0), nó không ph i là ch Cursor ñáp lên
ñư c, nên Cursor ph i ñáp lên textbox có TabIndex value k ñó, t c là 1.
N u b n không mu n Cursor ng ng l i m t TextBox nào thì edit Property TabStop c a TextBox ñó
cho b ng False. Trong trư ng h p y ngư i s d ng v n có th click vào TextBox và s a dòng ch
ñó ñư c như thư ng. N u b n th t s không mu n cho phép ngư i s d ng s a gì TextBox thì edit
Property Enabled b ng False hay Property Locked b ng True. Khi Enabled c a m t TextBox b ng
False thì TextBox tr nên m ñi.
Nhân ti n ta edit thêm d u "&" phía trư c các ch X và V trong Caption các CommandButton
"Xuat" và "Viet vao dia". Sau n y ngư i s d ng có th b m Alt-X coi như tương ñương v i click nút
"Xuat".
N u nh trong Form b n có nhi u Textbox quá, ñ i nút Enter ra nút Tab cho t ng Textbox m t thì m t
công quá. B n có th làm m t cái chung cho c Form. T c là nói r ng b n không c n bi t nút Enter
v a m i ñư c ñánh TextBox nào, b n c nh m m t ñ i nó ra nút Tab.
Trư c h t b n ph i ch n (select) Form r i edit Property KeyPreview c a nó thành True. B n làm vi c
n y ñ d n Form gi t cái nút ngư i s d ng ñánh (keystroke) trư c khi TextBox th y. Form s tráo nút
Enter thành Tab r i l ng l ng trao cho TextBox. B n có th thay th t t c các KeyPress event handler
c a các TextBox b ng ño n mã như sau:
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then ' N u nút b m là Enter
SendKeys "{TAB}" ' gi m o g i nút Tab
KeyAscii = 0 ' Nu t tr ng nút Enter ñ Windows không còn lo cho nó
End If
End Sub
Khi b n doubleClick lên b t c ch nào trên Form không có Control n m, l n ñ u ñ vi t mã, VB cho
b n Private Sub Form_Load(). B n ph i click cái Combobox bên ph i, phía trên c a Code Window,
cho nó m ra và ch n Event KeyPress.
ðem ra trình làng
ð làm thành m t h sơ áp d ng EXE, b n dùng m nh l nh Menu File|Make MyFirstProg.exe. Cho
thêm chút hương v c a cu c ñ i tôi click Form r i edit Property Icon, ch n cho nó t folder:
15
D:Program FilesMicrosoft Visual StudioCommonGraphicsIconsMisc
m t icon hình gương m t cư i. R i b m m nh l nh Menu File|Save Project.
Khi dùng Explorer ñ xem các h sơ c a MyFirstProg.vbp b n s th y như dư i ñây:
ðáng l tôi dùng m t folder khác thay vì VB98 ñ ch a d án MyFirstProg.vbp. H sơ
MyFirstProg.vbw là Workspace (ch làm vi c) dành cho VB, ta không nên ñ ng t i.
B n có th làm m t Shortcut cho MyFirstProg.exe v i cái icon hình gương m t cư i ñ t lên Desktop
ñ ch y bên ngoài IDE c a VB.
Có l b n mu n Download h sơ:MyFirstProg.zip, nén chung t t c các h sơ nói trên trong d án
MyFirstProg.vbp.
Bây gi ngay trong VB IDE b n có th ch y chương trình b ng cách dùng m nh l nh Menu
Run|Start hay b m F5.
B n cũng có th Click lên d u tam giác ch v bên ph i (nút Play c a cassette) n m trong
toolbar ngay phía dư i VB menu.
Cách nén các files trong m t folder thành m t zip file duy nh t
ð g i nhi u files b ng cách ñính kèm (attach) m t Email trên Internet ta c n ph i nén các files y
thành m t file duy nh t, g i là Zip file. Trư c h t, trong Window Explorer b n ch n nh ng files b n
mu n Zip chung l i. B n ch n nhi u files b ng cách ñè nút Ctrl trong khi click lên tên t ng file m t.
N u b n ñè lên nút Shift, thay vì nút Ctrl, thì c m i lúc b n click, Window Explorer s select c m t
d c tên các files n m gi a tên hai files b n click m i nh t. Ngoài ra b n cũng có th dùng Menu
Command Edit | Select All, hay Ctrl+A ñ select t t c các files trong m t folder. ðây là trư ng h p
b n s dùng khi Zip t t c c các files trong m t VB6 project ñ g i qua Th y/Cô.
Sau khi ñã select các file r i, b n right click lên các file y ñ context menu pop-up. Ch n Add to
Zip.
N u b n không th y pop-up command Add to Zip thì là b n chưa install chương trình Winzip. Trong
trư ng h p y, download Winzip t Internet và install.
16
Bây gi b n th kh i ñ ng VB6, ñi d o quanh nó ñ th bi t các ph n c a VB6 IDE, và th làm theo
như bài n y. N u có th c m c gì thì h i Tutor c a b n.
Chương Ba - Form và các Controls thông thư ng
H u h t các chương trình VB6 ñ u có ít nh t m t Form. Khi ta ch y chương trình, Form n y s hi n
ra trư c h t ñ ta ra l nh nó làm chuy n gì. Cái Form tr ng không ch làm ñư c gì nhi u, nên ta ñ t
lên Form nh ng controls như Textbox(h p ñ ñánh ch vào), Label(nhãn), Commandbutton(nút b m
m nh l nh), .v.v.. Các controls cho ta enter các d ki n ñ chương trình dùng x lý, và các controls
cũng hi n th (display) k t qu cho chúng ta xem.
S p ñ t controls lên Form
Ta hãy b t ñ u thi t k m t chương trình m i (New Project) b ng cách ch n Standard EXE, môi
trư ng tri n khai l p trình (IDE) cho b n s n m t Form tên là Form1. Mu n ñ t m t Control lên Form,
click hình cái Control trong Toolbox r i Drag (b m nút trái c a con chu t r i kéo cho thành hình ch
nh t trư c khi buông nút trái ra) con chu t trên Form v thành c c a Control. M t cách khác ñ ñ t
m t control lên Form là doubleclick cái Control trong Toolbox, m t hình control s hi n ra trên Form.
K ñó b n d i control ñi ñ n ch mình mu n và resize nó. N u b t c lúc nào b n không th y Túi ñ
ngh (Toolbox) n m bên trái, b n có th dùng m nh l nh Menu View|Toolbox ñ b t nó hi n ra. Có
m t cách khác là click lên toolbox icon trên toolbar chính c a VB6.
Nên nh r ng Toolbox cũng là m t window như các window khác. Khi nó hi n lên r i b n có th n m
(b m nút trái c a con chu t và gi như v y ch không buông ra) title nó ñ d i ñi nơi khác. B n có th
ñóng nó b ng cách click lên d u x góc ph i phía trên. N u right click trên Toolbox, nó s display
context sensitive menu, trong ñó có property dockable (có th ñ u b n) . N u m t window là
17
dockable, sau khi b n d i nó ñi kh i vi trí docked bình thư ng c a nó, b n có th dock nó l i như c
b ng cách double click lên title c a nó.
Resize và di chuy n control
Khi b n select m t control (click lên nó), chung quanh control s hi n ra resize handle, 8 nút ñen d c
theo chu vi c a control.
Click lên các nút ñen c a resize handle, b n có th resize control. Có m t cách khác ñ resize control
là dùng Shift + ArrowKey. B m nút Shift trong khi b m m t arrow key, control s l n ra hay thu h p
theo chi u c a ArrowKey.
Lưu ý: M t s control có kích thư c t i thi u, b n không th làm cho nó nh hơn ñư c. Thí d như
Combobox, nó ph i cao ñ ñ display m t hàng text.
Tương t như th , b m nút Ctrl trong khi b m m t arrow key, control s di chuy n theo chi u c a
ArrowKey.
Ngoài ra, nên nh r ng trong lúc chương trình ch y (at run-time), trong code ta có th thay ñ i kích
thư c và v trí các controls d dàng, th m chí có th làm cho chúng hi n ra hay bi n m t b ng cách s a
ñ i value các property left, top, width, height và visible c a các controls.
Alignment Grid
ð giúp b n s p ñ t ngay ng n các controls trên m t form, VB6 cho b n Alignment Grid. Nó là nh ng
d u ñen c a các hàng d c và xuôi trên form. B n có th làm cho các d u ñen c a grid trên form bi n
m t b ng cách dùng menu command Tools | Options ñ display Option Dialog, k ñó ch n Tag
General và clear checkbox "Show Grid":
18
B n cũng có th nhân d p n y thay ñ i kho ng cách chi u r ng (Width) và chi u cao (Height) c a các
ch m ñen c a grid. Kích thư c nh nh t c a Width hay Height là 24. Hãy so sánh hai trư ng h p form
có và không có Show Grid như dư i ñây:
Control Locking
M t khi b n ñã s p ñ t kích thư c và v trí c a các control trên form r i, r t d ta tình c thay ñ i các
ñ c tính y vì vô ý click lên m t control. Do ñó VB6 cho ta Menu command Format | Lock Controls
ñ khóa chúng l i. Sau khi khóa, cái hình ng khóa trên menu b chìm xu ng.
N u sau n y b n mu n thay ñ i kích thư c ho c v trí c a chúng thì nh dùng Menu command
Format | Lock Controls l i. Sau khi m khóa, cái hình ng khóa trên menu hi n ra bình thư ng.
Cài ñ t các Properties c a Form
Nhi u property c a m t form nh hư ng ñ n di n m o v t lý (physical appearance) c a nó. Property
Caption s quy t ñ nh text ñư c hi u th trong title. N u Property BorderStyle c a form không ph i là
Sizable thì User không th resize form at run-time. Property Icon quy t ñ nh hình icon ñu c dùng
trong title c a form, nh t là khi form thu nh (minimized). N u b n không mu n cho phép User
minimize hay maximize form thì set value c a property MinButton, MaxButton ra False. N u property
ControlBox là False thì form s không có nút minize, maximize hay close (x) trên góc ph i c a nó,
ñ ng th i form cũng không display c icon bên góc trái title như trong hình dư i ñây:
19
V trí ñ u tiên (top,left) c a form có th ñư c thay ñ i trong design time b ng cách di chuy n hình nh
c a nó trong window Form Layout:
Property WindowState xác ñ nh Form s có kích thư c bình thư ng (normal=0), hay minimized (=1),
maximized =(2).
Lưu ý là property Font c a Form s ñư c các control n m trên nó th a k . T c là khi b n ñ t m t
control lên form, property Font c a control y s t ñ ng tr nên gi ng y như c a form.
Vài Event thông d ng c a Form
Nhìn t m t phương di n, Form cũng gi ng như Control. Ta có th instantiate m t form nhi u l n ñ
có nhi u form tương t nhau. Trong thí d dư i ñây, ta instantiate Form2 hai l n ñ có MyForm và
YourForm:
Private Sub CmdCreateForms_Click()
Dim MyForm, YourForm
Set MyForm = New Form2
MyForm.Caption = "This is My Form"
MyForm.Show
MyForm.Move 1000, 1000
Set YourForm = New Form2
YourForm.Caption = "YOUR FORM IS HERE"
YourForm.Show
YourForm.Move 2000, 2000
End Sub
M t Form cũng có nhi u Events r t h u d ng.
• F
orm_Initialize: Event n y xãy ra trư c nh t và ch m t l n thôi khi ta instantiate form ñ u tiên. Ta
dùng Form_Initialize event ñ th c hi n nh ng gì c n ph i làm chung cho t t c các instances c a
form n y.
• F
orm_Load: Event n y xãy ra m i l n ta instantiate m t form. N u ta ch dùng m t instance duy
nh t c a m t form trong chương trình thì Form_Load coi như tương ñương v i Form_Initialize. Ta
dùng Form_Load event ñ initialise variables, controls v.v. cho instance n y.
Bên trong Form_Load b n không th dùng Setfocus cho m t control nào trên form vì form chưa
20
h n thành hình (ra ñ i). Mu n làm vi c y b n ph i delay (trì ho n) m t chút xíu b ng cách dùng
Control Timer ñ ñ i cho Form_Load ñư c hoàn t t. Thí d :
Private Sub Form_Load()
Timer1.Interval = 500
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Timer1.Enabled = False ' Timer1_Timer only execute once
txtName.Setfocus ' Make Tab Cursor start at TextBox txtName
End Sub
• F
orm_Activate: M i l n m t form tr nên active (current) thì nó generate m t Activate event. Ta có
th dùng event n y ñ refresh display trên form.
• F
orm_QueryUnload: Khi User click d u x phía trên bên ph i ñ close form thì nó generate
QueryUnload event. Syntax c a Sub n y như dư i ñây:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
End Sub
Event n y cho ta m t d p ñ cancel Close action c a form (t c là không cho User close form) b ng
cách set Cancel b ng 1. UnloadMode cho ta bi t ai, task hay form nào mu n close form n y.
Ngoài ra, b n cũng nên bi t r ng m t form t ñ ng Load hay tr nên active n u b n nh c ñ n nó, thí
d như dùng Form2.List1. Khi m t form ñã ñư c loaded r i b n có th hide (làm cho bi n m t) nó.
K ñó, khi b n show form ra tr l i thì form không có gì thay ñ i. Nhưng n u b n Unload m t form
(thí d b ng cách dùng Unload Form2 ), r i sau ñó load tr l i b ng cách dùng Form2.Show ch ng
h n, thì Form ph i tr i qua quá trình Form_Load, và dĩ nhiên form m t t t c nh ng gì có trư c ñây.
Ngoài ra, Hide/Show m t form ñã ñư c loaded r i thì r t nhanh, còn Unload/Load thì m t thì gi hơn.
Khi b n Show m t Form chưa hi n h u thì form s ñư c loaded và show. ðôi khi b n mu n Load m t
form, r i làm vi c v i nó trư c khi Show, trong trư ng h p ñó b n dùng Load Form2 r i m t ch p
sau dùng Form2.Show.
MDI Form
ðôi khi b n mu n có m t MDI form, t c là m t form có th ch a nhi u form con bên trong. D ng
MDIform n y thư ng ñư c dùng trong các application như wordprocessor ñ có th m nhi u
document cùng m t lúc, m i document ñư c hi n th trong m t form con. ð có m t MDIForm b n
c n ph i dùng menu command Project | Add MDI Form. M i VB6 project ch có th có t i ña m t
MDIform. Mu n m t form tr thành m t form con b n set property MDI Child c a nó thành True. At
run-time b n không th hide (bi n nó thành invisible) m t MDIChild form, nhưng có th minimize nó.
N u b n th t s mu n hide nó thì ph i dùng mánh l i là cho nó v trí (top,left) s âm l n hơn kích
thư c nó ñ nó n m ngoài t m hi n th c a form. Trong m t chương trình dùng MDI Form, khi b n
click MDI Form nó không nh y ra phía trư c và che các form con, nhưng v n luôn luôn n m dư i.
21
Controls là gì?
Controls v a có hình, v a có code ch y bên trong m t window nho nh , gi ng như m t form. Khi ta
l p trình VB6 ta l p ráp các controls (là nh ng v t d ng ti n ch ) trên m t hay nhi u form ñ có m t
chương trình nhanh chóng. Ta giao d ch v i m t control qua ba ñ c tính c a control:
• P
roperties: t p h p các ñ c tính c a control mà ta có th n ñ nh lúc design time hay run-time. Có
nhi u properties v di n m o, n u ta thay ñ i at design time s th y k t qu hi n ra l p t c, thí d
Font hay màu s c.
• M
ethods: nh ng gì control th c hi n ñu c, t c là nh ng kh năng c a nó.
• E
vents: nh ng s c mà control s thông báo cho chúng ta bi t khi nó xãy ra v i control. Khi m t
event xãy ra VB6 s x lý m t Event Handler (thí d như Sub Command1_Click()), mi n là chúng
ta vi t code s n trong ñó. N u không có code thì coi như chúng ta không thèm bi t ñ n các event
lo i ñó. Có m t s Events mà chúng ta thư ng x lý là:
o C
lick : xãy ra khi user click lên control. Ta thư ng dùng nó cho CommandButton và Listbox.
o M
ouseDown, MouseUp : m i khi User b m m t mouse button là có m t MouseDown Event, khi
User buông nó ra thì có m t MouseUp Event. Ta thư ng dùng MouseDown Event ñ Popup
context sensitive menu hay b t ñ u m t di n bi n Drag.
Thí d :
Private Sub Foods_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)
If Button = vbRightButton Then ' if Right button was pressed
PopupMenu mnuActions ' popup a menu
End If
End Sub
Private Sub DrinkList_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)
DrinkList.drag ' Displaying a drag icon to start the drag process
End Sub
ð ý là Click không cho chúng ta thêm chi ti t gì v s c , trong khi MouseDown/MouseUp cho ta
bi t v trí c a cursor, button nào c a Mouse ñư c b m và lúc y User có b m nút Shift, Ctrl hay Alt
không. M i Click là ñi ñôi v i m t c p MouseDown/MouseUp. N u b n mu n x lý v a Click l n
MouseDown thì ph i c n th n. Thí d b n mu n v a handle Click event v a handle Mouse Drag thì
ph i làm sao phân bi t hai trư ng h p. N u không User ch mu n th y k t qu c a Click mà l i th y
control b t ñ u display m t Drag icon thì s b c mình.
o K
eyPress : xãy ra khi user Press m t key. Ta thư ng dùng nó cho TextBox ñ lo i ra (filter out) các
keystrokes ta không ch p nh n. KeyPress cho ta ASCII value, m t con s có giá tr t 1 ñ n 255,
c a key.
Trong thí d dư i ñây, m t Enter key s ñư c coi như m t TAB key:
22
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0 ' Swallow the character to avoid side effect
SendKeys "{TAB}" ' Emulate entering a TAB
End If
End Sub
o K
eyDown, KeyUp : m i KeyPress event là cho ta m t c p KeyDown/KeyUp event.
KeyDown/KeyUp cho ta KeyCode và Shift value. ð detect Function key ta c n dùng KeyDown
event.
Trong thí d dư i ñây, ta display Function key User b m:
Private Sub Text3_KeyDown(KeyCode As Integer, Shift As Integer)
If (KeyCode >= 112) And (KeyCode <= 123) Then
MsgBox "You pressed the Function key: F" & Trim(Str(KeyCode - 111))
End If
End Sub
o G
LotFocus : Control tr nên active khi nó nh n ñư c Focus. Nó s generate m t GotFocus Event. Ta
có th dùng nó ñ ñ i màu background c a m t text box như trong thí d dư i ñây:
Private Sub Text2_GotFocus()
Text2.BackColor = vbYellow
End Sub
o L
LostFocus : Thư ng thư ng h m t Control GotFocus thì trư c ñó có m t Control LostFocus. Ta
có th dùng Event n y ñ Validate entry data hay thu x p công chuy n cho m t control v a m t
Focus.
Trong thí d dư i ñây, n u User không ñánh vào m t con s trong Textbox Text1 thì s ñư c
thông báo và Tab Cursor s tr l i Textbox Text1.
Private Sub Text1_LostFocus()
If Not IsNumeric(Text1.Text) Then
MsgBox "Please enter a number!"
Text1.SetFocus
End If
End Sub
o r
DagDrop : xãy ra khi ta drop m t cái gì lên control . Parameter Source cho ta bi t Control nào ñã
ñư c Drag và Drop. Nhi u khi m t control có th nh n drop t nhi u control khác nhau. Trong
trư ng h p ñó ta ph i test xem ho c Control Type, ho c Name ho c Tag value c a Source control
là gì ñ tùy nghi x lý.
23
Trong thí d dư i ñây, khi User drop mouse xu ng Textbox Text2, n u Source là m t Listbox,
không c n bi t Listbox nào, thì ta copy dòng ñư c ch n trong Listbox y qua Textbox Text2.
Private Sub Text2_DragDrop(Source As Control, X As Single, Y As Single)
If TypeOf Source Is ListBox Then
Text2.Text = Source.Text
End If
End Sub
TextBox
TextBox là control ñu c dùng nhi u nh t ñ display text và nh n keystroke c a Userñ s a ñ i text có
s n hay cho vào text m i. Property chính và default c a Textbox là text, t c là thư ng thư ng
Text2.text có th ñư c vi t t t là Text2. Ta có th disable (khi n nó b t l c, không ph n ng gì h t và
không cho s a ñ i) m t text box b ng cách set Property Enable ra False (ch s b m ñi), hay Lock
(không cho s a ñ i) m t text box b ng cách set Property Locked ra True (ch không b m ).
Text có th ñư c Align (Alignment Property) ñ display bên trái, chính gi a hay bên ph i c a h p nó.
B n có th ch n BackColor và ForeColor cho background và text c a TextBox. Dùng Tag Palette khi
ch n màu ñ có ñúng m t màu b n mu n.
Dĩ nhiên b n có th l a ch n Font và c ch cho Text v i Font Property.
B n gi i h n s characters mà User có th enter cho TextBox b ng cách set MaxLength Property.
N u Property Multiline là True thì User có th enter nhi u hàng. At Design time, n u b n mu n enter
multiline thì ph i nh b m nút Ctrl khi press Enter m i khi xu ng hàng. N u không VB6 IDE tư ng
r ng b n ñã k t thúc editing.
24
Mu n assign cho text box multiline text thì ph i nhét vào m i cu i hàng CarriageReturn và LineFeed
characters. Thí d như:
Private Sub Command1_Click()
Dim TextStr
TextStr = "Bau ra bau lay ong cau" & vbCrLf ' Note: vbCrLf = chr(13) & chr(10)
TextStr = TextStr & "Bau cau ca bong ngat dau kho tieu"
Text1.Text = TextStr
End Sub
N u b n mu n mách nư c cho User v cách dùng m t textbox nào ñó thì có th dùng Property
ToolTipText ñ nó display mách nư c m i khi mouse cursor n m lên textbox.
Dùng Property TabIndex ñ n ñ nh th t cho Tab Cursor d ng m i khi User b m nút TAB ñ d i
TAB Cursor ñ n Textbox k ti p. N u b n không mu n Tab Cursor d ng m t TextBox nào thì set
Property TabStop nó thành False. Tab Cursor không d ng Textbox có Property Enabled b ng False,
nhưng v n d ng Textbox có property Locked b ng True.
N u b n mu n dùng Textbox làm m t Password field thì set Property PasswordChar b ng "*". Làm
như th s ép bu c Textbox display m i character b ng PasswordChar, t c là "*", ñ ngư i khác
không ñ c ñư c trong khi User enter m t Paswword.
Properties SelLength, SelStart và SelText
N u b n mu n bi t ñư c tình hình hi n th i c a Textbox: SelText cho b n dãy ch ñang ñư c
selected. SelStart cho b n v trí c a insertion point (ch cursor flashing). SelLength cho bi t con s
characters ñã ñư c selected.
N u b n mu n s a ñ i text trong Textbox: SelText cho b n nhét vào m t dãy ch . SelStart cho b n n
25
ñ nh v trí b t ñ u c a dãy ch b n s p select. SelLength n ñ nh s characters b n mu n ch n, b t ñ u
t SelStart.
Dư i ñây là m t thí d trong ñó ta highlight text tìm ñư c:
Private Sub Form_Click ()
Dim Search, Where ' Declare variables.
' Get search string from user.
Search = InputBox("Enter text to be found:")
Where = InStr(Text1.Text, Search) ' Find the given string in Text1.Text.
If Where > 0 Then ' If found,
Text1.SelStart = Where - 1 ' set selection start and
Text1.SelLength = Len(Search) ' set selection length.
Else
MsgBox "String not found." ' Notify user.
End If
End Sub
CommandButton
CommandButton r t ti n cho ta dùng vào vi c x lý m t chuy n gì khi User click lên button. Event ta
dùng thư ng nh t cho CommanButton là Click. Ta dùng Property Caption c a CommandButton ñ
enter cái gì ta mu n display trên button. N u mu n cho phép User dùng ALT+E (ñè nút Atl trong lúc
b m nút E) ñ generate event click thì nhét d u "&" trư c ch E trong Caption c a button. Caption s
display ch E v i m t g ch dư i.
Ngoài ra ta cũng có th cho thêm m t cái hình vào CommandButton b ng cách ch n m t icon cho
property Picture và set Property Style ra Graphical, thay vì Standard.
Lúc Run-time b n có th thay ñ i hình hay Caption c a CommandButton. Trong thí d dư i ñây,
Caption c a CommandButton CmdOperation flip-flop gi a hai values Stop và Start:
Private Sub CmdOperation_Click()
If CmdOperation.Caption = "&Stop" Then
CmdOperation.Caption = "St&art"
Else
CmdOperation.Caption = "&Stop"
End If
End Sub
Label
M c ñích chính c a Label là ñ display, không cho User Edit như Textbox. Do ñó ta có th dùng
Property Font, ForeColor và Backcolor ñ làm cho nó ñ p. Ngoài ra Property BorderStyle có th cho
Label l m xu ng n u b n set nó b ng Fixed Single. N u set property BackStyle b ng Transparent s
26
tránh trư ng h p Backcolor c a Label làm cho không ñ p.
Label cũng có Property Tabindex. N u b n mu n dùng ALT key ñ mang Tab Cursor v m t Textbox,
hãy ñ m t Label v i TabIndex b ng TabIndex c a TextBox tr 1. Gi s Label có Caption là
"&Address" thì ALT+A s mang Tab Cursor v TextBox màu vàng như trong thí d dư i ñây:
Ngoài ra nh r ng b n có th thay ñ i Caption c a Label lúc run-time.
CheckBox
CheckBox ñư c dùng ñ User xác nh n có ñ c tính nào m t cách nhanh chóng. Property Value c a
CheckBox có th là Checked (làm cho h p vuông có d u, b ng 1), Unchecked (làm cho h p vuông
tr ng không, b ng 0) hay Grayed (làm cho h p vuông có d u màu nh t, b ng 2). M t khi bi t r ng
CheckBox có Value b ng 1, ta có th ñ c Caption c a CheckBox ñ dùng n u c n.
B n có th dùng Property Alignment ñ làm cho Caption ñ ng bên ph i (Left Justify) hay bên trái
(Right Justify) c a h p vuông.
OptionButton
OptionButton ( còn g i là RadioButton) có hình tròn v i m t ch m gi a, thay gì hình vuông v i m t
g ch gi a như CheckBox. OptionButton luôn luôn ñư c qui t thành m t nhóm, ch a trong m t
container. Container là m t Control có kh năng ch a các controls khác. Frame, PictureBox, hay chính
Form ñ u là Container. Sau khi ñ t m t Container lên Form, n u mu n ñ m t OptionButton lên
Container, trư c h t ta ph i Select container, r i k ñó ch n OptionButton. S dĩ, t t c OptionButtons
ph i n m trong m t container là vì b t c lúc nào, nhi u nh t là m t OptionButton trong container có
value True (vòng tròn có ch m gi a).
Mu n bi t m t OptionButton có th t s n m trong m t container, b n th kéo cái container ñi ch
khác. N u OptionButton b d i theo container thì nó n m trong container. M t cách khác là th kéo
OptionButton ra kh i container. N u kéo ra ñư c thì nó không n m trong container.
27
Mu n di chuy n m t OptionButton t container n y sang container khác, b n Cut OptionButton r i
Paste nó vô container kia.
ðôi khi m t container n m che trên m t control khác. Mu n mang m t container ra phía sau các
controls khác b n Select container r i dùng Menu command Format | Order | Send to Back.
Chương B n - Vi t Code
Trong ba chương ñ u chúng ta ñã h c qua ba b ph n chánh c a m t chương trình Visual Basic 6.0.
ðó là:
• Forms là cái n n hay khung ñ ta xây d ng User Interface.
• Controls là nh ng viên g ch ñ ta dùng xây d ng User Interface.
• Event procedures là code n m phía sau nh ng hình nh, nó là ch t keo dùng ñ dán các
Controls l i v i nhau ñ t o thành chương trình áp d ng c a ta.
Như ta ñã th y, t t c các code ñư c x lý (executed) khi có m t Event xãy ra. Thí d như khi User
click m t CommandButton (Event Click) hay type nút Tab ñ di chuy n Cursor t Textbox n y (Event
Lostfocus) qua Textbox khác (Event GotFocus). Các nhóm code x lý là :
Private Sub Command1_Click()
...
28
End Sub
Private Sub Text1_LostFocus()
...
End Sub
và
Private Sub Text2_GotFocus()
...
End Sub
Trong khi l p trình, m i l n ta double click lên m t Control c a m t Form là VB6 IDE t ñ ng
generate cho ta cái v t hàng Private Sub Control_Event() cho ñ n End Sub ñ chúng ta ñi n nh ng
hàng code c a mình vào chính gi a.
ði u khi n th t x lý các dòng code
Gi d ta vi t m t chương trình Vb6 ñơn gi n như trong hình n y v i hai Textbox tên txtName, txtAge
và m t nút tên CmdEnter n m trong m t form tên Form1:
Thông thư ng các dòng code ñư c x lý theo th t t trên xu ng dư i. Thí d như ñ ki m xem các
d ki n v a ñư c cho vào các Textbox có tương ñ i h p lý hay không, khi User click nút CmdEnter,
ta x lý Sub dư i ñây:
Private Sub CmdEnter_Click()
' Make sure the Name field is not blank
If txtName.Text = "" Then
MsgBox "Please enter Name"
Exit Sub ' Terminate this Sub
End If
' Make sure a number is supplied for Age
If Not IsNumeric(txtAge.Text) Then
MsgBox "Please enter a number for Age"
Exit Sub ' Terminate this Sub
End If
End Sub
Cái Sub nói trên có ch Private n m phía trư c, ý nói ch n i trong cùng m t form ch a Control
CmdEnter (t c là Form1 trong trư ng h p n y) ta m i có th g i (dùng) Sub CmdEnter_Click().
Thí d ta mu n khi User b m key "Enter" trên bàn phím sau khi cho vào chi ti t Textbox txtAge thì
coi như User ñã click nút CmdEnter. Ta vi t như sau:
Private Sub txtAge_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0 ' swallow Key Enter to avoid side effect
29
CmdEnter_Click ' Call Private Sub CmdEnter_Click from the same form
End If
End Sub
Khi ta dùng câu CmdEnter_Click làm m t dòng code (còn g i là g i Sub CmdEnter_Click) thì coi
như tương ñương v i nhét t t c 10 dòng codes gi a hai hàng Private Sub CmdEnter_Click() và
End Sub t i ch câu CmdEnter_Click, như vi t l i dư i ñây:
Private Sub txtAge_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0 ' Swallow Key Enter to avoid side effect
' Make sure the Name field is not blank
If txtName.Text = "" Then
MsgBox "Please enter Name"
Exit Sub ' Terminate this Sub
End If
' Make sure a number is supplied for Age
If Not IsNumeric(txtAge.Text) Then
MsgBox "Please enter a number for Age"
Exit Sub ' Terminate this Sub
End If
End If
End Sub
Có m t cách nói khác là khi execution ñi ñ n hàng CmdEnter_Click thì nó nh y vào Private Sub
CmdEnter_Click() ñ execute cho ñ n h t r i nh y tr l i hàng k ti p trong Private Sub
txtAge_KeyPress(KeyAscii As Integer) Trong Private Sub CmdEnter_Click() n u User không
ñánh gì vào Textbox txtName thì chương trình s display message "Please enter Name" r i Exit Sub.
ðây là cách nh y ngay ra kh i Sub ch không ñ i ph i execute xu ng t i hàng chót.
Dùng IF....THEN statement
Trong Private Sub CmdEnter_Click() trên ta th y có hai ch dùng IF...THEN ñ th xem m t
ñi u ki n gì có ñư c th a mãn không. N u ñi u ki n là ñúng v y, t c là True thì ta th c hi n nh ng gì
ñu c vi t t hàng IF...THEN cho ñ n hàng END IF. Ngư c l i, n u ñi u ki n không ñúng thì
execution nh y xu ng t i dòng code n m ngay dư i dòng END IF. T c là có khi execution s ñi
ngang qua, có khi không ñi ngang qua nh ng dòng code gi a câu IF...THEN và câu END IF. ði u
ki n trong IF Statement là ph n n m gi a hai ch IF và THEN. Nó ñu c g i là Logical Expression.
Ta có:
txtName.text = "" ' content of Textbox txtName is nothing, i.e. an empty string
và
NOT IsNumeric(txtAge.text) ' content of TextBox txtAge is not a number
Trong Logical Expression th nhì ta dùng Function IsNumeric ñ ñư c cho bi t r ng txtAge.text có
ph i là m t con s hay không. Vì ta ch than phi n khi txtAge không ph i là m t con s nên ta ph i ñ
thêm ch NOT phía tru c. T c là khi
IsNumeric(txtAge.text) = False
thì
NOT IsNumeric(txtAge.text) = True
N u gi a IF...THEN và END IF ch có m t dòng code b n có th nh p dòng code lên v i IF...THEN
và không dùng END IF. T c là:
30
If theColorYouLike = vbRed Then
MsgBox "You 're a lucky person!"
End If
is equivalent with
If theColorYouLike = vbRed Then MsgBox "You 're a lucky person!"
M t Logical Expression có th ñơn gi n (simple) như trong các thí d trên hay r c r i hơn n u ta ráp
nhi u simple Logical Expression l i v i nhau b ng cách dùng nh ng t OR và AND. Khi hai Logical
Expression ñư c ráp l i b ng ch OR (HAY) thì ch c n ít nh t m t trong hai Expression là TRUE là
Logical Expression t ng h p cũng là TRUE. Cái TRUE Table cho OR như sau:
A B A OR B
FALSE FALSE FALSE
FALSE TRUE TRUE
TRUE FALSE TRUE
TRUE TRUE TRUE
Trong thí d dư i ñây n u m t ngư i 25 tu i tr lên HAY có l i t c trên 30 ngàn ñô la m t năm thì
cho mư n ti n ñư c :
If (PersonAge >= 25) Or (PersonIncome >= 30000) Then
LendPersonMoney
End If
ð ý cách dùng các d u ngo c ñơn gi ng như trong toán ñ i s . Thông thư ng h cái gì n m trong
ngo c thì mình tính trư c. N u có nhi u l p d u ngo c thì tính theo th t t trong ra ngoài. Như trong
bài trên ta tính xem PersonAge >= 25 xem là TRUE hay FALSE, r i tính xem PersonIncome >=
30000 xem là TRUE hay FALSE, trư c khi tính k t qu t ng h p, d a vào cái TRUE table cho OR.
Khi hai Logical Expression ñư c ráp l i b ng ch AND (Và) thì ch khi nào c hai Expression ñ u là
TRUE, Logical Expression t ng h p m i là TRUE. Cái TRUE Table cho AND như sau:
A B A AND B
FALSE FALSE FALSE
FALSE TRUE FALSE
TRUE FALSE FALSE
TRUE TRUE TRUE
Trong thí d dư i ñây n u h c sinh 18 tu i tr lên và cha m ki m 100 ngàn tr lên m t năm thì ñăng
ký h c sinh m t ñ i h c tư:
If (StudentAge >= 18) And (ParentIncome >= 100000) Then
EnrollStudentAtPrivateUniversity
End If
31
M t Logical Expression có th t p h p c OR l n AND như trong thí d dư i ñây n u h c sinh 18 tu i
tr lên và cha m ki m 100 ngàn tr lên m t năm HAY h c sinh có Intelligent Quotient cao hơn 160
thì ñăng ký h c sinh m t ñ i h c tư:
If ((StudentAge >= 18) And (ParentIncome >= 100000)) Or (StudentIQ > 160) Then
EnrollStudentAtPrivateUniversity
End If
Hai d u ngo c ñơn n m bên ngoài c a:
((StudentAge >= 18 ) And (ParentIncome >= 100000))
không c n thi t vì theo qui ư c, ta tính AND expression trư c khi tính OR expression, nhưng nó giúp
ta ñ c d hơn.
Dùng IF....THEN..ELSE statement
Hãy xem thí d :
If (StudentPassmark > 75) Then
' Part A
EnrollStudentAtPublicSchool
Else
' Part B
EnrollStudentAtPrivateSchool
End If
N u h c sinh ñ u v i s ñi m trên 75 thì cho h c trư ng công, N U KHÔNG thì ph i h c trư ng tư.
T c là n u StudentPassmark > 75 là TRUE thì x lý ph n A, n u không thì x lý ph n B. ð ý ph n
A g m nh ng dòng code n m gi a dòng If (StudentPassmark > 75) then và else. Còn ph n B g m
nh ng dòng code n m gi a dòng else và end if.
Ta có th ráp ch ELSE v i ch IF ñ dùng như trong thí d sau ñây:
<
If (StudentPassmark > 75) Then
EnrollStudentAtPublicSchool
ElseIf (StudentPassmark >= 55) Then
EnrollStudentAtSemipublicSchool
Else
EnrollStudentAtPrivateSchool
End If
N u h c sinh ñ u v i s ñi m trên 75 thì cho h c trư ng công, N U t 55 ñi m ñ n 75 ñi m thì cho
h c trư ng bán công, n u không (t c là ñi m ñ u dư i 55) thì ph i h c trư ng tư.
N u t nh nh , không có trư ng tư, ta không có quy t ñ nh cho h c trò ñ u dư i 55 ñi m h c ñâu
thì b ph n ELSE trong thí d trên. Ph n chương trình tr thành:
If (StudentPassmark > 75) Then
EnrollStudentAtPublicSchool
ElseIf (StudentPassmark >= 55) Then
EnrollStudentAtSemipublicSchool
End If
Ta có th dùng ELSEIF nhi u l n như sau:
32
If (TheColorYouLike = vbRed) Then
MsgBox "You 're a lucky person"
ElseIf (TheColorYouLike = vbGreen) Then
MsgBox "You 're a hopeful person"
ElseIf (TheColorYouLike = vbBlue) Then
MsgBox "You 're a brave person"
ElseIf (TheColorYouLike = vbMagenta) Then
MsgBox "You 're a sad person"
Else
MsgBox "You 're an average person"
End If
Execution ñi l n lư t t trên xu ng dư i, n u m t ñi u ki n IF là TRUE thì x lý ph n c a nó r i nh y
xu ng ngay dư i dòng END IF. Ch khi m t ñi u ki n IF không ñư c th a mãn ta m i th m t ñi u
ki n IF bên dư i k ñó. T c là n u b n thích màu ñ l u màu tím (magenta) thì chương trình s
display "You're a lucky person", và không h bi t "You're a sad person".
Dùng SELECT CASE statement
Thí d có nhi u ELSEIF như trên có th ñư c vi t l i như sau:
Select Case TheColorYouLike
Case vbRed
MsgBox "You 're a lucky person"
Case vbGreen
MsgBox "You 're a hopeful person"
Case vbBlue
MsgBox "You 're a brave person"
Case vbMagenta
MsgBox "You 're a sad person"
Else
MsgBox "You 're an average person"
End Select
Cách vi t n y tương ñ i d ñ c và ít nh m l n khi vi t code hơn là dùng nhi u ELSEIF. Ph n ELSE
trong Select Case statement thì optional (nhi m ý), t c là có cũng ñư c, không có cũng không sao. H
khi ñi u ki n c a m t Case ñư c tho mãn thì nh ng dòng code t ñó cho ñ n dòng Case k dư i hay
Else ñư c x lý và ti p theo execution s nh y xu ng dòng n m ngay dư i dòng End Select.
Nh là dư i cùng ta vi t End Select, ch không ph i End If. Các Expression dùng cho m i trư ng
h p Case không nh t thi t ph i ñơn gi n như v y. ð bi t thêm chi ti t v cách dùng Select Case, b n
highlight ch Case (doubleclick ch Case) r i b m nút F1.
Dùng FOR statement
Trong l p trình, nói v Flow Control (ñi u khi n hư ng ñi c a execution) ta dùng hai lo i statement
chính: Branch statements như IF..THEN..ELSE (k c Select Case) và Iterative statements (l p ñi,
l p l i) như FOR và WHILE LOOP (Vòng). Ta s nói ñ n WHILE Loop trong ph n k ti p. Trong khi
Branch statement cho phép ta execute trong nhánh n y hay nhánh kia tùy theo value c a Logical
Expression thì Iterative statement cho ta execute m t ph n code l p ñi, l p l i nhi u l n cho ñ n khi
m t ñi u ki n ñư c th a mãn.
Gi d ta vi t m t chương trình ñơn gi n ñ tính t ng s các con s gi a b t c hai con s nào (coi
ch ng l n quá). Cái form c a chương trình gi ng như dư i ñây:
33
Sau khi cho hai con s From (T ) và To (Cho ñ n) ta click nút Calculate và th y k t qu hi n ra
trong Textbox txtTotal. Cái Sub tính t ng s ñư c li t ra dư i ñây:
Private Sub CmdTotal_Click()
Dim i, FromNo, ToNo, Total
FromNo = CInt(txtFromNumber.Text) ' Convert Text string ra internal number b?ng Function
CInt
ToNo = CInt(txtToNumber.Text) ' Convert Text string ra internal number b?ng Function CInt
Total = 0 ' Initialise Total value to zero
For i = FromNo To ToNo ' Iterate from FromNo to ToNo
Total = Total + i ' Add the number to the Total
Next
txtTotal.Text = CStr(Total) ' Convert internal number ra Text string
End Sub
Trong thí d trên, FOR loop b t ñ u t dòng For i = FromNo To ToNo và ch m d t dòng Next.
Khi execution b t ñ u Total b ng 0, i b ng FromNo. Execution s ñi qua h t nh ng dòng trong FOR
loop r i value c a i s ñư c tăng lên 1, r i execution s b t ñ u l i ñ u loop. Trong thí d n y vì
FromNo=4 và ToNo=6 nên execution s ñi qua cái FOR loop 3 l n. L n th nh t i=4, l n th nhì i=5
,và l n th ba thì i=6. Sau ñó, khi i=7 thì nó l n hơn ToNo (=6) nên execution nh y ra kh i FOR loop.
K t qu là Total=15 và ñư c display trong Textbox txtTotal, sau khi ñư c converted t internal
number ra text string v i Function CStr.
N u ta ch mu n c ng nh ng s ch n t 4 ñ n 16 ta có th làm cho i tăng value lên 2 (thay vì 1) m i
khi ñ n cu i loop. T c là i=4,6,8 .v.v..Ta s thêm ch STEP trong FOR statement như sau:
For i = 4 To 16 Step 2 ' Iterate from 4 to 16 with Step=2
Total = Total + i ' Add the number to the Total
Next
Total s b ng 4+6+8+10+12+14+16= 70. Trong thí d trên ta cũng có th dùng STEP s âm như sau:
For i = 16 To 4 Step -2 ' Iterate from 16 to 4 with Step=-2
Total = Total + i ' Add the number to the Total
Next
Trong trư ng h p n y FOR loop b t ñ u v i i=16. Khi ñ n cu i loop l n th nh t value c a i b b t 2
và tr thành 14. Sau ñó i b gi m giá tr d n d n ñ n 4. K ñó i=2 thì nh hơn s cu i cùng (=4) nên
execution nh y ra kh i FOR loop.
Gi d ta mu n l y ra t t c nh ng blank space trong m t text string. Ta bi t con s characters trong
m t text string, còn g i là chi u dài c a text string có th tính b ng cách dùng Function Len(TString).
Và ñ nói ñ n character th i trong m t Text string ta dùng Mid Function.
34
Khi User click button Remove Blank Spaces chương trình s execute Sub dư i ñây:
Private Sub CmdRemoveBlankSpaces_Click()
Dim i, TLen, TMess
TMess = "" ' Initialise temporary String to null string
For i = 1 To Len(txtOriginalString.Text) ' Iterate from the first chracter to the last character
of the string
' Check if chracter is NOT a blank space
If Mid(txtOriginalString.Text, i, 1) <> " " Then
' Character is not a blank space - so append it to TMess
TMess = TMess & Mid(txtOriginalString.Text, i, 1)
End If
Next
txtResultString.Text = TMess ' Disaplay TMess by assigning it to txtResultString.text
End Sub
Thông thư ng, ta dùng FOR loop khi bi t trư c execution s ñi qua loop m t s l n nh t ñ nh. Nhưng
th nh tho ng, khi m t ñi u ki n ñư c th a mãn ta có th ép execution nh y ra gi a ch ng kh i FOR
loop, ch không ñ i cho ñ n ñ s l n ñi qua loop. Thí d như ta mu n bi t ph i c ng bao nhiêu s k
ti p t 1 tr lên ñ ñư c t ng s v a l n hơn hay b ng 76.
Khi User click button Work Out, Sub dư i ñây s ñư c x lý:
Private Sub cmdWorkOut_Click()
Dim i, Total, WantedTotal
WantedTotal = CInt(txtWantedTotal.Text) ' Convert Text string ra internal number b?ng Function
CInt
Total = 0 ' Initialise Total value to zero
For i = 1 To 30
35
Total = Total + i ' Add the number to the Total
If Total >= WantedTotal Then Exit For ' Jump out of FOR loop
Next
txtActualTotal.Text = CStr(Total) ' Display the Actual Total
txtUptoNumber.Text = CStr(i) ' Display the highest number
End Sub
Dùng DO WHILE Loop statement
Khi ta không bi t ch c là execution s ñi qua loop bao nhiêu l n thì t t nh t là dùng DO WHILE Loop
statement. Khàc v i FOR Loop, trong DO WHILE Loop ta ph i t lo initialisation (t c là m i vô ñ u i
b ng bao nhiêu) và t lo tăng value c a parameter i. N u Logical Expression là True thì execute nh ng
dòng code t DO WHILE cho ñ n Loop.
Thí d m i v a qua có th vi t l i b ng cách dùng DO WHILE Loop như sau:
Private Sub cmdWorkOut_Click()
Dim i, Total
WantedTotal = CInt(txtWantedTotal.Text) ' Convert Text string ra internal number b?ng Function
CInt
Total = 0 ' Initialise Total value to zero
i = 1 ' Intialise at the first character
Do While (Total < WantedTotal) ' Logical Expression is (Total < WantedTotal)
Total = Total + i ' Add the number to the Total
i = i + 1 ' Increment the vakue of i
Loop
txtActualtotal.Text = CStr(Total) ' Display the Actual Total
txtUptonumber.Text = CStr(i - 1) ' Display the highest number
End Sub
TRong khi Total hãy còn nh hơn WantedTotal thì ta ti p t c ñi qua While Loop. Gi d ta có các
hàng text ch a giá ti n các th có th b vào bánh mì th t v i giá như sau:
Chicken Roll 45c
Roast Beef 55c
Tomato Sauce 5c
Bây gi ta mu n vi t code ñ l y ra giá ti n t nh ng hàng Text string như trên. Ta s ñi t bên ph i
l n l n qua trái cho ñ n khi tìm ñư c m t blank space.
Private Sub WorkOutPrice_Click()
Dim i, TStr, PriceInCents, Price
TStr = "Chicken Roll 45c"
i = Len(TStr) ' Starting from the rightmost character of the text string
' Going from right to left, look for the first blank character
Do While (Mid(TStr, i, 1) <> " ")
i = i - 1 ' Keep walking to the left
Loop
PriceInCents = Mid(TStr, i + 1) ' String including character "c"
' Discard the rightmost character which is "c" and convert the price string to single number
Price = CSng(Left(PriceInCents, Len(PriceInCents) - 1))
txtPrice.Text = CStr(Price) ' Display the highest number
36
End Sub
Dùng Function
Function là m t d ng subroutine gi ng gi ng như Sub. Ch khác ch Function cho ta m t k t qu ,
cho nên cách dùng Function hơi khác v i Sub. Ta vi t m t variable bên trái d u =, ñư c assigned k t
qu c a m t Function. Thí d như ta dùng Trim Function ñ lo i b nh ng blank space hai ñ u c a
text string TString:
ResultString = Trim(TString)
Ta ñưa cho Function Trim m t text string called TString. Sau khi Function Trim ñư c executed, ta có
k t qu nhưng TString không h thay ñ i. Ngư c l i, khi ta g i m t Sub, t t c nh ng parameter ta ñưa
cho Sub ñ u có th thay ñ i tr khi ta tuyên b m t parameter nào ñó là ByVal. Trong thí d sau, m t
copy c a StringA ñư c ñưa cho Sub nên sau khi execute ProcessString, StringA không h b thay ñ i.
Sub ProcessString (ByVal StringA, ConditionA, ConditionB)
Public Sub và Function
Khi ta dùng ch Public (thay vì Private) phía trư c m t Sub hay Function, ta cho phép code n m m t
Form hay Basic Module khác có th g i (hay dùng) Sub hay Function ñó. Thí d trong Form2 ta có
ñ nh nghĩa DisplayData là:
Public Sub DisplayData
. . . .
End Sub
Trong Form1, ta g i DisplayDta như sau:
Form2.DisplayData
Chương Ba - Form và các Controls thông thư ng
H u h t các chương trình VB6 ñ u có ít nh t m t Form. Khi ta ch y chương trình, Form n y s hi n
ra trư c h t ñ ta ra l nh nó làm chuy n gì. Cái Form tr ng không ch làm ñư c gì nhi u, nên ta ñ t
lên Form nh ng controls như Textbox(h p ñ ñánh ch vào), Label(nhãn), Commandbutton(nút b m
m nh l nh), .v.v.. Các controls cho ta enter các d ki n ñ chương trình dùng x lý, và các controls
cũng hi n th (display) k t qu cho chúng ta xem.
S p ñ t controls lên Form
Ta hãy b t ñ u thi t k m t chương trình m i (New Project) b ng cách ch n Standard EXE, môi
trư ng tri n khai l p trình (IDE) cho b n s n m t Form tên là Form1. Mu n ñ t m t Control lên Form,
click hình cái Control trong Toolbox r i Drag (b m nút trái c a con chu t r i kéo cho thành hình ch
nh t trư c khi buông nút trái ra) con chu t trên Form v thành c c a Control. M t cách khác ñ ñ t
m t control lên Form là doubleclick cái Control trong Toolbox, m t hình control s hi n ra trên Form.
K ñó b n d i control ñi ñ n ch mình mu n và resize nó. N u b t c lúc nào b n không th y Túi ñ
ngh (Toolbox) n m bên trái, b n có th dùng m nh l nh Menu View|Toolbox ñ b t nó hi n ra. Có
m t cách khác là click lên toolbox icon trên toolbar chính c a VB6.
37
Nên nh r ng Toolbox cũng là m t window như các window khác. Khi nó hi n lên r i b n có th n m
(b m nút trái c a con chu t và gi như v y ch không buông ra) title nó ñ d i ñi nơi khác. B n có th
ñóng nó b ng cách click lên d u x góc ph i phía trên. N u right click trên Toolbox, nó s display
context sensitive menu, trong ñó có property dockable (có th ñ u b n) . N u m t window là
dockable, sau khi b n d i nó ñi kh i vi trí docked bình thư ng c a nó, b n có th dock nó l i như c
b ng cách double click lên title c a nó.
Resize và di chuy n control
Khi b n select m t control (click lên nó), chung quanh control s hi n ra resize handle, 8 nút ñen d c
theo chu vi c a control.
Click lên các nút ñen c a resize handle, b n có th resize control. Có m t cách khác ñ resize control
là dùng Shift + ArrowKey. B m nút Shift trong khi b m m t arrow key, control s l n ra hay thu h p
theo chi u c a ArrowKey.
Lưu ý: M t s control có kích thư c t i thi u, b n không th làm cho nó nh hơn ñư c. Thí d như
Combobox, nó ph i cao ñ ñ display m t hàng text.
Tương t như th , b m nút Ctrl trong khi b m m t arrow key, control s di chuy n theo chi u c a
ArrowKey.
Ngoài ra, nên nh r ng trong lúc chương trình ch y (at run-time), trong code ta có th thay ñ i kích
thư c và v trí các controls d dàng, th m chí có th làm cho chúng hi n ra hay bi n m t b ng cách s a
ñ i value các property left, top, width, height và visible c a các controls.
Alignment Grid
ð giúp b n s p ñ t ngay ng n các controls trên m t form, VB6 cho b n Alignment Grid. Nó là nh ng
d u ñen c a các hàng d c và xuôi trên form. B n có th làm cho các d u ñen c a grid trên form bi n
m t b ng cách dùng menu command Tools | Options ñ display Option Dialog, k ñó ch n Tag
General và clear checkbox "Show Grid":
38
B n cũng có th nhân d p n y thay ñ i kho ng cách chi u r ng (Width) và chi u cao (Height) c a các
ch m ñen c a grid. Kích thư c nh nh t c a Width hay Height là 24. Hãy so sánh hai trư ng h p form
có và không có Show Grid như dư i ñây:
Control Locking
M t khi b n ñã s p ñ t kích thư c và v trí c a các control trên form r i, r t d ta tình c thay ñ i các
ñ c tính y vì vô ý click lên m t control. Do ñó VB6 cho ta Menu command Format | Lock Controls
ñ khóa chúng l i. Sau khi khóa, cái hình ng khóa trên menu b chìm xu ng.
39
N u sau n y b n mu n thay ñ i kích thư c ho c v trí c a chúng thì nh dùng Menu command
Format | Lock Controls l i. Sau khi m khóa, cái hình ng khóa trên menu hi n ra bình thư ng.
Cài ñ t các Properties c a Form
Nhi u property c a m t form nh hư ng ñ n di n m o v t lý (physical appearance) c a nó. Property
Caption s quy t ñ nh text ñư c hi u th trong title. N u Property BorderStyle c a form không ph i là
Sizable thì User không th resize form at run-time. Property Icon quy t ñ nh hình icon ñu c dùng
trong title c a form, nh t là khi form thu nh (minimized). N u b n không mu n cho phép User
minimize hay maximize form thì set value c a property MinButton, MaxButton ra False. N u property
ControlBox là False thì form s không có nút minize, maximize hay close (x) trên góc ph i c a nó,
ñ ng th i form cũng không display c icon bên góc trái title như trong hình dư i ñây:
V trí ñ u tiên (top,left) c a form có th ñư c thay ñ i trong design time b ng cách di chuy n hình nh
c a nó trong window Form Layout:
Property WindowState xác ñ nh Form s có kích thư c bình thư ng (normal=0), hay minimized (=1),
maximized =(2).
Lưu ý là property Font c a Form s ñư c các control n m trên nó th a k . T c là khi b n ñ t m t
control lên form, property Font c a control y s t ñ ng tr nên gi ng y như c a form.
Vài Event thông d ng c a Form
Nhìn t m t phương di n, Form cũng gi ng như Control. Ta có th instantiate m t form nhi u l n ñ
có nhi u form tương t nhau. Trong thí d dư i ñây, ta instantiate Form2 hai l n ñ có MyForm và
YourForm:
Private Sub CmdCreateForms_Click()
Dim MyForm, YourForm
Set MyForm = New Form2
MyForm.Caption = "This is My Form"
MyForm.Show
40
MyForm.Move 1000, 1000
Set YourForm = New Form2
YourForm.Caption = "YOUR FORM IS HERE"
YourForm.Show
YourForm.Move 2000, 2000
End Sub
M t Form cũng có nhi u Events r t h u d ng.
• F
orm_Initialize: Event n y xãy ra trư c nh t và ch m t l n thôi khi ta instantiate form ñ u tiên. Ta
dùng Form_Initialize event ñ th c hi n nh ng gì c n ph i làm chung cho t t c các instances c a
form n y.
• F
orm_Load: Event n y xãy ra m i l n ta instantiate m t form. N u ta ch dùng m t instance duy
nh t c a m t form trong chương trình thì Form_Load coi như tương ñương v i Form_Initialize. Ta
dùng Form_Load event ñ initialise variables, controls v.v. cho instance n y.
Bên trong Form_Load b n không th dùng Setfocus cho m t control nào trên form vì form chưa
h n thành hình (ra ñ i). Mu n làm vi c y b n ph i delay (trì ho n) m t chút xíu b ng cách dùng
Control Timer ñ ñ i cho Form_Load ñư c hoàn t t. Thí d :
Private Sub Form_Load()
Timer1.Interval = 500
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Timer1.Enabled = False ' Timer1_Timer only execute once
txtName.Setfocus ' Make Tab Cursor start at TextBox txtName
End Sub
• F
orm_Activate: M i l n m t form tr nên active (current) thì nó generate m t Activate event. Ta có
th dùng event n y ñ refresh display trên form.
• F
orm_QueryUnload: Khi User click d u x phía trên bên ph i ñ close form thì nó generate
QueryUnload event. Syntax c a Sub n y như dư i ñây:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
End Sub
Event n y cho ta m t d p ñ cancel Close action c a form (t c là không cho User close form) b ng
cách set Cancel b ng 1. UnloadMode cho ta bi t ai, task hay form nào mu n close form n y.
Ngoài ra, b n cũng nên bi t r ng m t form t ñ ng Load hay tr nên active n u b n nh c ñ n nó, thí
d như dùng Form2.List1. Khi m t form ñã ñư c loaded r i b n có th hide (làm cho bi n m t) nó.
41
K ñó, khi b n show form ra tr l i thì form không có gì thay ñ i. Nhưng n u b n Unload m t form
(thí d b ng cách dùng Unload Form2 ), r i sau ñó load tr l i b ng cách dùng Form2.Show ch ng
h n, thì Form ph i tr i qua quá trình Form_Load, và dĩ nhiên form m t t t c nh ng gì có trư c ñây.
Ngoài ra, Hide/Show m t form ñã ñư c loaded r i thì r t nhanh, còn Unload/Load thì m t thì gi hơn.
Khi b n Show m t Form chưa hi n h u thì form s ñư c loaded và show. ðôi khi b n mu n Load m t
form, r i làm vi c v i nó trư c khi Show, trong trư ng h p ñó b n dùng Load Form2 r i m t ch p
sau dùng Form2.Show.
MDI Form
ðôi khi b n mu n có m t MDI form, t c là m t form có th ch a nhi u form con bên trong. D ng
MDIform n y thư ng ñư c dùng trong các application như wordprocessor ñ có th m nhi u
document cùng m t lúc, m i document ñư c hi n th trong m t form con. ð có m t MDIForm b n
c n ph i dùng menu command Project | Add MDI Form. M i VB6 project ch có th có t i ña m t
MDIform. Mu n m t form tr thành m t form con b n set property MDI Child c a nó thành True. At
run-time b n không th hide (bi n nó thành invisible) m t MDIChild form, nhưng có th minimize nó.
N u b n th t s mu n hide nó thì ph i dùng mánh l i là cho nó v trí (top,left) s âm l n hơn kích
thư c nó ñ nó n m ngoài t m hi n th c a form. Trong m t chương trình dùng MDI Form, khi b n
click MDI Form nó không nh y ra phía trư c và che các form con, nhưng v n luôn luôn n m dư i.
Controls là gì?
Controls v a có hình, v a có code ch y bên trong m t window nho nh , gi ng như m t form. Khi ta
l p trình VB6 ta l p ráp các controls (là nh ng v t d ng ti n ch ) trên m t hay nhi u form ñ có m t
chương trình nhanh chóng. Ta giao d ch v i m t control qua ba ñ c tính c a control:
• P
roperties: t p h p các ñ c tính c a control mà ta có th n ñ nh lúc design time hay run-time. Có
nhi u properties v di n m o, n u ta thay ñ i at design time s th y k t qu hi n ra l p t c, thí d
Font hay màu s c.
• M
ethods: nh ng gì control th c hi n ñu c, t c là nh ng kh năng c a nó.
• E
vents: nh ng s c mà control s thông báo cho chúng ta bi t khi nó xãy ra v i control. Khi m t
event xãy ra VB6 s x lý m t Event Handler (thí d như Sub Command1_Click()), mi n là chúng
ta vi t code s n trong ñó. N u không có code thì coi như chúng ta không thèm bi t ñ n các event
lo i ñó. Có m t s Events mà chúng ta thư ng x lý là:
o C
lick : xãy ra khi user click lên control. Ta thư ng dùng nó cho CommandButton và Listbox.
o M
ouseDown, MouseUp : m i khi User b m m t mouse button là có m t MouseDown Event, khi
User buông nó ra thì có m t MouseUp Event. Ta thư ng dùng MouseDown Event ñ Popup
context sensitive menu hay b t ñ u m t di n bi n Drag.
Thí d :
Private Sub Foods_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)
If Button = vbRightButton Then ' if Right button was pressed
PopupMenu mnuActions ' popup a menu
End If
42
End Sub
Private Sub DrinkList_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)
DrinkList.drag ' Displaying a drag icon to start the drag process
End Sub
ð ý là Click không cho chúng ta thêm chi ti t gì v s c , trong khi MouseDown/MouseUp cho ta
bi t v trí c a cursor, button nào c a Mouse ñư c b m và lúc y User có b m nút Shift, Ctrl hay Alt
không. M i Click là ñi ñôi v i m t c p MouseDown/MouseUp. N u b n mu n x lý v a Click l n
MouseDown thì ph i c n th n. Thí d b n mu n v a handle Click event v a handle Mouse Drag thì
ph i làm sao phân bi t hai trư ng h p. N u không User ch mu n th y k t qu c a Click mà l i th y
control b t ñ u display m t Drag icon thì s b c mình.
o K
eyPress : xãy ra khi user Press m t key. Ta thư ng dùng nó cho TextBox ñ lo i ra (filter out) các
keystrokes ta không ch p nh n. KeyPress cho ta ASCII value, m t con s có giá tr t 1 ñ n 255,
c a key.
Trong thí d dư i ñây, m t Enter key s ñư c coi như m t TAB key:
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0 ' Swallow the character to avoid side effect
SendKeys "{TAB}" ' Emulate entering a TAB
End If
End Sub
o K
eyDown, KeyUp : m i KeyPress event là cho ta m t c p KeyDown/KeyUp event.
KeyDown/KeyUp cho ta KeyCode và Shift value. ð detect Function key ta c n dùng KeyDown
event.
Trong thí d dư i ñây, ta display Function key User b m:
Private Sub Text3_KeyDown(KeyCode As Integer, Shift As Integer)
If (KeyCode >= 112) And (KeyCode <= 123) Then
MsgBox "You pressed the Function key: F" & Trim(Str(KeyCode - 111))
End If
End Sub
o G
LotFocus : Control tr nên active khi nó nh n ñư c Focus. Nó s generate m t GotFocus Event. Ta
có th dùng nó ñ ñ i màu background c a m t text box như trong thí d dư i ñây:
Private Sub Text2_GotFocus()
Text2.BackColor = vbYellow
End Sub
43
o L
LostFocus : Thư ng thư ng h m t Control GotFocus thì trư c ñó có m t Control LostFocus. Ta
có th dùng Event n y ñ Validate entry data hay thu x p công chuy n cho m t control v a m t
Focus.
Trong thí d dư i ñây, n u User không ñánh vào m t con s trong Textbox Text1 thì s ñư c
thông báo và Tab Cursor s tr l i Textbox Text1.
Private Sub Text1_LostFocus()
If Not IsNumeric(Text1.Text) Then
MsgBox "Please enter a number!"
Text1.SetFocus
End If
End Sub
o r
DagDrop : xãy ra khi ta drop m t cái gì lên control . Parameter Source cho ta bi t Control nào ñã
ñư c Drag và Drop. Nhi u khi m t control có th nh n drop t nhi u control khác nhau. Trong
trư ng h p ñó ta ph i test xem ho c Control Type, ho c Name ho c Tag value c a Source control
là gì ñ tùy nghi x lý.
Trong thí d dư i ñây, khi User drop mouse xu ng Textbox Text2, n u Source là m t Listbox,
không c n bi t Listbox nào, thì ta copy dòng ñư c ch n trong Listbox y qua Textbox Text2.
Private Sub Text2_DragDrop(Source As Control, X As Single, Y As Single)
If TypeOf Source Is ListBox Then
Text2.Text = Source.Text
End If
End Sub
TextBox
TextBox là control ñu c dùng nhi u nh t ñ display text và nh n keystroke c a Userñ s a ñ i text có
s n hay cho vào text m i. Property chính và default c a Textbox là text, t c là thư ng thư ng
Text2.text có th ñư c vi t t t là Text2. Ta có th disable (khi n nó b t l c, không ph n ng gì h t và
không cho s a ñ i) m t text box b ng cách set Property Enable ra False (ch s b m ñi), hay Lock
(không cho s a ñ i) m t text box b ng cách set Property Locked ra True (ch không b m ).
Text có th ñư c Align (Alignment Property) ñ display bên trái, chính gi a hay bên ph i c a h p nó.
B n có th ch n BackColor và ForeColor cho background và text c a TextBox. Dùng Tag Palette khi
ch n màu ñ có ñúng m t màu b n mu n.
44
Dĩ nhiên b n có th l a ch n Font và c ch cho Text v i Font Property.
B n gi i h n s characters mà User có th enter cho TextBox b ng cách set MaxLength Property.
N u Property Multiline là True thì User có th enter nhi u hàng. At Design time, n u b n mu n enter
multiline thì ph i nh b m nút Ctrl khi press Enter m i khi xu ng hàng. N u không VB6 IDE tư ng
r ng b n ñã k t thúc editing.
Mu n assign cho text box multiline text thì ph i nhét vào m i cu i hàng CarriageReturn và LineFeed
characters. Thí d như:
Private Sub Command1_Click()
Dim TextStr
TextStr = "Bau ra bau lay ong cau" & vbCrLf ' Note: vbCrLf = chr(13) & chr(10)
TextStr = TextStr & "Bau cau ca bong ngat dau kho tieu"
Text1.Text = TextStr
End Sub
N u b n mu n mách nư c cho User v cách dùng m t textbox nào ñó thì có th dùng Property
ToolTipText ñ nó display mách nư c m i khi mouse cursor n m lên textbox.
45
Dùng Property TabIndex ñ n ñ nh th t cho Tab Cursor d ng m i khi User b m nút TAB ñ d i
TAB Cursor ñ n Textbox k ti p. N u b n không mu n Tab Cursor d ng m t TextBox nào thì set
Property TabStop nó thành False. Tab Cursor không d ng Textbox có Property Enabled b ng False,
nhưng v n d ng Textbox có property Locked b ng True.
N u b n mu n dùng Textbox làm m t Password field thì set Property PasswordChar b ng "*". Làm
như th s ép bu c Textbox display m i character b ng PasswordChar, t c là "*", ñ ngư i khác
không ñ c ñư c trong khi User enter m t Paswword.
Properties SelLength, SelStart và SelText
N u b n mu n bi t ñư c tình hình hi n th i c a Textbox: SelText cho b n dãy ch ñang ñư c
selected. SelStart cho b n v trí c a insertion point (ch cursor flashing). SelLength cho bi t con s
characters ñã ñư c selected.
N u b n mu n s a ñ i text trong Textbox: SelText cho b n nhét vào m t dãy ch . SelStart cho b n n
ñ nh v trí b t ñ u c a dãy ch b n s p select. SelLength n ñ nh s characters b n mu n ch n, b t ñ u
t SelStart.
Dư i ñây là m t thí d trong ñó ta highlight text tìm ñư c:
Private Sub Form_Click ()
Dim Search, Where ' Declare variables.
' Get search string from user.
Search = InputBox("Enter text to be found:")
Where = InStr(Text1.Text, Search) ' Find the given string in Text1.Text.
If Where > 0 Then ' If found,
Text1.SelStart = Where - 1 ' set selection start and
Text1.SelLength = Len(Search) ' set selection length.
Else
MsgBox "String not found." ' Notify user.
End If
End Sub
CommandButton
CommandButton r t ti n cho ta dùng vào vi c x lý m t chuy n gì khi User click lên button. Event ta
dùng thư ng nh t cho CommanButton là Click. Ta dùng Property Caption c a CommandButton ñ
enter cái gì ta mu n display trên button. N u mu n cho phép User dùng ALT+E (ñè nút Atl trong lúc
b m nút E) ñ generate event click thì nhét d u "&" trư c ch E trong Caption c a button. Caption s
display ch E v i m t g ch dư i.
Ngoài ra ta cũng có th cho thêm m t cái hình vào CommandButton b ng cách ch n m t icon cho
property Picture và set Property Style ra Graphical, thay vì Standard.
46
Lúc Run-time b n có th thay ñ i hình hay Caption c a CommandButton. Trong thí d dư i ñây,
Caption c a CommandButton CmdOperation flip-flop gi a hai values Stop và Start:
Private Sub CmdOperation_Click()
If CmdOperation.Caption = "&Stop" Then
CmdOperation.Caption = "St&art"
Else
CmdOperation.Caption = "&Stop"
End If
End Sub
Label
M c ñích chính c a Label là ñ display, không cho User Edit như Textbox. Do ñó ta có th dùng
Property Font, ForeColor và Backcolor ñ làm cho nó ñ p. Ngoài ra Property BorderStyle có th cho
Label l m xu ng n u b n set nó b ng Fixed Single. N u set property BackStyle b ng Transparent s
tránh trư ng h p Backcolor c a Label làm cho không ñ p.
Label cũng có Property Tabindex. N u b n mu n dùng ALT key ñ mang Tab Cursor v m t Textbox,
hãy ñ m t Label v i TabIndex b ng TabIndex c a TextBox tr 1. Gi s Label có Caption là
"&Address" thì ALT+A s mang Tab Cursor v TextBox màu vàng như trong thí d dư i ñây:
Ngoài ra nh r ng b n có th thay ñ i Caption c a Label lúc run-time.
CheckBox
CheckBox ñư c dùng ñ User xác nh n có ñ c tính nào m t cách nhanh chóng. Property Value c a
CheckBox có th là Checked (làm cho h p vuông có d u, b ng 1), Unchecked (làm cho h p vuông
tr ng không, b ng 0) hay Grayed (làm cho h p vuông có d u màu nh t, b ng 2). M t khi bi t r ng
CheckBox có Value b ng 1, ta có th ñ c Caption c a CheckBox ñ dùng n u c n.
47
B n có th dùng Property Alignment ñ làm cho Caption ñ ng bên ph i (Left Justify) hay bên trái
(Right Justify) c a h p vuông.
OptionButton
OptionButton ( còn g i là RadioButton) có hình tròn v i m t ch m gi a, thay gì hình vuông v i m t
g ch gi a như CheckBox. OptionButton luôn luôn ñư c qui t thành m t nhóm, ch a trong m t
container. Container là m t Control có kh năng ch a các controls khác. Frame, PictureBox, hay chính
Form ñ u là Container. Sau khi ñ t m t Container lên Form, n u mu n ñ m t OptionButton lên
Container, trư c h t ta ph i Select container, r i k ñó ch n OptionButton. S dĩ, t t c OptionButtons
ph i n m trong m t container là vì b t c lúc nào, nhi u nh t là m t OptionButton trong container có
value True (vòng tròn có ch m gi a).
Mu n bi t m t OptionButton có th t s n m trong m t container, b n th kéo cái container ñi ch
khác. N u OptionButton b d i theo container thì nó n m trong container. M t cách khác là th kéo
OptionButton ra kh i container. N u kéo ra ñư c thì nó không n m trong container.
Mu n di chuy n m t OptionButton t container n y sang container khác, b n Cut OptionButton r i
Paste nó vô container kia.
ðôi khi m t container n m che trên m t control khác. Mu n mang m t container ra phía sau các
controls khác b n Select container r i dùng Menu command Format | Order | Send to Back.
48
Chương B n - Vi t Code
Trong ba chương ñ u chúng ta ñã h c qua ba b ph n chánh c a m t chương trình Visual Basic 6.0.
ðó là:
• Forms là cái n n hay khung ñ ta xây d ng User Interface.
• Controls là nh ng viên g ch ñ ta dùng xây d ng User Interface.
• Event procedures là code n m phía sau nh ng hình nh, nó là ch t keo dùng ñ dán các
Controls l i v i nhau ñ t o thành chương trình áp d ng c a ta.
Như ta ñã th y, t t c các code ñư c x lý (executed) khi có m t Event xãy ra. Thí d như khi User
click m t CommandButton (Event Click) hay type nút Tab ñ di chuy n Cursor t Textbox n y (Event
Lostfocus) qua Textbox khác (Event GotFocus). Các nhóm code x lý là :
Private Sub Command1_Click()
...
End Sub
Private Sub Text1_LostFocus()
...
End Sub
và
Private Sub Text2_GotFocus()
...
End Sub
Trong khi l p trình, m i l n ta double click lên m t Control c a m t Form là VB6 IDE t ñ ng
generate cho ta cái v t hàng Private Sub Control_Event() cho ñ n End Sub ñ chúng ta ñi n nh ng
hàng code c a mình vào chính gi a.
ði u khi n th t x lý các dòng code
Gi d ta vi t m t chương trình Vb6 ñơn gi n như trong hình n y v i hai Textbox tên txtName, txtAge
và m t nút tên CmdEnter n m trong m t form tên Form1:
49
Thông thư ng các dòng code ñư c x lý theo th t t trên xu ng dư i. Thí d như ñ ki m xem các
d ki n v a ñư c cho vào các Textbox có tương ñ i h p lý hay không, khi User click nút CmdEnter,
ta x lý Sub dư i ñây:
Private Sub CmdEnter_Click()
' Make sure the Name field is not blank
If txtName.Text = "" Then
MsgBox "Please enter Name"
Exit Sub ' Terminate this Sub
End If
' Make sure a number is supplied for Age
If Not IsNumeric(txtAge.Text) Then
MsgBox "Please enter a number for Age"
Exit Sub ' Terminate this Sub
End If
End Sub
Cái Sub nói trên có ch Private n m phía trư c, ý nói ch n i trong cùng m t form ch a Control
CmdEnter (t c là Form1 trong trư ng h p n y) ta m i có th g i (dùng) Sub CmdEnter_Click().
Thí d ta mu n khi User b m key "Enter" trên bàn phím sau khi cho vào chi ti t Textbox txtAge thì
coi như User ñã click nút CmdEnter. Ta vi t như sau:
Private Sub txtAge_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0 ' swallow Key Enter to avoid side effect
CmdEnter_Click ' Call Private Sub CmdEnter_Click from the same form
End If
End Sub
Khi ta dùng câu CmdEnter_Click làm m t dòng code (còn g i là g i Sub CmdEnter_Click) thì coi
như tương ñương v i nhét t t c 10 dòng codes gi a hai hàng Private Sub CmdEnter_Click() và
End Sub t i ch câu CmdEnter_Click, như vi t l i dư i ñây:
Private Sub txtAge_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0 ' Swallow Key Enter to avoid side effect
' Make sure the Name field is not blank
If txtName.Text = "" Then
MsgBox "Please enter Name"
Exit Sub ' Terminate this Sub
End If
' Make sure a number is supplied for Age
50
If Not IsNumeric(txtAge.Text) Then
MsgBox "Please enter a number for Age"
Exit Sub ' Terminate this Sub
End If
End If
End Sub
Có m t cách nói khác là khi execution ñi ñ n hàng CmdEnter_Click thì nó nh y vào Private Sub
CmdEnter_Click() ñ execute cho ñ n h t r i nh y tr l i hàng k ti p trong Private Sub
txtAge_KeyPress(KeyAscii As Integer) Trong Private Sub CmdEnter_Click() n u User không
ñánh gì vào Textbox txtName thì chương trình s display message "Please enter Name" r i Exit Sub.
ðây là cách nh y ngay ra kh i Sub ch không ñ i ph i execute xu ng t i hàng chót.
Dùng IF....THEN statement
Trong Private Sub CmdEnter_Click() trên ta th y có hai ch dùng IF...THEN ñ th xem m t
ñi u ki n gì có ñư c th a mãn không. N u ñi u ki n là ñúng v y, t c là True thì ta th c hi n nh ng gì
ñu c vi t t hàng IF...THEN cho ñ n hàng END IF. Ngư c l i, n u ñi u ki n không ñúng thì
execution nh y xu ng t i dòng code n m ngay dư i dòng END IF. T c là có khi execution s ñi
ngang qua, có khi không ñi ngang qua nh ng dòng code gi a câu IF...THEN và câu END IF. ði u
ki n trong IF Statement là ph n n m gi a hai ch IF và THEN. Nó ñu c g i là Logical Expression.
Ta có:
txtName.text = "" ' content of Textbox txtName is nothing, i.e. an empty string
và
NOT IsNumeric(txtAge.text) ' content of TextBox txtAge is not a number
Trong Logical Expression th nhì ta dùng Function IsNumeric ñ ñư c cho bi t r ng txtAge.text có
ph i là m t con s hay không. Vì ta ch than phi n khi txtAge không ph i là m t con s nên ta ph i ñ
thêm ch NOT phía tru c. T c là khi
IsNumeric(txtAge.text) = False
thì
NOT IsNumeric(txtAge.text) = True
N u gi a IF...THEN và END IF ch có m t dòng code b n có th nh p dòng code lên v i IF...THEN
và không dùng END IF. T c là:
If theColorYouLike = vbRed Then
MsgBox "You 're a lucky person!"
End If
is equivalent with
If theColorYouLike = vbRed Then MsgBox "You 're a lucky person!"
M t Logical Expression có th ñơn gi n (simple) như trong các thí d trên hay r c r i hơn n u ta ráp
nhi u simple Logical Expression l i v i nhau b ng cách dùng nh ng t OR và AND. Khi hai Logical
Expression ñư c ráp l i b ng ch OR (HAY) thì ch c n ít nh t m t trong hai Expression là TRUE là
Logical Expression t ng h p cũng là TRUE. Cái TRUE Table cho OR như sau:
A B A OR B
FALSE FALSE FALSE
FALSE TRUE TRUE
51
TRUE FALSE TRUE
TRUE TRUE TRUE
Trong thí d dư i ñây n u m t ngư i 25 tu i tr lên HAY có l i t c trên 30 ngàn ñô la m t năm thì
cho mư n ti n ñư c :
If (PersonAge >= 25) Or (PersonIncome >= 30000) Then
LendPersonMoney
End If
ð ý cách dùng các d u ngo c ñơn gi ng như trong toán ñ i s . Thông thư ng h cái gì n m trong
ngo c thì mình tính trư c. N u có nhi u l p d u ngo c thì tính theo th t t trong ra ngoài. Như trong
bài trên ta tính xem PersonAge >= 25 xem là TRUE hay FALSE, r i tính xem PersonIncome >=
30000 xem là TRUE hay FALSE, trư c khi tính k t qu t ng h p, d a vào cái TRUE table cho OR.
Khi hai Logical Expression ñư c ráp l i b ng ch AND (Và) thì ch khi nào c hai Expression ñ u là
TRUE, Logical Expression t ng h p m i là TRUE. Cái TRUE Table cho AND như sau:
A B A AND B
FALSE FALSE FALSE
FALSE TRUE FALSE
TRUE FALSE FALSE
TRUE TRUE TRUE
Trong thí d dư i ñây n u h c sinh 18 tu i tr lên và cha m ki m 100 ngàn tr lên m t năm thì ñăng
ký h c sinh m t ñ i h c tư:
If (StudentAge >= 18) And (ParentIncome >= 100000) Then
EnrollStudentAtPrivateUniversity
End If
M t Logical Expression có th t p h p c OR l n AND như trong thí d dư i ñây n u h c sinh 18 tu i
tr lên và cha m ki m 100 ngàn tr lên m t năm HAY h c sinh có Intelligent Quotient cao hơn 160
thì ñăng ký h c sinh m t ñ i h c tư:
If ((StudentAge >= 18) And (ParentIncome >= 100000)) Or (StudentIQ > 160) Then
EnrollStudentAtPrivateUniversity
End If
Hai d u ngo c ñơn n m bên ngoài c a:
((StudentAge >= 18 ) And (ParentIncome >= 100000))
không c n thi t vì theo qui ư c, ta tính AND expression trư c khi tính OR expression, nhưng nó giúp
ta ñ c d hơn.
Dùng IF....THEN..ELSE statement
Hãy xem thí d :
If (StudentPassmark > 75) Then
' Part A
52
EnrollStudentAtPublicSchool
Else
' Part B
EnrollStudentAtPrivateSchool
End If
N u h c sinh ñ u v i s ñi m trên 75 thì cho h c trư ng công, N U KHÔNG thì ph i h c trư ng tư.
T c là n u StudentPassmark > 75 là TRUE thì x lý ph n A, n u không thì x lý ph n B. ð ý ph n
A g m nh ng dòng code n m gi a dòng If (StudentPassmark > 75) then và else. Còn ph n B g m
nh ng dòng code n m gi a dòng else và end if.
Ta có th ráp ch ELSE v i ch IF ñ dùng như trong thí d sau ñây:
<
If (StudentPassmark > 75) Then
EnrollStudentAtPublicSchool
ElseIf (StudentPassmark >= 55) Then
EnrollStudentAtSemipublicSchool
Else
EnrollStudentAtPrivateSchool
End If
N u h c sinh ñ u v i s ñi m trên 75 thì cho h c trư ng công, N U t 55 ñi m ñ n 75 ñi m thì cho
h c trư ng bán công, n u không (t c là ñi m ñ u dư i 55) thì ph i h c trư ng tư.
N u t nh nh , không có trư ng tư, ta không có quy t ñ nh cho h c trò ñ u dư i 55 ñi m h c ñâu
thì b ph n ELSE trong thí d trên. Ph n chương trình tr thành:
If (StudentPassmark > 75) Then
EnrollStudentAtPublicSchool
ElseIf (StudentPassmark >= 55) Then
EnrollStudentAtSemipublicSchool
End If
Ta có th dùng ELSEIF nhi u l n như sau:
If (TheColorYouLike = vbRed) Then
MsgBox "You 're a lucky person"
ElseIf (TheColorYouLike = vbGreen) Then
MsgBox "You 're a hopeful person"
ElseIf (TheColorYouLike = vbBlue) Then
MsgBox "You 're a brave person"
ElseIf (TheColorYouLike = vbMagenta) Then
MsgBox "You 're a sad person"
Else
MsgBox "You 're an average person"
End If
Execution ñi l n lư t t trên xu ng dư i, n u m t ñi u ki n IF là TRUE thì x lý ph n c a nó r i nh y
xu ng ngay dư i dòng END IF. Ch khi m t ñi u ki n IF không ñư c th a mãn ta m i th m t ñi u
ki n IF bên dư i k ñó. T c là n u b n thích màu ñ l u màu tím (magenta) thì chương trình s
display "You're a lucky person", và không h bi t "You're a sad person".
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6
Visual basic 6

More Related Content

What's hot

2. huong dan trinh by tt bang power point 2003
2. huong dan trinh by tt bang power point 20032. huong dan trinh by tt bang power point 2003
2. huong dan trinh by tt bang power point 2003Luckyboy Nguyễn
 
tiểu luận wincc
tiểu luận wincctiểu luận wincc
tiểu luận winccNamzekeng Nzk
 
Giáo trình hướng dẫn sử dụng Autocad
Giáo trình hướng dẫn sử dụng AutocadGiáo trình hướng dẫn sử dụng Autocad
Giáo trình hướng dẫn sử dụng AutocadĐàm Tài Cap
 
Chapter 1 1 vi
Chapter 1 1 viChapter 1 1 vi
Chapter 1 1 viTan Duy
 
Giáo trình hướng dãn sử dụng Microsoft Word 2013
Giáo trình hướng dãn sử dụng Microsoft Word 2013Giáo trình hướng dãn sử dụng Microsoft Word 2013
Giáo trình hướng dãn sử dụng Microsoft Word 2013Tươi Sama
 
GIAO TRINH COREL DRAW X3
GIAO TRINH COREL DRAW X3GIAO TRINH COREL DRAW X3
GIAO TRINH COREL DRAW X3jenlien
 
Quy tắc thiết kế giao diện và viết code C#
Quy tắc thiết kế giao diện và viết code C#Quy tắc thiết kế giao diện và viết code C#
Quy tắc thiết kế giao diện và viết code C#An Nguyen
 
Tổng quan Unigraphics NX
Tổng quan Unigraphics NXTổng quan Unigraphics NX
Tổng quan Unigraphics NXMinh Chien Tran
 
Bai tap lap trinh web voi joomla csau
Bai tap   lap trinh web voi joomla csauBai tap   lap trinh web voi joomla csau
Bai tap lap trinh web voi joomla csauGiang Nguyễn
 
THCS_W08_BaiGiang_PowerPoint
THCS_W08_BaiGiang_PowerPointTHCS_W08_BaiGiang_PowerPoint
THCS_W08_BaiGiang_PowerPointCNTT-DHQG
 
Hướng dẫn sử dụng word 2013 - Chương 1 Giới thiệu
Hướng dẫn sử dụng word 2013 - Chương 1 Giới thiệuHướng dẫn sử dụng word 2013 - Chương 1 Giới thiệu
Hướng dẫn sử dụng word 2013 - Chương 1 Giới thiệumrtomlearning
 

What's hot (16)

Giao trinh corel draw
Giao trinh corel drawGiao trinh corel draw
Giao trinh corel draw
 
2. huong dan trinh by tt bang power point 2003
2. huong dan trinh by tt bang power point 20032. huong dan trinh by tt bang power point 2003
2. huong dan trinh by tt bang power point 2003
 
Bon nuoc win_cc
Bon nuoc win_ccBon nuoc win_cc
Bon nuoc win_cc
 
tiểu luận wincc
tiểu luận wincctiểu luận wincc
tiểu luận wincc
 
Giáo trình hướng dẫn sử dụng Autocad
Giáo trình hướng dẫn sử dụng AutocadGiáo trình hướng dẫn sử dụng Autocad
Giáo trình hướng dẫn sử dụng Autocad
 
WinCC
WinCCWinCC
WinCC
 
Chapter 1 1 vi
Chapter 1 1 viChapter 1 1 vi
Chapter 1 1 vi
 
Giáo trình hướng dãn sử dụng Microsoft Word 2013
Giáo trình hướng dãn sử dụng Microsoft Word 2013Giáo trình hướng dãn sử dụng Microsoft Word 2013
Giáo trình hướng dãn sử dụng Microsoft Word 2013
 
Visio 2010
Visio 2010Visio 2010
Visio 2010
 
GIAO TRINH COREL DRAW X3
GIAO TRINH COREL DRAW X3GIAO TRINH COREL DRAW X3
GIAO TRINH COREL DRAW X3
 
Quy tắc thiết kế giao diện và viết code C#
Quy tắc thiết kế giao diện và viết code C#Quy tắc thiết kế giao diện và viết code C#
Quy tắc thiết kế giao diện và viết code C#
 
Tổng quan Unigraphics NX
Tổng quan Unigraphics NXTổng quan Unigraphics NX
Tổng quan Unigraphics NX
 
Bai tap lap trinh web voi joomla csau
Bai tap   lap trinh web voi joomla csauBai tap   lap trinh web voi joomla csau
Bai tap lap trinh web voi joomla csau
 
THCS_W08_BaiGiang_PowerPoint
THCS_W08_BaiGiang_PowerPointTHCS_W08_BaiGiang_PowerPoint
THCS_W08_BaiGiang_PowerPoint
 
Access 2007
Access 2007Access 2007
Access 2007
 
Hướng dẫn sử dụng word 2013 - Chương 1 Giới thiệu
Hướng dẫn sử dụng word 2013 - Chương 1 Giới thiệuHướng dẫn sử dụng word 2013 - Chương 1 Giới thiệu
Hướng dẫn sử dụng word 2013 - Chương 1 Giới thiệu
 

Viewers also liked

Discoveramericas plan-de-negocio
Discoveramericas plan-de-negocioDiscoveramericas plan-de-negocio
Discoveramericas plan-de-negocioXavier Hurtado
 
Jahresbericht 2007
Jahresbericht 2007Jahresbericht 2007
Jahresbericht 2007hvoWE
 
Fachfrühstück iPhone Juni 2010
Fachfrühstück iPhone Juni 2010Fachfrühstück iPhone Juni 2010
Fachfrühstück iPhone Juni 2010go4mobile
 
Inadimplência e Corte de Energia Elétrica: a nova Res.414 da ANEEL
Inadimplência e Corte de Energia Elétrica: a nova Res.414 da ANEELInadimplência e Corte de Energia Elétrica: a nova Res.414 da ANEEL
Inadimplência e Corte de Energia Elétrica: a nova Res.414 da ANEELAmpla Energia S.A.
 
Der Weg zum Social Intranet : Arbeiten 2.0 erleben und adaptieren
Der Weg zum Social Intranet : Arbeiten 2.0 erleben und adaptierenDer Weg zum Social Intranet : Arbeiten 2.0 erleben und adaptieren
Der Weg zum Social Intranet : Arbeiten 2.0 erleben und adaptierenCommunardo GmbH
 

Viewers also liked (10)

Discoveramericas plan-de-negocio
Discoveramericas plan-de-negocioDiscoveramericas plan-de-negocio
Discoveramericas plan-de-negocio
 
Municipio saludable
Municipio saludableMunicipio saludable
Municipio saludable
 
Jahresbericht 2007
Jahresbericht 2007Jahresbericht 2007
Jahresbericht 2007
 
Fachfrühstück iPhone Juni 2010
Fachfrühstück iPhone Juni 2010Fachfrühstück iPhone Juni 2010
Fachfrühstück iPhone Juni 2010
 
Resumen Guia RCP 2010
Resumen Guia RCP 2010 Resumen Guia RCP 2010
Resumen Guia RCP 2010
 
Dr. David Hughes
Dr. David HughesDr. David Hughes
Dr. David Hughes
 
Inadimplência e Corte de Energia Elétrica: a nova Res.414 da ANEEL
Inadimplência e Corte de Energia Elétrica: a nova Res.414 da ANEELInadimplência e Corte de Energia Elétrica: a nova Res.414 da ANEEL
Inadimplência e Corte de Energia Elétrica: a nova Res.414 da ANEEL
 
Životna sredina
Životna sredinaŽivotna sredina
Životna sredina
 
PHP Web Programming
PHP Web ProgrammingPHP Web Programming
PHP Web Programming
 
Der Weg zum Social Intranet : Arbeiten 2.0 erleben und adaptieren
Der Weg zum Social Intranet : Arbeiten 2.0 erleben und adaptierenDer Weg zum Social Intranet : Arbeiten 2.0 erleben und adaptieren
Der Weg zum Social Intranet : Arbeiten 2.0 erleben und adaptieren
 

Similar to Visual basic 6

Giáo trình tổng quan về Vb
Giáo trình tổng quan về VbGiáo trình tổng quan về Vb
Giáo trình tổng quan về VbSun Down
 
Về Visual Basic 20 5
Về Visual Basic 20 5Về Visual Basic 20 5
Về Visual Basic 20 5Phong Lữ
 
[Bachkhoa-Aptech] Lập trình Web doanh nghiệp
[Bachkhoa-Aptech] Lập trình Web doanh nghiệp[Bachkhoa-Aptech] Lập trình Web doanh nghiệp
[Bachkhoa-Aptech] Lập trình Web doanh nghiệpPhạm Văn Hưng
 
Lập trình với microsoft visual basic 6.0
Lập trình với microsoft visual basic 6.0Lập trình với microsoft visual basic 6.0
Lập trình với microsoft visual basic 6.0Học Huỳnh Bá
 
Visualbasic6lythuyet 121025092821-phpapp01
Visualbasic6lythuyet 121025092821-phpapp01Visualbasic6lythuyet 121025092821-phpapp01
Visualbasic6lythuyet 121025092821-phpapp01hatrungkhien
 
TL huong dan lam quen va su dung MS word 2013
TL huong dan lam quen  va su dung MS word  2013TL huong dan lam quen  va su dung MS word  2013
TL huong dan lam quen va su dung MS word 2013Trinh Hung
 
Phần mềm tạo sơ đồ tư duy
Phần mềm tạo sơ đồ tư duyPhần mềm tạo sơ đồ tư duy
Phần mềm tạo sơ đồ tư duyHaBaoChau
 
20 phím tắt và hotkey tốt nhất cho windows pc
20 phím tắt và hotkey tốt nhất cho windows pc20 phím tắt và hotkey tốt nhất cho windows pc
20 phím tắt và hotkey tốt nhất cho windows pcKinh Duong Quang
 
Hướng dẫn sử dụng Micrpsoft Powerpoint XP
Hướng dẫn sử dụng Micrpsoft Powerpoint XPHướng dẫn sử dụng Micrpsoft Powerpoint XP
Hướng dẫn sử dụng Micrpsoft Powerpoint XPtctuvan
 
Bai giangvb.net
Bai giangvb.netBai giangvb.net
Bai giangvb.netvvpcdsptin
 
Unit 3 common elements vn
Unit 3 common elements vnUnit 3 common elements vn
Unit 3 common elements vnHG Rồng Con
 
Thiết kế 2D Autocad 2018
Thiết kế 2D Autocad 2018Thiết kế 2D Autocad 2018
Thiết kế 2D Autocad 2018Technical VN
 
Chuong vb.net
Chuong vb.netChuong vb.net
Chuong vb.netkienbom
 
[Xaydung360.vn]sketch up pro 2016 tv
[Xaydung360.vn]sketch up pro 2016 tv[Xaydung360.vn]sketch up pro 2016 tv
[Xaydung360.vn]sketch up pro 2016 tvxngoc83
 
530 c3ce7 5a75-bfda-403d-eda9733b6aa8-giao_trinh_access_2010
530 c3ce7 5a75-bfda-403d-eda9733b6aa8-giao_trinh_access_2010530 c3ce7 5a75-bfda-403d-eda9733b6aa8-giao_trinh_access_2010
530 c3ce7 5a75-bfda-403d-eda9733b6aa8-giao_trinh_access_2010Phi Phi
 

Similar to Visual basic 6 (20)

Giáo trình tổng quan về Vb
Giáo trình tổng quan về VbGiáo trình tổng quan về Vb
Giáo trình tổng quan về Vb
 
Về Visual Basic 20 5
Về Visual Basic 20 5Về Visual Basic 20 5
Về Visual Basic 20 5
 
[Bachkhoa-Aptech] Lập trình Web doanh nghiệp
[Bachkhoa-Aptech] Lập trình Web doanh nghiệp[Bachkhoa-Aptech] Lập trình Web doanh nghiệp
[Bachkhoa-Aptech] Lập trình Web doanh nghiệp
 
Lập trình với microsoft visual basic 6.0
Lập trình với microsoft visual basic 6.0Lập trình với microsoft visual basic 6.0
Lập trình với microsoft visual basic 6.0
 
Visualbasic6lythuyet 121025092821-phpapp01
Visualbasic6lythuyet 121025092821-phpapp01Visualbasic6lythuyet 121025092821-phpapp01
Visualbasic6lythuyet 121025092821-phpapp01
 
TL huong dan lam quen va su dung MS word 2013
TL huong dan lam quen  va su dung MS word  2013TL huong dan lam quen  va su dung MS word  2013
TL huong dan lam quen va su dung MS word 2013
 
Phần mềm tạo sơ đồ tư duy
Phần mềm tạo sơ đồ tư duyPhần mềm tạo sơ đồ tư duy
Phần mềm tạo sơ đồ tư duy
 
20 phím tắt và hotkey tốt nhất cho windows pc
20 phím tắt và hotkey tốt nhất cho windows pc20 phím tắt và hotkey tốt nhất cho windows pc
20 phím tắt và hotkey tốt nhất cho windows pc
 
Hướng dẫn sử dụng Micrpsoft Powerpoint XP
Hướng dẫn sử dụng Micrpsoft Powerpoint XPHướng dẫn sử dụng Micrpsoft Powerpoint XP
Hướng dẫn sử dụng Micrpsoft Powerpoint XP
 
Bai giangvb.net
Bai giangvb.netBai giangvb.net
Bai giangvb.net
 
Giáo trình corel draw cơ bả
Giáo trình corel draw cơ bảGiáo trình corel draw cơ bả
Giáo trình corel draw cơ bả
 
Unit 3 common elements vn
Unit 3 common elements vnUnit 3 common elements vn
Unit 3 common elements vn
 
Bai giangvb.net
Bai giangvb.netBai giangvb.net
Bai giangvb.net
 
Thiết kế 2D Autocad 2018
Thiết kế 2D Autocad 2018Thiết kế 2D Autocad 2018
Thiết kế 2D Autocad 2018
 
huong dan hoan chinh Autocad 2018 2D
huong dan hoan chinh Autocad 2018 2Dhuong dan hoan chinh Autocad 2018 2D
huong dan hoan chinh Autocad 2018 2D
 
Chuong vb.net
Chuong vb.netChuong vb.net
Chuong vb.net
 
Lythuyet thi
Lythuyet thiLythuyet thi
Lythuyet thi
 
[Xaydung360.vn]sketch up pro 2016 tv
[Xaydung360.vn]sketch up pro 2016 tv[Xaydung360.vn]sketch up pro 2016 tv
[Xaydung360.vn]sketch up pro 2016 tv
 
530 c3ce7 5a75-bfda-403d-eda9733b6aa8-giao_trinh_access_2010
530 c3ce7 5a75-bfda-403d-eda9733b6aa8-giao_trinh_access_2010530 c3ce7 5a75-bfda-403d-eda9733b6aa8-giao_trinh_access_2010
530 c3ce7 5a75-bfda-403d-eda9733b6aa8-giao_trinh_access_2010
 
Giao trinh access 2010
Giao trinh access 2010Giao trinh access 2010
Giao trinh access 2010
 

More from Khanh Cuong Chau Le

More from Khanh Cuong Chau Le (9)

Picture grammar for_children_4
Picture grammar for_children_4Picture grammar for_children_4
Picture grammar for_children_4
 
Picture grammar for_children_3
Picture grammar for_children_3Picture grammar for_children_3
Picture grammar for_children_3
 
Picture grammar for_children_2
Picture grammar for_children_2Picture grammar for_children_2
Picture grammar for_children_2
 
Picture grammar for_children_1
Picture grammar for_children_1Picture grammar for_children_1
Picture grammar for_children_1
 
Picture grammar for_children_starter
Picture grammar for_children_starterPicture grammar for_children_starter
Picture grammar for_children_starter
 
Bai giang hoa_phan_tich_3859
Bai giang hoa_phan_tich_3859Bai giang hoa_phan_tich_3859
Bai giang hoa_phan_tich_3859
 
Vba
VbaVba
Vba
 
Mut
MutMut
Mut
 
Dao hoai nam phan tich va xu ly so lieu bang spss
Dao hoai nam   phan tich va xu ly so lieu bang spssDao hoai nam   phan tich va xu ly so lieu bang spss
Dao hoai nam phan tich va xu ly so lieu bang spss
 

Visual basic 6

  • 1.
  • 2. 1 Chương M t - Hoan nghênh ñ n v i VB6 Chào m ng b n ñ n v i Visual Basic 6 Dùng VB6 là cách nhanh và t t nh t ñ l p trình cho Microsoft Windows. Cho dù b n là chuyên nghi p hay m i m ñ i v i chương trình Windows, VB6 s cung c p cho b n m t b công c hoàn ch nh ñ ñơn gi n hóa vi c tri n khai l p trình ng d ng cho MSWindows. Visual Basic là gì? Ph n "Visual" ñ c p ñ n phương phàp ñư c s d ng ñ t o giao di n ñ h a ngư i dùng (Graphical User Interface hay vi t t c là GUI) . Có s n nh ng b ph n hình nh, g i là controls, b n tha h s p ñ t v trí và quy t ñ nh các ñ c tính c a chúng trên m t khung màn hình, g i là form. N u b n ñã t ng s d ng chương trình v ch ng h n như Paint, b n ñã có s n các k năng c n thi t ñ t o m t GUI cho VB6. Ph n "Basic" ñ c p ñ n ngôn ng BASIC (Beginners All-Purpose Symbolic Instruction Code), m t ngôn ng l p trình ñơn gi n, d h c, ñư c ch ra cho các khoa h c gia (nh ng ngư i không có thì gi ñ h c l p trình ñi n toán) dùng. Visual Basic ñã ñư c ra t MSBasic, do Bill Gates vi t t th i dùng cho máy tính 8 bits 8080 hay Z80. Hi n nay nó ch a ñ n hàng trăm câu l nh (commands), hàm (functions) và t khóa (keywords). R t nhi u commands, functions liên h tr c ti p ñ n MSWindows GUI. Nh ng ngư i m i b t ñ u có th vi t chương trình b ng cách h c ch m t vài commands, functions và keywords. Kh năng c a ngôn ng này cho phép nh ng ngư i chuyên nghi p hoàn thành b t kỳ ñi u gì nh s d ng ngôn ng l p trình MSWindows nào khác. Ngư i mang l i ph n "Visual" cho VB là ông Alan Cooper. Ông ñã gói môi trư ng ho t ñ ng c a Basic trong m t ph m vi d hi u, d dùng, không c n ph i chú ý ñ n s tinh x o c a MSWindows, nhưng v n dùng các ch c năng c a MSWindows m t cách hi u qu . Do ñó, nhi u ngư i xem ông Alan Cooper là cha già c a Visual Basic. Visual Basic còn có hai d ng khác: Visual Basic for Application (VBA) và VBScript. VBA là ngôn ng n m phía sau các chương trình Word, Excel, MSAccess, MSProject, .v.v.. còn g i là Macros. Dùng VBA trong MSOffice, ta có th làm tăng ch c năng b ng cách t ñ ng hóa các chương trình. VBScript ñư c dùng cho Internet và chính Operating System. Dù cho m c ñích c a b n là t o m t ti n ích nh cho riêng b n, trong m t nhóm làm vi c c a b n, trong m t công ty l n, hay c n phân b chương trình ng d ng r ng rãi trên th gi i qua Internet, VB6 cũng s có các công c l p trình mà b n c n thi t. Các n b n Visual Basic 6 Có ba n b n VB6: Learning, Professional và Enterprise. Chúng ta hãy gát qua n b n Learning. B n có th dùng n b n Professional hay Enterprise. n b n Professional cung c p ñ y ñ nh ng gì b n c n ñ h c và tri n khai m t chương trình VB6, nh t là các control ActiveX, nh ng b ph n l p trình ti n ch và r t h u d ng cho các chương trình ng d ng (application programs) c a b n trong tương lai. Ngoài ñĩa compact chính cho VB6, tài li u ñính kèm g m có sách Visual Studio Professional Features và hai ñĩa CD Microsoft Developer Network (MSDN). n b n Enterprise là n b n Professional c ng thêm các công c Back Office ch ng h n như SQL Server, Microsoft Transaction Server, Internet Information Server. Cài ñ t VB6 ð cài ñ t VB6, máy tính c a b n c n ph i có m t ñĩa CD-ROM (CD drive) . B n c n ít nh t 32 MB RAM, 2 GB hard disk và CPU Pentium II. Khi b VB6 CD vào CD drive, nó s t kh i ñ ng ñ display menu cho b n ch n nh ng th gì c n Setup, hãy click Install Visual Basic 6.0 ñ cài VB6.
  • 3. 2 Ngo i tr các file h ñi u hành (Operating System) trong thư m c (folder) Os, các file trong ñĩa compact ñ u không b nén. Vì th , b n có th s d ng chúng tr c ti p t ñĩa. Ví d , có nhi u công c và thành ph n trong folder Tools v n có th ñư c cài ñ t tr c ti p t CD-ROM. Ngoài ra, b n có th ch y Setup khi nào c n thi t. Ví d , b n có th ch y Setup ñ cài ñ t l i Visual Basic trong folder khác, ho c ñ cài ñ t thêm b t các ph n c a VB6. N u vì lý do gì h th ng không install các ñĩa compact MSDN (b n s khám phá ra ñi u n y khi th y Help không có m t lúc ch y VB6), b n có th cài ñ t chúng tr c ti p t ñĩa s 1 c a b MSDN. ð b xung và xóa các thành ph n VB: 1. B ñĩa compact vào CD drive. 2. N u menu không t ñ ng hi n lên thì ch y chương trình Setup có s n tong folder g c trên ñĩa compact. 3. Ch n nút Custom trong h p tho i (dialog) Microsoft Visual Basic 6.0 Setup. 4. Ch n hay xóa các thành ph n b ng cách check hay uncheck các h p danh sách Options c a dialog Custom. 5. Th c hi n các ch d n Setup trên màn hình. Ghi chú: Trong lúc cài VB6, nh ch n Graphics n u không b n s thi u m t s hình nh như icons, bitmaps v.v... ðáng l Microsoft cho t ñ ng cài ñ t Graphics, t c là Default (không có nói gì) thì cài ñ t Graphics. Integrated Development Environment (IDE) c a VB6 Khi kh i ñ ng VB6 b n s th y m ra nhi u c a s (windows), scrollbars, v.v.. và n m ch ng lên là New Project dialog. ñây VB6 cho b n ch n m t trong nhi u lo i công trình. Ch n Standard EXE. M t lát sau trên màn nh s hi n ra giao di n c a môi trư ng phát tri n tích h p (Integrated Development Environment - IDE ) gi ng như dư i ñây:
  • 4. 3 IDE c a VB6 bao g m các y u t sau: Menu Bar Ch a ñ y ñ các commands mà b n s d ng ñ làm vi c v i VB6, k c các menu ñ truy c p các ch c năng ñ c bi t dành cho vi c l p trình ch ng h n như Project, Format, ho c Debug. Trong Menu Add-Ins có Add-Ins Manager cho phép b n g n thêm nh ng menu con nhi m ý ñ ch y các chương trình l i ích cho vi c l p trình. Trong Add-Ins Manager dialog b n ch n m t Add-In r i check m t hay nhi u h p trong khung Load behavior: Toolbars (Debug, Edit, form Editor, Standard)
  • 5. 4 Các toolbars có hình các icons cho phép b n click ñ th c hi n công vi c tương ñương v i dùng m t menu command, nhưng nhanh và ti n hơn. B n dùng menu command View | Toolbars (click lên menu command View cho popupmenu hi n ra r i click command con Toolbars) ñ làm cho các toolbars hi n ra hay bi n m t ñi. B n có th thay ñ i v trí m t toolbar b ng cách n m vào hai g ch vertical n m bên trái toolbar r i d i toolbar ñi ch khác (n m ñây nghĩa là ñ pointer c a mouse lên ch ch m ñ trong hình phía dư i r i b m xu ng và gi nút bên trái c a mouse, trong khi kéo pointer ñi nơi khác). Ngoài ra b n cũng có th s a ñ i các toolbars theo ý thích b ng cách dùng Menu command View | Toolbars | Customize... Toolbox ðây là h p ñ ngh v i các công c , g i là controls, mà b n có th ñ t lên các form trong lúc thi t k (design). N u Toolbox bi n m t, b n có th display nó tr l i b ng cách dùng menu command View | Toolbox. B n có th khi n toolbox display nhi u controls hơn b ng cách ch n Components... t context menu (ch n Toolbox r i b m nút ph i c a mouse ñ display context menu) hay dùng menu command Project | Components. Ngoài vi c trình bày Toolbox m c ñ nh, b n có th t o cách trình bày khác b ng cách ch n Add Tab... t context menu và b sung các control cho tab t k t qu . Project Explorer S li t kê các forms và các modules trong project hi n hành c a b n. M t project là s t p h p các files mà b n s d ng ñ t o m t trình ng d ng. T c là, trong VB6, khi nói vi t m t program có nghĩa là tri n khai m t project. Properties window
  • 6. 5 Li t kê các ñ c tính c a các forms ho c controls ñư c ch n. M t property là m t ñ c tính c a m t object ch ng h n như size, caption, ho c color. Khi b n s a ñ i m t property b n s th y hi u qu ngay l p t c, thí d thay ñ i property Font c a m t Label s th y Label y ñư c display b ng Font ch m i. Khi b n ch n m t Property c a control hay form trong Properties window, phía bên ph i ch value c a property có th display ba ch m (. . .) hay m t tam giác ch a xu ng. B m vào ñó ñ display m t dialog cho b n ch n value. Thí d dư i ñây là dialog ñ ch n màu cho property ForeColor c a control Label1. Form Layout B n dùng form Layout ñ ch nh v trí c a các forms khi form hi n ra l n ñ u lúc chương trình ch y. Dùng context command Resolution Guides ñ th y n u dùng m t màn nh v i ñ m n (resolution) t hơn, thí d như 640 X 480, thì nó s nh như th nào. Form Designer Dùng ñ thi t k giao di n l p trình. B n b sung các controls, các ñ h a (graphics), các hình nh và m t form ñ t o s ma sát mà b n mu n. M i form trong trình ng d ng c a b n có designer form riêng c a nó. Khi b n maximise m t form designer, nó chi m c khu làm vi c. Mu n làm cho nó tr l i c bình thư ng và ñ ng th i ñ th y các form designers khác, click nút Restore Window góc bên ph i, phía trên. Immediate Window Dùng ñ g r i (debug) trình ng d ng c a b n. B n có th display d ki n trong khi ch y chương trình ng d ng. Khi chương trình ñang t m ng ng m t break point, b n có th thay ñ i giá tr các variables hay ch y m t dòng chương trình. View Code button Click lên nút n y ñ xem code c a m t form mà b n ñã ch n. Window c a code gi ng như dư i ñây:
  • 7. 6 Trong Code window b n có th ch n display t t c Sub c a code cùng m t lúc như trong hình hay display m i l n ch m t Sub b ng cách click button có hình ba dòng n m góc bên trái phía dư i. View form button Click lên nút n y ñ xem form c a m t form mà b n ñã ch n. Ghi chú: Nhi u windows trong IDE như Toolbars, Toolbox, Project Explorer .v.v..có th trôi lình bình (floating) hay ñ u b n (docked). B n có th thay ñ i v trí chúng b ng cách n m vào Title Bar c a window r i d i ñi. Dĩ nhiên b n cũng có th m r ng hay làm nh m t window b ng cách d i m t c nh vertical hay horizontal c a nó. Khi ñ m t window lên trên m t window khác chúng có th tìm cách dính nhau. Trong hình dư i ñây, Properties Window và Form Layout ñã ñư c kéo ra ngoài cho floating. Nh n tr giúp trong khi ñang làm vi c Trong khi l p trình b n có th c n tìm hi u các thông tin liên quan ñ n các commands, functions .v.v.. c a VB6. B n có th kh i ñ ng Microsoft Developer Network | MSDN Library Visual Studio 6.0 t nút Start, hay click Help | Contents t Menu Bar c a VB6, hay ch n m t keyword (highlight keyword) r i n F1 ñ ñ c Help. N i dung Help bao g m nhi u ñ c ñi m ñư c thi t k ñ th c hi n vi c tìm ki m thông tin d dàng hơn. B n có th d a trên Contents ñ ñ c tài li u như m t quy n sách, Index ñ ñ c nh ng ño n có nh c ñ n m t keyword hay Search ñ tìm m t tài li u nhanh hơn. Ví d , vi c g r i thông tin b t ngu n t nhi u ñ c tính khác nhau ph thu c vào lo i ñ án mà b n ñang làm vi c. Các liên k t ñư c
  • 8. 7 mô t trong ph n n y th c hi n vi c tìm ki m d dàng hơn. Ngoài ra, b n cũng có th click See Also dư i tiêu ñ c a ch ñi m ñ xem các tiêu ñ c a các ch ñi m mà b n có th ñi ñ n ho c liên h ñ n nhi u thông tin. Context Sensitive Help (tr giúp trong ñúng tình hu ng) Nhi u ph n c a VB6 là context sensitive, có nghĩa là lúc b i r i ch c n n nút F1 ho c highlight keyword r i nh n F1 là ñư c thông tin nh ng gì liên h tr c ti p v i tình hu ng hi n gi c a b n. B n có th nh n F1 t b t kỳ ph n context sensitive nào c a giao di n VB6 ñ display thông tin Help v ph n ñó. Các ph n context sensitive là: • Các Windows c a VB6 như Properties, Code .v.v.. • Các control trong Toolbox. • Các Object trên m t form ho c Object tài li u. • Các ñ c tính trong Window Properties. • Các keywords c a VB6 • Các thông báo l i (error messages) Ngoài ra, trong Help thư ng có Example. B n click lên ch Example ñ display m t thí d minh h a cách dùng m t function hay property. Microsoft on the Web Web site c a Microsoft ch a nhi u thông tin c p nh t cho nh ng ngư i l p trình VB6. Trang ch Visual Basic ñ t t i URL http://www.microsoft.com/vbasic/. Thông tin có s n t i ñ a ch n y bao g m: • C p nh t các ñ c tính m i, các phiên b n s n ph m, các s n ph m liên h , các thuy t trình (seminar) và các ho t ñ ng (event) ñ c bi t. • Thông tin b sung trên các ñ c tính VB6 ch a trong các bài vi t g i là White Papers, các mách nư c (tips) và các trình tr giáo, ngu n ñào t o. • S n ph m m i t i xu ng (download) bao g m s c p nh t ñ n các file chương trình, các c p nh t tr giúp, các trình ñi u khi n, và các file liên h khác c a VB6. ð truy c p Web site c a Microsoft, t menu Help ch n Microsoft on the Web r i ch n menu con tùy thích như dư i ñây.
  • 9. 8 Ghi chú: M t s n i dung trên Web site c a Microsoft ñư c t i ưu hóa dành cho Microsoft Internet Explorer và không th display ñ y ñ trong m t b trình duy t (browser) khác. Do ñó b n nên ch dùng Internet Explorer làm browser trên máy b n mà thôi. Chương Hai- Vi t chương trình ñ u tiên B n ñang làm quen v i môi trư ng tri n khai l p trình (Integrated Development Environment - IDE) c a MS VB6 và r t nóng ru t mu n vi t nh ng dòng mã ñ u tiên ñ chào m ng th gi i. Ta th ôn l i m t s v n ñ mà có l b n ñã bi t r i. M t chương trình Visual Basic g m có ph n mã l p trình và các hình nh (visual components). B n có th thi t k ph n hình nh b ng cách dùng nh ng ñ ngh (Controls hay Objects) t Túi ñ ngh (Toolbox) n m bên trái. N u b n không th y cái Túi ñ ngh thì dùng m nh l nh Menu View|Toolbox ñ b t nó hi n ra. Khi b n b t ñ u thi t k m t chương trình b ng cách ch n Standard EXE, môi trư ng tri n khai l p trình (IDE) cho b n s n m t Form tên là Form1. B n có th ñ i tên (Name) nó trong cái c a s Propeties n m phía dư i bên ph i (trong hình dư i ñây ta edit Name property c a Form1 thành ra frmMainForm). B n cũng có th s a ñ t a (Title) c a form ra cái gì có ý nghĩa hơn b ng cách ñ i Caption c a form cũng trong c a s Propeties (trong hình dư i ñây ta edit Caption property c a form thành ra "Chi tiet cua ban toi").
  • 10. 9 S p ñ t các v t d ng lên Form Mu n ñ t m t Control lên Form, click hình cái Control trong Toolbox r i Drag (b m nút trái c a con chu t r i kéo cho thành hình ch nh t trư c khi buông nút trái ra) con chu t trên Form v thành c c a Control. Nh ng Controls b n s dùng thư ng nh t t Toolbox là Label (nhãn), Textbox (h p ñ ñánh ch vào) và CommandButton (nút b m m nh l nh). Trong hình trên ta có ba Label và ba Textbox. Mu n s a ch Label1 ra "Ten" thì edit Property Caption. Còn Textbox không dùng Property Caption mà dùng Property Text. Ta cũng có th thay ñ i các Property Caption và Text trong khi ch y chương trình (at run-time). Trong lúc thi t k (design time) b n có th s a ñ i ki u ch c a nh ng Controls b ng cách edit Property Font c a chúng trong c a s Properties (click bên ph i c a Property Font trong Properties Window, IDE s pop-up cái Font dialog ñ b n l a ch n nh ng ñ c tính c a Font như trong hình dư i ñây). N u b n th y b c mình t i sao cái c ch t có (default size) c a các Control hơi nh , b n có th gi i quy t b ng cách s a c ch c a chính Form cho nó l n hơn. Vì khi m t Control ñư c ñ t lên m t Form, nó th a k c ch c a Form. ð s p x p cho m t s Control th ng hàng v i nhau b n ch n c nhóm r i dùng m nh l nh Menu Format|Align|Lefts .v.v..N u b n chưa bi t cách ch n m t nhóm Control thì có hai cách. Cách th nh t b n ñè nút Shift trong khi click các Control b n mu n ch n. Cái Control mà b n ch n sau cùng s là cái chu n ñ các Control khác s làm gi ng theo. Cách th hai là Drag cho s i dây thun (rubber band) b c chung quanh các Control. Trong trư ng h p các Control n y n m trong m t container, thí d như m t khung (Frame) hay PictureBox, thì b n ph i click Form trư c, r i ñè nút Ctrl trong khi Drag rubber band bao các Control.
  • 11. 10 Ch a m i th c a m t d án VB T i ñây b n ñ ý th y trong c a s bên ph i, phía trên, g i là Project Explorer, có hình gi ng như m t cái cây (tree) cho th y ta có m t Form trong m t Project (d án). Project là m t cách ti n d ng ñ ta s p x p nh ng gì c n thi t cho m t d án. Thư ng thì m t d án có nhi u Form và có th c n nh ng th khác. M i Form s ñư c ch a vào ñĩa dư i d ng "frmMainForm.frm". B n save m t form b ng menu command File | Save formfilename.frm. N u trong Form1 có ch a hình nh (thí d b n dùng Properties Window ñ ch n m t icon hình gương m t cư i làm icon cho frmMainForm) thì các hình nh c a frmMainForm s ñu c t ñ ng ch a trong h sơ "frmMainForm.frx". Lưu ý là không nh t thi t tên c a h sơ (file) mà b n ph i cho bi t khi ch a (save) ph i gi ng như tên c a Form mà b n dùng trong chương trình. Tuy nhiên b n nên dùng cùng m t tên cho c hai ñ sau n y d tìm h sơ n u có th t l c. Theo qui ư c thông thư ng, các Form ñư c ñ t tên b t ñ u b ng "frm", thí d như "frmMainForm". Khi b n save m t Project thì có nghĩa là save t t c h sơ dùng cho d án, k c các Form và m t h sơ cho chính Project, thí d như "MyFirstProg.vbp" ("vbp" là vi t t t ch Visual Basic Project). B n save Vb6 project b ng menu command File | Save Project. À, mu n ñ i tên Project, b n click lên hàng trên cùng bên ph i trong c a s Project Explorer (Project1 (Project1.vbp)), r i edit tên c a Project trong c a s Properties phía dư i. B n nên ch a t t c nh ng h sơ dùng cho cùng m t Project trong cùng m t t p (Folder/Directory). B n có th dùng Notepad ñ m ra xem chơi, coi trong "frmMainForm.frm" có gì. B n s th y trong y g m có hai ph n: ph n ñ u là di n t các Control n m trong Form, ph n còn l i là mã l p trình mà b n vi t. B n cũng s chú ý là các properties mà b n ñã s a cho các Control ñ u ñư c ghi l i trong ph n ñ u nói trên. VB d a vào ph n di n t các Control ñ thi t l p l i (reconstruct) hình nh c a Form.
  • 12. 11 Sau n y, khi ñã lão luy n VB, b n có th dùng m t chương trình t ñ ng ch (generate) ra nh ng hàng di n t các Control cho m t Form. ðó là k thu t dùng trong các Wizards c a VB ñ ch m t s chương trình kh i ñ u cho chúng ta t các b ng k m (Template). Thêm mã l p trình ñ x lý m t s c H u h t l p trình trong Visual Basic là vi t mã ñ x lý các s c (Event). Thí d mu n ch m d t chương trình, ngư i s d ng s click nút "Xuat". ð th c hi n ñi u n y trong khi tri n khai chương trình b n doubleClick (click liên ti p 2 l n) nút "Xuat". VB IDE s vi t s n cho b n cái v c a m t Subroutine: Private Sub cmdXuat_Click() End ' B n ch vi t thêm dòng n y ñ k t thúc chương trình End Sub ð ý là tên (Name) c a nút Xuat là "cmdXuat" ("cmd" là vi t t t ch CommandButton), VB g n thêm d u g ch dư i và Event Click ñ làm thành tên cmdXuat_Click c a Sub, chương trình nh s ñư c x lý khi ngư i s d ng click nút Xuat. Chương trình nh hay Subroutine n y còn ñư c g i là Event Handler cho Event Click. Hàng ch xanh lá cây là dùng ñ gi i thích cho l p trình viên (g i là Comment), VB s hoàn toàn không chú ý ñ n nó khi x lý Sub cmdXuat_Click. Comment có nghĩa là chú thích. Trong VB chú thích b t ñ u b ng d u single quote '. Khi VB th y d u n y là nó b qua nh ng gì còn l i trên dòng mã.
  • 13. 12 Là L p trình viên chuyên nghi p b n nên t p thói quen dùng Comment m i nơi ñ giúp ngư i khác và chính b n hi u chương trình c a mình. Nên nh là ti n phí t n ñ b o trì m t chương trình thì ít nh t là tương ñương v i s ti n b ra l n ñ u ñ tri n khai. B o trì có nghĩa là thăm vi ng l i chương trình ñ s a l i (fix bug) và thêm các ñ c ñi m cho hay hơn (enhancement). Nói chung h b n làm ñi u gì bí hi m hay c c c thì làm ơn gi i thích rõ ràng. N u mu n c t m t dòng mã VB ra làm hai dòng thì ch m d t dòng th nh t b ng d u g ch dư i _. Ti p theo, b n doubleClick nút "Viet vao dia" và vi t nh ng hàng mã sau: Private Sub cmdViet_Click() Open "myFriends.txt" For Output As #2 ' M m t h sơ ñ vi t ra và g i là c ng s 2 ' Vi t vào c ng s 2: Tên, ð a ch và Tu i, ngăn cách nhau b ng d u ch m ph y Print #2, txtTen & ";" & txtDiachi & ";" & txtTuoi Close #2 ' ðóng c ng s 2 End Sub Trong Sub cmdViet_Click, trư c h t ta m m t h sơ tên là "myFriends.txt" và g i nó là c ng s 2. Sau khi m h sơ ñ vi t ra ta ráp Tên, ð a ch và Tu i l i, ngăn cách b ng d u ch m ph y (;) ñ ñánh d u nh sau n y ta mu n g riêng ba th ra tr l i. D u "&" là operator ñ ráp (concatenate) hai dòng ch (text string) l i v i nhau. Print #2 có nghĩa là vi t ra c ng s 2, t c là h sơ "myFriends.txt". Th chúng ta vi t ra c ng 2 là Tên, ð a ch và Tu i (txtTen & ";" & txtDiachi & ";" & txtTuoi). Nh ng r c r i c a vi c m m t h sơ Cái c ng s 2 trên là ta t ch n (arbitrary). Th t ra mu n g i c ng s m y cũng ñư c, mi n là chưa có ph n nào khác trong cùng chương trình n y ñang dùng c ng s y. ðây là m t cách VB làm vi c cho ti n thay vì g i nguyên m t cái tên h sơ dài. N u mu n ch c ch n không trùng s c ng v i ch nào khác, ta có th làm như sau: fileNo = freefile R i thay th s 2 b ng ch fileNo trong Sub cmdViet_Click. freeFile là m t Function (chương trình nh dùng ñ tính ra m t th gì) nh VB c p phát cho m t con s ñ i di n h sơ chưa ai dùng. Ch Output trong câu ( Open "myFriends.txt" For Output As #2 ) dùng ñây ñ nói t CPU (Central Processing Unit) ta mu n "vi t ra" m t h sơ. Khi m m t h sơ ñ vi t ra ki u n y thì n u h sơ chưa có nó s ñư c d ng nên (created). N u h sơ ñã có r i thì nó s b xoá b (delete) và ñ ng th i m t h sơ tr ng và m i s ñư c d ng nên. ð ng t chuyên môn là "vi t ch ng lên" (overwrite). N u ta m m t h sơ ñ "ñ c vào" thì dùng ch "Input" thay vì "Output". Còn n u "vi t thêm" vào m t h sơ có s n (ch không overwrite h sơ y) thì dùng ch "Append" thay vì "Output". Trong trư ng h p y b n ph i ki m xem h sơ "myFriends.txt" ñã có s n chưa. B n có th vi t như sau: If Dir("myFriends.txt") <> "" then ' N u h sơ "myFriends.txt" hi n h u Open "myFriends.txt" For Append As #2 ' M m t h sơ ñ vi t thêm và g i là c ng s 2 Else Open "myFriends.txt" For Output As #2 ' M m t h sơ ñ vi t ra và g i là c ng s 2 End If Function Dir("myFriends.txt") dùng trên s cho ta tên c a h sơ n u h sơ hi n h u, ngư c l i nó s cho m t dòng ch tr ng (empty string), bi u hi u là "". T i ñây, n u lanh ý b n s h i h sơ "myFriends.txt" n m folder nào. Câu tr l i là không bi t ch c. N u b n chưa ch a (save) chương trình vào dĩa (vì m i vi t) thì nó n m folder c a VB6.EXE. Còn như ñã ch a chương trình r i thì có l nó n m folder c a chương trình b n. Mu n h sơ "myFriends.txt" luôn luôn ñi cùng v i chương trình, b n có th làm như sau:
  • 14. 13 MyLocalFolder = App.path ' L y folder c a chương trình x lý c a b n If Right(MyLocalFolder,1) <> "" then ' N u ch cu i cùng không ph i là backslash MyLocalFolder = MyLocalFolder & "" ' thì g n thêm m t backslash cu i End If ' M m t h sơ v i tên có folder (full pathname) ñ vi t ra và g i là c ng s 2 Open MyLocalFolder & "myFriends.txt" For Output As #2 Cu i cùng ta ñóng h sơ l i b ng câu Close #2.. T rày VB có th c p s 2 ñ làm c ng cho ch khác trong chương trình. Default Property c a m t Control "txtTen" ñư c dùng ñây là vi t t t cho "txtTen.text", vì Default Property c a m t TextBox là text c a nó. Default Property c a m t Control là Property ñư c VB dùng khi b n ch cho tên c a Control mà thôi. Trong khi ñó Default Property c a Label là Caption. Vì txtTen ñư c dùng như txtTen.txt ñ nói ñ n m t dòng ch , nên trong chương trình ta nh c ñ n nó y như m t variable (mã s ) dùng cho m t string. Do ñó v i qui ư c dùng ba ch ñ u "txt" cho tên c a m t Textbox giúp ta nh n di n ngay nó không ph i là m t string variable bình thư ng. Hãy lưu ý s khác bi t khi g i m t Sub trong hai trư ng h p sau: Call CheckmyTextbox (txtDiachi) ' txtDiachi ñư c xem là Textbox tr n v n CheckmyTextbox txtDiachi ' txtDiachi ñư c xem là txtDiachi.text, m t dòng ch Th t các Control trên m t Form Trong chương trình n y ta mu n ngư i x d ng cho vào d ki n theo th t "Tên, ð a ch , Tu i". Khi m i vào, ta mu n cái d u ch p t t (cursor ) n m trong txtTen ngay ñ ngư i x d ng kh i m t công click vào Textbox y khi mu n mang cursor tr l i ñó. Ta nói là txtTen có cái Focus. Sau khi ngư i x d ng ñã cho tên vào r i, cô s ñánh nút Tab ñ di chuy n cursor qua Control ti p theo, mà ta mu n là txtDiachi. ð s p th t các Control cho s di chuy n c a cursor khi ngư i x d ng ñánh nút Tab ta edit Property TabIndex c a các Control. TabIndex b t ñ u b ng s 0. Nhi u khi ngư i x d ng thích dùng nút Enter thay vì Tab ñ di chuy n Cursor qua Control ti p theo, b n có th làm như sau cho Textbox txtTen: Private Sub txtTen_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then ' N u nút b m là Enter SendKeys "{TAB}" ' gi m o g i nút Tab KeyAscii = 0 ' Nu t tr ng nút Enter ñ Windows không còn lo cho nó End If End Sub Cho các Textbox khác như txtDiachi, txtTuoi b n cũng làm tương t như v y. Khi b n doubleClick txtTen l n ñ u ñ vi t mã, VB cho b n Private Sub txtTen_Change(). B n ph i click cái Combobox bên ph i, phía trên c a Code Window, cho nó m ra và ch n Event KeyPress.
  • 15. 14 N u b n mu n chương trình mình còn chuyên nghi p hơn, b n cho phép ngư i x d ng b m nút Alt+o (b m nút Alt xu ng trong khi b m nút o) ñ mang Cursor v txtTuoi hay Alt+d ñ mang Cursor v txtDiachi. Mu n th b n ph i thêm vào d u "&" phía trư c các ch T, D và o trong Caption c a các label lblTen, lblDiachi và lblTuoi. K ñó b n ph i cho giá tr TabIndex c a lblTen, txtTen, lblDiachi, txtDiachi, lblTuoi, txtTuoi liên ti p là 0,1,2,3,4,5. Khi ngư i x d ng ñánh Alt+o, VB s mang Cursor v nhãn lblTuoi, nhưng vì không có ch cho nó ñáp trong label nên nó ph i ñáp vào Control k ñó, t c là txtTuoi. Khi ta ñã cho TabIndex c a các Control nh ng giá tr k trên thì khi Form hi n ra Cursor s n m trong TextBox txtTen vì m c d u lblTen có TabIndex nh nh t(0), nó không ph i là ch Cursor ñáp lên ñư c, nên Cursor ph i ñáp lên textbox có TabIndex value k ñó, t c là 1. N u b n không mu n Cursor ng ng l i m t TextBox nào thì edit Property TabStop c a TextBox ñó cho b ng False. Trong trư ng h p y ngư i s d ng v n có th click vào TextBox và s a dòng ch ñó ñư c như thư ng. N u b n th t s không mu n cho phép ngư i s d ng s a gì TextBox thì edit Property Enabled b ng False hay Property Locked b ng True. Khi Enabled c a m t TextBox b ng False thì TextBox tr nên m ñi. Nhân ti n ta edit thêm d u "&" phía trư c các ch X và V trong Caption các CommandButton "Xuat" và "Viet vao dia". Sau n y ngư i s d ng có th b m Alt-X coi như tương ñương v i click nút "Xuat". N u nh trong Form b n có nhi u Textbox quá, ñ i nút Enter ra nút Tab cho t ng Textbox m t thì m t công quá. B n có th làm m t cái chung cho c Form. T c là nói r ng b n không c n bi t nút Enter v a m i ñư c ñánh TextBox nào, b n c nh m m t ñ i nó ra nút Tab. Trư c h t b n ph i ch n (select) Form r i edit Property KeyPreview c a nó thành True. B n làm vi c n y ñ d n Form gi t cái nút ngư i s d ng ñánh (keystroke) trư c khi TextBox th y. Form s tráo nút Enter thành Tab r i l ng l ng trao cho TextBox. B n có th thay th t t c các KeyPress event handler c a các TextBox b ng ño n mã như sau: Private Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then ' N u nút b m là Enter SendKeys "{TAB}" ' gi m o g i nút Tab KeyAscii = 0 ' Nu t tr ng nút Enter ñ Windows không còn lo cho nó End If End Sub Khi b n doubleClick lên b t c ch nào trên Form không có Control n m, l n ñ u ñ vi t mã, VB cho b n Private Sub Form_Load(). B n ph i click cái Combobox bên ph i, phía trên c a Code Window, cho nó m ra và ch n Event KeyPress. ðem ra trình làng ð làm thành m t h sơ áp d ng EXE, b n dùng m nh l nh Menu File|Make MyFirstProg.exe. Cho thêm chút hương v c a cu c ñ i tôi click Form r i edit Property Icon, ch n cho nó t folder:
  • 16. 15 D:Program FilesMicrosoft Visual StudioCommonGraphicsIconsMisc m t icon hình gương m t cư i. R i b m m nh l nh Menu File|Save Project. Khi dùng Explorer ñ xem các h sơ c a MyFirstProg.vbp b n s th y như dư i ñây: ðáng l tôi dùng m t folder khác thay vì VB98 ñ ch a d án MyFirstProg.vbp. H sơ MyFirstProg.vbw là Workspace (ch làm vi c) dành cho VB, ta không nên ñ ng t i. B n có th làm m t Shortcut cho MyFirstProg.exe v i cái icon hình gương m t cư i ñ t lên Desktop ñ ch y bên ngoài IDE c a VB. Có l b n mu n Download h sơ:MyFirstProg.zip, nén chung t t c các h sơ nói trên trong d án MyFirstProg.vbp. Bây gi ngay trong VB IDE b n có th ch y chương trình b ng cách dùng m nh l nh Menu Run|Start hay b m F5. B n cũng có th Click lên d u tam giác ch v bên ph i (nút Play c a cassette) n m trong toolbar ngay phía dư i VB menu. Cách nén các files trong m t folder thành m t zip file duy nh t ð g i nhi u files b ng cách ñính kèm (attach) m t Email trên Internet ta c n ph i nén các files y thành m t file duy nh t, g i là Zip file. Trư c h t, trong Window Explorer b n ch n nh ng files b n mu n Zip chung l i. B n ch n nhi u files b ng cách ñè nút Ctrl trong khi click lên tên t ng file m t. N u b n ñè lên nút Shift, thay vì nút Ctrl, thì c m i lúc b n click, Window Explorer s select c m t d c tên các files n m gi a tên hai files b n click m i nh t. Ngoài ra b n cũng có th dùng Menu Command Edit | Select All, hay Ctrl+A ñ select t t c các files trong m t folder. ðây là trư ng h p b n s dùng khi Zip t t c c các files trong m t VB6 project ñ g i qua Th y/Cô. Sau khi ñã select các file r i, b n right click lên các file y ñ context menu pop-up. Ch n Add to Zip. N u b n không th y pop-up command Add to Zip thì là b n chưa install chương trình Winzip. Trong trư ng h p y, download Winzip t Internet và install.
  • 17. 16 Bây gi b n th kh i ñ ng VB6, ñi d o quanh nó ñ th bi t các ph n c a VB6 IDE, và th làm theo như bài n y. N u có th c m c gì thì h i Tutor c a b n. Chương Ba - Form và các Controls thông thư ng H u h t các chương trình VB6 ñ u có ít nh t m t Form. Khi ta ch y chương trình, Form n y s hi n ra trư c h t ñ ta ra l nh nó làm chuy n gì. Cái Form tr ng không ch làm ñư c gì nhi u, nên ta ñ t lên Form nh ng controls như Textbox(h p ñ ñánh ch vào), Label(nhãn), Commandbutton(nút b m m nh l nh), .v.v.. Các controls cho ta enter các d ki n ñ chương trình dùng x lý, và các controls cũng hi n th (display) k t qu cho chúng ta xem. S p ñ t controls lên Form Ta hãy b t ñ u thi t k m t chương trình m i (New Project) b ng cách ch n Standard EXE, môi trư ng tri n khai l p trình (IDE) cho b n s n m t Form tên là Form1. Mu n ñ t m t Control lên Form, click hình cái Control trong Toolbox r i Drag (b m nút trái c a con chu t r i kéo cho thành hình ch nh t trư c khi buông nút trái ra) con chu t trên Form v thành c c a Control. M t cách khác ñ ñ t m t control lên Form là doubleclick cái Control trong Toolbox, m t hình control s hi n ra trên Form. K ñó b n d i control ñi ñ n ch mình mu n và resize nó. N u b t c lúc nào b n không th y Túi ñ ngh (Toolbox) n m bên trái, b n có th dùng m nh l nh Menu View|Toolbox ñ b t nó hi n ra. Có m t cách khác là click lên toolbox icon trên toolbar chính c a VB6. Nên nh r ng Toolbox cũng là m t window như các window khác. Khi nó hi n lên r i b n có th n m (b m nút trái c a con chu t và gi như v y ch không buông ra) title nó ñ d i ñi nơi khác. B n có th ñóng nó b ng cách click lên d u x góc ph i phía trên. N u right click trên Toolbox, nó s display context sensitive menu, trong ñó có property dockable (có th ñ u b n) . N u m t window là
  • 18. 17 dockable, sau khi b n d i nó ñi kh i vi trí docked bình thư ng c a nó, b n có th dock nó l i như c b ng cách double click lên title c a nó. Resize và di chuy n control Khi b n select m t control (click lên nó), chung quanh control s hi n ra resize handle, 8 nút ñen d c theo chu vi c a control. Click lên các nút ñen c a resize handle, b n có th resize control. Có m t cách khác ñ resize control là dùng Shift + ArrowKey. B m nút Shift trong khi b m m t arrow key, control s l n ra hay thu h p theo chi u c a ArrowKey. Lưu ý: M t s control có kích thư c t i thi u, b n không th làm cho nó nh hơn ñư c. Thí d như Combobox, nó ph i cao ñ ñ display m t hàng text. Tương t như th , b m nút Ctrl trong khi b m m t arrow key, control s di chuy n theo chi u c a ArrowKey. Ngoài ra, nên nh r ng trong lúc chương trình ch y (at run-time), trong code ta có th thay ñ i kích thư c và v trí các controls d dàng, th m chí có th làm cho chúng hi n ra hay bi n m t b ng cách s a ñ i value các property left, top, width, height và visible c a các controls. Alignment Grid ð giúp b n s p ñ t ngay ng n các controls trên m t form, VB6 cho b n Alignment Grid. Nó là nh ng d u ñen c a các hàng d c và xuôi trên form. B n có th làm cho các d u ñen c a grid trên form bi n m t b ng cách dùng menu command Tools | Options ñ display Option Dialog, k ñó ch n Tag General và clear checkbox "Show Grid":
  • 19. 18 B n cũng có th nhân d p n y thay ñ i kho ng cách chi u r ng (Width) và chi u cao (Height) c a các ch m ñen c a grid. Kích thư c nh nh t c a Width hay Height là 24. Hãy so sánh hai trư ng h p form có và không có Show Grid như dư i ñây: Control Locking M t khi b n ñã s p ñ t kích thư c và v trí c a các control trên form r i, r t d ta tình c thay ñ i các ñ c tính y vì vô ý click lên m t control. Do ñó VB6 cho ta Menu command Format | Lock Controls ñ khóa chúng l i. Sau khi khóa, cái hình ng khóa trên menu b chìm xu ng. N u sau n y b n mu n thay ñ i kích thư c ho c v trí c a chúng thì nh dùng Menu command Format | Lock Controls l i. Sau khi m khóa, cái hình ng khóa trên menu hi n ra bình thư ng. Cài ñ t các Properties c a Form Nhi u property c a m t form nh hư ng ñ n di n m o v t lý (physical appearance) c a nó. Property Caption s quy t ñ nh text ñư c hi u th trong title. N u Property BorderStyle c a form không ph i là Sizable thì User không th resize form at run-time. Property Icon quy t ñ nh hình icon ñu c dùng trong title c a form, nh t là khi form thu nh (minimized). N u b n không mu n cho phép User minimize hay maximize form thì set value c a property MinButton, MaxButton ra False. N u property ControlBox là False thì form s không có nút minize, maximize hay close (x) trên góc ph i c a nó, ñ ng th i form cũng không display c icon bên góc trái title như trong hình dư i ñây:
  • 20. 19 V trí ñ u tiên (top,left) c a form có th ñư c thay ñ i trong design time b ng cách di chuy n hình nh c a nó trong window Form Layout: Property WindowState xác ñ nh Form s có kích thư c bình thư ng (normal=0), hay minimized (=1), maximized =(2). Lưu ý là property Font c a Form s ñư c các control n m trên nó th a k . T c là khi b n ñ t m t control lên form, property Font c a control y s t ñ ng tr nên gi ng y như c a form. Vài Event thông d ng c a Form Nhìn t m t phương di n, Form cũng gi ng như Control. Ta có th instantiate m t form nhi u l n ñ có nhi u form tương t nhau. Trong thí d dư i ñây, ta instantiate Form2 hai l n ñ có MyForm và YourForm: Private Sub CmdCreateForms_Click() Dim MyForm, YourForm Set MyForm = New Form2 MyForm.Caption = "This is My Form" MyForm.Show MyForm.Move 1000, 1000 Set YourForm = New Form2 YourForm.Caption = "YOUR FORM IS HERE" YourForm.Show YourForm.Move 2000, 2000 End Sub M t Form cũng có nhi u Events r t h u d ng. • F orm_Initialize: Event n y xãy ra trư c nh t và ch m t l n thôi khi ta instantiate form ñ u tiên. Ta dùng Form_Initialize event ñ th c hi n nh ng gì c n ph i làm chung cho t t c các instances c a form n y. • F orm_Load: Event n y xãy ra m i l n ta instantiate m t form. N u ta ch dùng m t instance duy nh t c a m t form trong chương trình thì Form_Load coi như tương ñương v i Form_Initialize. Ta dùng Form_Load event ñ initialise variables, controls v.v. cho instance n y. Bên trong Form_Load b n không th dùng Setfocus cho m t control nào trên form vì form chưa
  • 21. 20 h n thành hình (ra ñ i). Mu n làm vi c y b n ph i delay (trì ho n) m t chút xíu b ng cách dùng Control Timer ñ ñ i cho Form_Load ñư c hoàn t t. Thí d : Private Sub Form_Load() Timer1.Interval = 500 Timer1.Enabled = True End Sub Private Sub Timer1_Timer() Timer1.Enabled = False ' Timer1_Timer only execute once txtName.Setfocus ' Make Tab Cursor start at TextBox txtName End Sub • F orm_Activate: M i l n m t form tr nên active (current) thì nó generate m t Activate event. Ta có th dùng event n y ñ refresh display trên form. • F orm_QueryUnload: Khi User click d u x phía trên bên ph i ñ close form thì nó generate QueryUnload event. Syntax c a Sub n y như dư i ñây: Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) End Sub Event n y cho ta m t d p ñ cancel Close action c a form (t c là không cho User close form) b ng cách set Cancel b ng 1. UnloadMode cho ta bi t ai, task hay form nào mu n close form n y. Ngoài ra, b n cũng nên bi t r ng m t form t ñ ng Load hay tr nên active n u b n nh c ñ n nó, thí d như dùng Form2.List1. Khi m t form ñã ñư c loaded r i b n có th hide (làm cho bi n m t) nó. K ñó, khi b n show form ra tr l i thì form không có gì thay ñ i. Nhưng n u b n Unload m t form (thí d b ng cách dùng Unload Form2 ), r i sau ñó load tr l i b ng cách dùng Form2.Show ch ng h n, thì Form ph i tr i qua quá trình Form_Load, và dĩ nhiên form m t t t c nh ng gì có trư c ñây. Ngoài ra, Hide/Show m t form ñã ñư c loaded r i thì r t nhanh, còn Unload/Load thì m t thì gi hơn. Khi b n Show m t Form chưa hi n h u thì form s ñư c loaded và show. ðôi khi b n mu n Load m t form, r i làm vi c v i nó trư c khi Show, trong trư ng h p ñó b n dùng Load Form2 r i m t ch p sau dùng Form2.Show. MDI Form ðôi khi b n mu n có m t MDI form, t c là m t form có th ch a nhi u form con bên trong. D ng MDIform n y thư ng ñư c dùng trong các application như wordprocessor ñ có th m nhi u document cùng m t lúc, m i document ñư c hi n th trong m t form con. ð có m t MDIForm b n c n ph i dùng menu command Project | Add MDI Form. M i VB6 project ch có th có t i ña m t MDIform. Mu n m t form tr thành m t form con b n set property MDI Child c a nó thành True. At run-time b n không th hide (bi n nó thành invisible) m t MDIChild form, nhưng có th minimize nó. N u b n th t s mu n hide nó thì ph i dùng mánh l i là cho nó v trí (top,left) s âm l n hơn kích thư c nó ñ nó n m ngoài t m hi n th c a form. Trong m t chương trình dùng MDI Form, khi b n click MDI Form nó không nh y ra phía trư c và che các form con, nhưng v n luôn luôn n m dư i.
  • 22. 21 Controls là gì? Controls v a có hình, v a có code ch y bên trong m t window nho nh , gi ng như m t form. Khi ta l p trình VB6 ta l p ráp các controls (là nh ng v t d ng ti n ch ) trên m t hay nhi u form ñ có m t chương trình nhanh chóng. Ta giao d ch v i m t control qua ba ñ c tính c a control: • P roperties: t p h p các ñ c tính c a control mà ta có th n ñ nh lúc design time hay run-time. Có nhi u properties v di n m o, n u ta thay ñ i at design time s th y k t qu hi n ra l p t c, thí d Font hay màu s c. • M ethods: nh ng gì control th c hi n ñu c, t c là nh ng kh năng c a nó. • E vents: nh ng s c mà control s thông báo cho chúng ta bi t khi nó xãy ra v i control. Khi m t event xãy ra VB6 s x lý m t Event Handler (thí d như Sub Command1_Click()), mi n là chúng ta vi t code s n trong ñó. N u không có code thì coi như chúng ta không thèm bi t ñ n các event lo i ñó. Có m t s Events mà chúng ta thư ng x lý là: o C lick : xãy ra khi user click lên control. Ta thư ng dùng nó cho CommandButton và Listbox. o M ouseDown, MouseUp : m i khi User b m m t mouse button là có m t MouseDown Event, khi User buông nó ra thì có m t MouseUp Event. Ta thư ng dùng MouseDown Event ñ Popup context sensitive menu hay b t ñ u m t di n bi n Drag. Thí d : Private Sub Foods_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbRightButton Then ' if Right button was pressed PopupMenu mnuActions ' popup a menu End If End Sub Private Sub DrinkList_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) DrinkList.drag ' Displaying a drag icon to start the drag process End Sub ð ý là Click không cho chúng ta thêm chi ti t gì v s c , trong khi MouseDown/MouseUp cho ta bi t v trí c a cursor, button nào c a Mouse ñư c b m và lúc y User có b m nút Shift, Ctrl hay Alt không. M i Click là ñi ñôi v i m t c p MouseDown/MouseUp. N u b n mu n x lý v a Click l n MouseDown thì ph i c n th n. Thí d b n mu n v a handle Click event v a handle Mouse Drag thì ph i làm sao phân bi t hai trư ng h p. N u không User ch mu n th y k t qu c a Click mà l i th y control b t ñ u display m t Drag icon thì s b c mình. o K eyPress : xãy ra khi user Press m t key. Ta thư ng dùng nó cho TextBox ñ lo i ra (filter out) các keystrokes ta không ch p nh n. KeyPress cho ta ASCII value, m t con s có giá tr t 1 ñ n 255, c a key. Trong thí d dư i ñây, m t Enter key s ñư c coi như m t TAB key:
  • 23. 22 Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then KeyAscii = 0 ' Swallow the character to avoid side effect SendKeys "{TAB}" ' Emulate entering a TAB End If End Sub o K eyDown, KeyUp : m i KeyPress event là cho ta m t c p KeyDown/KeyUp event. KeyDown/KeyUp cho ta KeyCode và Shift value. ð detect Function key ta c n dùng KeyDown event. Trong thí d dư i ñây, ta display Function key User b m: Private Sub Text3_KeyDown(KeyCode As Integer, Shift As Integer) If (KeyCode >= 112) And (KeyCode <= 123) Then MsgBox "You pressed the Function key: F" & Trim(Str(KeyCode - 111)) End If End Sub o G LotFocus : Control tr nên active khi nó nh n ñư c Focus. Nó s generate m t GotFocus Event. Ta có th dùng nó ñ ñ i màu background c a m t text box như trong thí d dư i ñây: Private Sub Text2_GotFocus() Text2.BackColor = vbYellow End Sub o L LostFocus : Thư ng thư ng h m t Control GotFocus thì trư c ñó có m t Control LostFocus. Ta có th dùng Event n y ñ Validate entry data hay thu x p công chuy n cho m t control v a m t Focus. Trong thí d dư i ñây, n u User không ñánh vào m t con s trong Textbox Text1 thì s ñư c thông báo và Tab Cursor s tr l i Textbox Text1. Private Sub Text1_LostFocus() If Not IsNumeric(Text1.Text) Then MsgBox "Please enter a number!" Text1.SetFocus End If End Sub o r DagDrop : xãy ra khi ta drop m t cái gì lên control . Parameter Source cho ta bi t Control nào ñã ñư c Drag và Drop. Nhi u khi m t control có th nh n drop t nhi u control khác nhau. Trong trư ng h p ñó ta ph i test xem ho c Control Type, ho c Name ho c Tag value c a Source control là gì ñ tùy nghi x lý.
  • 24. 23 Trong thí d dư i ñây, khi User drop mouse xu ng Textbox Text2, n u Source là m t Listbox, không c n bi t Listbox nào, thì ta copy dòng ñư c ch n trong Listbox y qua Textbox Text2. Private Sub Text2_DragDrop(Source As Control, X As Single, Y As Single) If TypeOf Source Is ListBox Then Text2.Text = Source.Text End If End Sub TextBox TextBox là control ñu c dùng nhi u nh t ñ display text và nh n keystroke c a Userñ s a ñ i text có s n hay cho vào text m i. Property chính và default c a Textbox là text, t c là thư ng thư ng Text2.text có th ñư c vi t t t là Text2. Ta có th disable (khi n nó b t l c, không ph n ng gì h t và không cho s a ñ i) m t text box b ng cách set Property Enable ra False (ch s b m ñi), hay Lock (không cho s a ñ i) m t text box b ng cách set Property Locked ra True (ch không b m ). Text có th ñư c Align (Alignment Property) ñ display bên trái, chính gi a hay bên ph i c a h p nó. B n có th ch n BackColor và ForeColor cho background và text c a TextBox. Dùng Tag Palette khi ch n màu ñ có ñúng m t màu b n mu n. Dĩ nhiên b n có th l a ch n Font và c ch cho Text v i Font Property. B n gi i h n s characters mà User có th enter cho TextBox b ng cách set MaxLength Property. N u Property Multiline là True thì User có th enter nhi u hàng. At Design time, n u b n mu n enter multiline thì ph i nh b m nút Ctrl khi press Enter m i khi xu ng hàng. N u không VB6 IDE tư ng r ng b n ñã k t thúc editing.
  • 25. 24 Mu n assign cho text box multiline text thì ph i nhét vào m i cu i hàng CarriageReturn và LineFeed characters. Thí d như: Private Sub Command1_Click() Dim TextStr TextStr = "Bau ra bau lay ong cau" & vbCrLf ' Note: vbCrLf = chr(13) & chr(10) TextStr = TextStr & "Bau cau ca bong ngat dau kho tieu" Text1.Text = TextStr End Sub N u b n mu n mách nư c cho User v cách dùng m t textbox nào ñó thì có th dùng Property ToolTipText ñ nó display mách nư c m i khi mouse cursor n m lên textbox. Dùng Property TabIndex ñ n ñ nh th t cho Tab Cursor d ng m i khi User b m nút TAB ñ d i TAB Cursor ñ n Textbox k ti p. N u b n không mu n Tab Cursor d ng m t TextBox nào thì set Property TabStop nó thành False. Tab Cursor không d ng Textbox có Property Enabled b ng False, nhưng v n d ng Textbox có property Locked b ng True. N u b n mu n dùng Textbox làm m t Password field thì set Property PasswordChar b ng "*". Làm như th s ép bu c Textbox display m i character b ng PasswordChar, t c là "*", ñ ngư i khác không ñ c ñư c trong khi User enter m t Paswword. Properties SelLength, SelStart và SelText N u b n mu n bi t ñư c tình hình hi n th i c a Textbox: SelText cho b n dãy ch ñang ñư c selected. SelStart cho b n v trí c a insertion point (ch cursor flashing). SelLength cho bi t con s characters ñã ñư c selected. N u b n mu n s a ñ i text trong Textbox: SelText cho b n nhét vào m t dãy ch . SelStart cho b n n
  • 26. 25 ñ nh v trí b t ñ u c a dãy ch b n s p select. SelLength n ñ nh s characters b n mu n ch n, b t ñ u t SelStart. Dư i ñây là m t thí d trong ñó ta highlight text tìm ñư c: Private Sub Form_Click () Dim Search, Where ' Declare variables. ' Get search string from user. Search = InputBox("Enter text to be found:") Where = InStr(Text1.Text, Search) ' Find the given string in Text1.Text. If Where > 0 Then ' If found, Text1.SelStart = Where - 1 ' set selection start and Text1.SelLength = Len(Search) ' set selection length. Else MsgBox "String not found." ' Notify user. End If End Sub CommandButton CommandButton r t ti n cho ta dùng vào vi c x lý m t chuy n gì khi User click lên button. Event ta dùng thư ng nh t cho CommanButton là Click. Ta dùng Property Caption c a CommandButton ñ enter cái gì ta mu n display trên button. N u mu n cho phép User dùng ALT+E (ñè nút Atl trong lúc b m nút E) ñ generate event click thì nhét d u "&" trư c ch E trong Caption c a button. Caption s display ch E v i m t g ch dư i. Ngoài ra ta cũng có th cho thêm m t cái hình vào CommandButton b ng cách ch n m t icon cho property Picture và set Property Style ra Graphical, thay vì Standard. Lúc Run-time b n có th thay ñ i hình hay Caption c a CommandButton. Trong thí d dư i ñây, Caption c a CommandButton CmdOperation flip-flop gi a hai values Stop và Start: Private Sub CmdOperation_Click() If CmdOperation.Caption = "&Stop" Then CmdOperation.Caption = "St&art" Else CmdOperation.Caption = "&Stop" End If End Sub Label M c ñích chính c a Label là ñ display, không cho User Edit như Textbox. Do ñó ta có th dùng Property Font, ForeColor và Backcolor ñ làm cho nó ñ p. Ngoài ra Property BorderStyle có th cho Label l m xu ng n u b n set nó b ng Fixed Single. N u set property BackStyle b ng Transparent s
  • 27. 26 tránh trư ng h p Backcolor c a Label làm cho không ñ p. Label cũng có Property Tabindex. N u b n mu n dùng ALT key ñ mang Tab Cursor v m t Textbox, hãy ñ m t Label v i TabIndex b ng TabIndex c a TextBox tr 1. Gi s Label có Caption là "&Address" thì ALT+A s mang Tab Cursor v TextBox màu vàng như trong thí d dư i ñây: Ngoài ra nh r ng b n có th thay ñ i Caption c a Label lúc run-time. CheckBox CheckBox ñư c dùng ñ User xác nh n có ñ c tính nào m t cách nhanh chóng. Property Value c a CheckBox có th là Checked (làm cho h p vuông có d u, b ng 1), Unchecked (làm cho h p vuông tr ng không, b ng 0) hay Grayed (làm cho h p vuông có d u màu nh t, b ng 2). M t khi bi t r ng CheckBox có Value b ng 1, ta có th ñ c Caption c a CheckBox ñ dùng n u c n. B n có th dùng Property Alignment ñ làm cho Caption ñ ng bên ph i (Left Justify) hay bên trái (Right Justify) c a h p vuông. OptionButton OptionButton ( còn g i là RadioButton) có hình tròn v i m t ch m gi a, thay gì hình vuông v i m t g ch gi a như CheckBox. OptionButton luôn luôn ñư c qui t thành m t nhóm, ch a trong m t container. Container là m t Control có kh năng ch a các controls khác. Frame, PictureBox, hay chính Form ñ u là Container. Sau khi ñ t m t Container lên Form, n u mu n ñ m t OptionButton lên Container, trư c h t ta ph i Select container, r i k ñó ch n OptionButton. S dĩ, t t c OptionButtons ph i n m trong m t container là vì b t c lúc nào, nhi u nh t là m t OptionButton trong container có value True (vòng tròn có ch m gi a). Mu n bi t m t OptionButton có th t s n m trong m t container, b n th kéo cái container ñi ch khác. N u OptionButton b d i theo container thì nó n m trong container. M t cách khác là th kéo OptionButton ra kh i container. N u kéo ra ñư c thì nó không n m trong container.
  • 28. 27 Mu n di chuy n m t OptionButton t container n y sang container khác, b n Cut OptionButton r i Paste nó vô container kia. ðôi khi m t container n m che trên m t control khác. Mu n mang m t container ra phía sau các controls khác b n Select container r i dùng Menu command Format | Order | Send to Back. Chương B n - Vi t Code Trong ba chương ñ u chúng ta ñã h c qua ba b ph n chánh c a m t chương trình Visual Basic 6.0. ðó là: • Forms là cái n n hay khung ñ ta xây d ng User Interface. • Controls là nh ng viên g ch ñ ta dùng xây d ng User Interface. • Event procedures là code n m phía sau nh ng hình nh, nó là ch t keo dùng ñ dán các Controls l i v i nhau ñ t o thành chương trình áp d ng c a ta. Như ta ñã th y, t t c các code ñư c x lý (executed) khi có m t Event xãy ra. Thí d như khi User click m t CommandButton (Event Click) hay type nút Tab ñ di chuy n Cursor t Textbox n y (Event Lostfocus) qua Textbox khác (Event GotFocus). Các nhóm code x lý là : Private Sub Command1_Click() ...
  • 29. 28 End Sub Private Sub Text1_LostFocus() ... End Sub và Private Sub Text2_GotFocus() ... End Sub Trong khi l p trình, m i l n ta double click lên m t Control c a m t Form là VB6 IDE t ñ ng generate cho ta cái v t hàng Private Sub Control_Event() cho ñ n End Sub ñ chúng ta ñi n nh ng hàng code c a mình vào chính gi a. ði u khi n th t x lý các dòng code Gi d ta vi t m t chương trình Vb6 ñơn gi n như trong hình n y v i hai Textbox tên txtName, txtAge và m t nút tên CmdEnter n m trong m t form tên Form1: Thông thư ng các dòng code ñư c x lý theo th t t trên xu ng dư i. Thí d như ñ ki m xem các d ki n v a ñư c cho vào các Textbox có tương ñ i h p lý hay không, khi User click nút CmdEnter, ta x lý Sub dư i ñây: Private Sub CmdEnter_Click() ' Make sure the Name field is not blank If txtName.Text = "" Then MsgBox "Please enter Name" Exit Sub ' Terminate this Sub End If ' Make sure a number is supplied for Age If Not IsNumeric(txtAge.Text) Then MsgBox "Please enter a number for Age" Exit Sub ' Terminate this Sub End If End Sub Cái Sub nói trên có ch Private n m phía trư c, ý nói ch n i trong cùng m t form ch a Control CmdEnter (t c là Form1 trong trư ng h p n y) ta m i có th g i (dùng) Sub CmdEnter_Click(). Thí d ta mu n khi User b m key "Enter" trên bàn phím sau khi cho vào chi ti t Textbox txtAge thì coi như User ñã click nút CmdEnter. Ta vi t như sau: Private Sub txtAge_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then KeyAscii = 0 ' swallow Key Enter to avoid side effect
  • 30. 29 CmdEnter_Click ' Call Private Sub CmdEnter_Click from the same form End If End Sub Khi ta dùng câu CmdEnter_Click làm m t dòng code (còn g i là g i Sub CmdEnter_Click) thì coi như tương ñương v i nhét t t c 10 dòng codes gi a hai hàng Private Sub CmdEnter_Click() và End Sub t i ch câu CmdEnter_Click, như vi t l i dư i ñây: Private Sub txtAge_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then KeyAscii = 0 ' Swallow Key Enter to avoid side effect ' Make sure the Name field is not blank If txtName.Text = "" Then MsgBox "Please enter Name" Exit Sub ' Terminate this Sub End If ' Make sure a number is supplied for Age If Not IsNumeric(txtAge.Text) Then MsgBox "Please enter a number for Age" Exit Sub ' Terminate this Sub End If End If End Sub Có m t cách nói khác là khi execution ñi ñ n hàng CmdEnter_Click thì nó nh y vào Private Sub CmdEnter_Click() ñ execute cho ñ n h t r i nh y tr l i hàng k ti p trong Private Sub txtAge_KeyPress(KeyAscii As Integer) Trong Private Sub CmdEnter_Click() n u User không ñánh gì vào Textbox txtName thì chương trình s display message "Please enter Name" r i Exit Sub. ðây là cách nh y ngay ra kh i Sub ch không ñ i ph i execute xu ng t i hàng chót. Dùng IF....THEN statement Trong Private Sub CmdEnter_Click() trên ta th y có hai ch dùng IF...THEN ñ th xem m t ñi u ki n gì có ñư c th a mãn không. N u ñi u ki n là ñúng v y, t c là True thì ta th c hi n nh ng gì ñu c vi t t hàng IF...THEN cho ñ n hàng END IF. Ngư c l i, n u ñi u ki n không ñúng thì execution nh y xu ng t i dòng code n m ngay dư i dòng END IF. T c là có khi execution s ñi ngang qua, có khi không ñi ngang qua nh ng dòng code gi a câu IF...THEN và câu END IF. ði u ki n trong IF Statement là ph n n m gi a hai ch IF và THEN. Nó ñu c g i là Logical Expression. Ta có: txtName.text = "" ' content of Textbox txtName is nothing, i.e. an empty string và NOT IsNumeric(txtAge.text) ' content of TextBox txtAge is not a number Trong Logical Expression th nhì ta dùng Function IsNumeric ñ ñư c cho bi t r ng txtAge.text có ph i là m t con s hay không. Vì ta ch than phi n khi txtAge không ph i là m t con s nên ta ph i ñ thêm ch NOT phía tru c. T c là khi IsNumeric(txtAge.text) = False thì NOT IsNumeric(txtAge.text) = True N u gi a IF...THEN và END IF ch có m t dòng code b n có th nh p dòng code lên v i IF...THEN và không dùng END IF. T c là:
  • 31. 30 If theColorYouLike = vbRed Then MsgBox "You 're a lucky person!" End If is equivalent with If theColorYouLike = vbRed Then MsgBox "You 're a lucky person!" M t Logical Expression có th ñơn gi n (simple) như trong các thí d trên hay r c r i hơn n u ta ráp nhi u simple Logical Expression l i v i nhau b ng cách dùng nh ng t OR và AND. Khi hai Logical Expression ñư c ráp l i b ng ch OR (HAY) thì ch c n ít nh t m t trong hai Expression là TRUE là Logical Expression t ng h p cũng là TRUE. Cái TRUE Table cho OR như sau: A B A OR B FALSE FALSE FALSE FALSE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE Trong thí d dư i ñây n u m t ngư i 25 tu i tr lên HAY có l i t c trên 30 ngàn ñô la m t năm thì cho mư n ti n ñư c : If (PersonAge >= 25) Or (PersonIncome >= 30000) Then LendPersonMoney End If ð ý cách dùng các d u ngo c ñơn gi ng như trong toán ñ i s . Thông thư ng h cái gì n m trong ngo c thì mình tính trư c. N u có nhi u l p d u ngo c thì tính theo th t t trong ra ngoài. Như trong bài trên ta tính xem PersonAge >= 25 xem là TRUE hay FALSE, r i tính xem PersonIncome >= 30000 xem là TRUE hay FALSE, trư c khi tính k t qu t ng h p, d a vào cái TRUE table cho OR. Khi hai Logical Expression ñư c ráp l i b ng ch AND (Và) thì ch khi nào c hai Expression ñ u là TRUE, Logical Expression t ng h p m i là TRUE. Cái TRUE Table cho AND như sau: A B A AND B FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE TRUE TRUE Trong thí d dư i ñây n u h c sinh 18 tu i tr lên và cha m ki m 100 ngàn tr lên m t năm thì ñăng ký h c sinh m t ñ i h c tư: If (StudentAge >= 18) And (ParentIncome >= 100000) Then EnrollStudentAtPrivateUniversity End If
  • 32. 31 M t Logical Expression có th t p h p c OR l n AND như trong thí d dư i ñây n u h c sinh 18 tu i tr lên và cha m ki m 100 ngàn tr lên m t năm HAY h c sinh có Intelligent Quotient cao hơn 160 thì ñăng ký h c sinh m t ñ i h c tư: If ((StudentAge >= 18) And (ParentIncome >= 100000)) Or (StudentIQ > 160) Then EnrollStudentAtPrivateUniversity End If Hai d u ngo c ñơn n m bên ngoài c a: ((StudentAge >= 18 ) And (ParentIncome >= 100000)) không c n thi t vì theo qui ư c, ta tính AND expression trư c khi tính OR expression, nhưng nó giúp ta ñ c d hơn. Dùng IF....THEN..ELSE statement Hãy xem thí d : If (StudentPassmark > 75) Then ' Part A EnrollStudentAtPublicSchool Else ' Part B EnrollStudentAtPrivateSchool End If N u h c sinh ñ u v i s ñi m trên 75 thì cho h c trư ng công, N U KHÔNG thì ph i h c trư ng tư. T c là n u StudentPassmark > 75 là TRUE thì x lý ph n A, n u không thì x lý ph n B. ð ý ph n A g m nh ng dòng code n m gi a dòng If (StudentPassmark > 75) then và else. Còn ph n B g m nh ng dòng code n m gi a dòng else và end if. Ta có th ráp ch ELSE v i ch IF ñ dùng như trong thí d sau ñây: < If (StudentPassmark > 75) Then EnrollStudentAtPublicSchool ElseIf (StudentPassmark >= 55) Then EnrollStudentAtSemipublicSchool Else EnrollStudentAtPrivateSchool End If N u h c sinh ñ u v i s ñi m trên 75 thì cho h c trư ng công, N U t 55 ñi m ñ n 75 ñi m thì cho h c trư ng bán công, n u không (t c là ñi m ñ u dư i 55) thì ph i h c trư ng tư. N u t nh nh , không có trư ng tư, ta không có quy t ñ nh cho h c trò ñ u dư i 55 ñi m h c ñâu thì b ph n ELSE trong thí d trên. Ph n chương trình tr thành: If (StudentPassmark > 75) Then EnrollStudentAtPublicSchool ElseIf (StudentPassmark >= 55) Then EnrollStudentAtSemipublicSchool End If Ta có th dùng ELSEIF nhi u l n như sau:
  • 33. 32 If (TheColorYouLike = vbRed) Then MsgBox "You 're a lucky person" ElseIf (TheColorYouLike = vbGreen) Then MsgBox "You 're a hopeful person" ElseIf (TheColorYouLike = vbBlue) Then MsgBox "You 're a brave person" ElseIf (TheColorYouLike = vbMagenta) Then MsgBox "You 're a sad person" Else MsgBox "You 're an average person" End If Execution ñi l n lư t t trên xu ng dư i, n u m t ñi u ki n IF là TRUE thì x lý ph n c a nó r i nh y xu ng ngay dư i dòng END IF. Ch khi m t ñi u ki n IF không ñư c th a mãn ta m i th m t ñi u ki n IF bên dư i k ñó. T c là n u b n thích màu ñ l u màu tím (magenta) thì chương trình s display "You're a lucky person", và không h bi t "You're a sad person". Dùng SELECT CASE statement Thí d có nhi u ELSEIF như trên có th ñư c vi t l i như sau: Select Case TheColorYouLike Case vbRed MsgBox "You 're a lucky person" Case vbGreen MsgBox "You 're a hopeful person" Case vbBlue MsgBox "You 're a brave person" Case vbMagenta MsgBox "You 're a sad person" Else MsgBox "You 're an average person" End Select Cách vi t n y tương ñ i d ñ c và ít nh m l n khi vi t code hơn là dùng nhi u ELSEIF. Ph n ELSE trong Select Case statement thì optional (nhi m ý), t c là có cũng ñư c, không có cũng không sao. H khi ñi u ki n c a m t Case ñư c tho mãn thì nh ng dòng code t ñó cho ñ n dòng Case k dư i hay Else ñư c x lý và ti p theo execution s nh y xu ng dòng n m ngay dư i dòng End Select. Nh là dư i cùng ta vi t End Select, ch không ph i End If. Các Expression dùng cho m i trư ng h p Case không nh t thi t ph i ñơn gi n như v y. ð bi t thêm chi ti t v cách dùng Select Case, b n highlight ch Case (doubleclick ch Case) r i b m nút F1. Dùng FOR statement Trong l p trình, nói v Flow Control (ñi u khi n hư ng ñi c a execution) ta dùng hai lo i statement chính: Branch statements như IF..THEN..ELSE (k c Select Case) và Iterative statements (l p ñi, l p l i) như FOR và WHILE LOOP (Vòng). Ta s nói ñ n WHILE Loop trong ph n k ti p. Trong khi Branch statement cho phép ta execute trong nhánh n y hay nhánh kia tùy theo value c a Logical Expression thì Iterative statement cho ta execute m t ph n code l p ñi, l p l i nhi u l n cho ñ n khi m t ñi u ki n ñư c th a mãn. Gi d ta vi t m t chương trình ñơn gi n ñ tính t ng s các con s gi a b t c hai con s nào (coi ch ng l n quá). Cái form c a chương trình gi ng như dư i ñây:
  • 34. 33 Sau khi cho hai con s From (T ) và To (Cho ñ n) ta click nút Calculate và th y k t qu hi n ra trong Textbox txtTotal. Cái Sub tính t ng s ñư c li t ra dư i ñây: Private Sub CmdTotal_Click() Dim i, FromNo, ToNo, Total FromNo = CInt(txtFromNumber.Text) ' Convert Text string ra internal number b?ng Function CInt ToNo = CInt(txtToNumber.Text) ' Convert Text string ra internal number b?ng Function CInt Total = 0 ' Initialise Total value to zero For i = FromNo To ToNo ' Iterate from FromNo to ToNo Total = Total + i ' Add the number to the Total Next txtTotal.Text = CStr(Total) ' Convert internal number ra Text string End Sub Trong thí d trên, FOR loop b t ñ u t dòng For i = FromNo To ToNo và ch m d t dòng Next. Khi execution b t ñ u Total b ng 0, i b ng FromNo. Execution s ñi qua h t nh ng dòng trong FOR loop r i value c a i s ñư c tăng lên 1, r i execution s b t ñ u l i ñ u loop. Trong thí d n y vì FromNo=4 và ToNo=6 nên execution s ñi qua cái FOR loop 3 l n. L n th nh t i=4, l n th nhì i=5 ,và l n th ba thì i=6. Sau ñó, khi i=7 thì nó l n hơn ToNo (=6) nên execution nh y ra kh i FOR loop. K t qu là Total=15 và ñư c display trong Textbox txtTotal, sau khi ñư c converted t internal number ra text string v i Function CStr. N u ta ch mu n c ng nh ng s ch n t 4 ñ n 16 ta có th làm cho i tăng value lên 2 (thay vì 1) m i khi ñ n cu i loop. T c là i=4,6,8 .v.v..Ta s thêm ch STEP trong FOR statement như sau: For i = 4 To 16 Step 2 ' Iterate from 4 to 16 with Step=2 Total = Total + i ' Add the number to the Total Next Total s b ng 4+6+8+10+12+14+16= 70. Trong thí d trên ta cũng có th dùng STEP s âm như sau: For i = 16 To 4 Step -2 ' Iterate from 16 to 4 with Step=-2 Total = Total + i ' Add the number to the Total Next Trong trư ng h p n y FOR loop b t ñ u v i i=16. Khi ñ n cu i loop l n th nh t value c a i b b t 2 và tr thành 14. Sau ñó i b gi m giá tr d n d n ñ n 4. K ñó i=2 thì nh hơn s cu i cùng (=4) nên execution nh y ra kh i FOR loop. Gi d ta mu n l y ra t t c nh ng blank space trong m t text string. Ta bi t con s characters trong m t text string, còn g i là chi u dài c a text string có th tính b ng cách dùng Function Len(TString). Và ñ nói ñ n character th i trong m t Text string ta dùng Mid Function.
  • 35. 34 Khi User click button Remove Blank Spaces chương trình s execute Sub dư i ñây: Private Sub CmdRemoveBlankSpaces_Click() Dim i, TLen, TMess TMess = "" ' Initialise temporary String to null string For i = 1 To Len(txtOriginalString.Text) ' Iterate from the first chracter to the last character of the string ' Check if chracter is NOT a blank space If Mid(txtOriginalString.Text, i, 1) <> " " Then ' Character is not a blank space - so append it to TMess TMess = TMess & Mid(txtOriginalString.Text, i, 1) End If Next txtResultString.Text = TMess ' Disaplay TMess by assigning it to txtResultString.text End Sub Thông thư ng, ta dùng FOR loop khi bi t trư c execution s ñi qua loop m t s l n nh t ñ nh. Nhưng th nh tho ng, khi m t ñi u ki n ñư c th a mãn ta có th ép execution nh y ra gi a ch ng kh i FOR loop, ch không ñ i cho ñ n ñ s l n ñi qua loop. Thí d như ta mu n bi t ph i c ng bao nhiêu s k ti p t 1 tr lên ñ ñư c t ng s v a l n hơn hay b ng 76. Khi User click button Work Out, Sub dư i ñây s ñư c x lý: Private Sub cmdWorkOut_Click() Dim i, Total, WantedTotal WantedTotal = CInt(txtWantedTotal.Text) ' Convert Text string ra internal number b?ng Function CInt Total = 0 ' Initialise Total value to zero For i = 1 To 30
  • 36. 35 Total = Total + i ' Add the number to the Total If Total >= WantedTotal Then Exit For ' Jump out of FOR loop Next txtActualTotal.Text = CStr(Total) ' Display the Actual Total txtUptoNumber.Text = CStr(i) ' Display the highest number End Sub Dùng DO WHILE Loop statement Khi ta không bi t ch c là execution s ñi qua loop bao nhiêu l n thì t t nh t là dùng DO WHILE Loop statement. Khàc v i FOR Loop, trong DO WHILE Loop ta ph i t lo initialisation (t c là m i vô ñ u i b ng bao nhiêu) và t lo tăng value c a parameter i. N u Logical Expression là True thì execute nh ng dòng code t DO WHILE cho ñ n Loop. Thí d m i v a qua có th vi t l i b ng cách dùng DO WHILE Loop như sau: Private Sub cmdWorkOut_Click() Dim i, Total WantedTotal = CInt(txtWantedTotal.Text) ' Convert Text string ra internal number b?ng Function CInt Total = 0 ' Initialise Total value to zero i = 1 ' Intialise at the first character Do While (Total < WantedTotal) ' Logical Expression is (Total < WantedTotal) Total = Total + i ' Add the number to the Total i = i + 1 ' Increment the vakue of i Loop txtActualtotal.Text = CStr(Total) ' Display the Actual Total txtUptonumber.Text = CStr(i - 1) ' Display the highest number End Sub TRong khi Total hãy còn nh hơn WantedTotal thì ta ti p t c ñi qua While Loop. Gi d ta có các hàng text ch a giá ti n các th có th b vào bánh mì th t v i giá như sau: Chicken Roll 45c Roast Beef 55c Tomato Sauce 5c Bây gi ta mu n vi t code ñ l y ra giá ti n t nh ng hàng Text string như trên. Ta s ñi t bên ph i l n l n qua trái cho ñ n khi tìm ñư c m t blank space. Private Sub WorkOutPrice_Click() Dim i, TStr, PriceInCents, Price TStr = "Chicken Roll 45c" i = Len(TStr) ' Starting from the rightmost character of the text string ' Going from right to left, look for the first blank character Do While (Mid(TStr, i, 1) <> " ") i = i - 1 ' Keep walking to the left Loop PriceInCents = Mid(TStr, i + 1) ' String including character "c" ' Discard the rightmost character which is "c" and convert the price string to single number Price = CSng(Left(PriceInCents, Len(PriceInCents) - 1)) txtPrice.Text = CStr(Price) ' Display the highest number
  • 37. 36 End Sub Dùng Function Function là m t d ng subroutine gi ng gi ng như Sub. Ch khác ch Function cho ta m t k t qu , cho nên cách dùng Function hơi khác v i Sub. Ta vi t m t variable bên trái d u =, ñư c assigned k t qu c a m t Function. Thí d như ta dùng Trim Function ñ lo i b nh ng blank space hai ñ u c a text string TString: ResultString = Trim(TString) Ta ñưa cho Function Trim m t text string called TString. Sau khi Function Trim ñư c executed, ta có k t qu nhưng TString không h thay ñ i. Ngư c l i, khi ta g i m t Sub, t t c nh ng parameter ta ñưa cho Sub ñ u có th thay ñ i tr khi ta tuyên b m t parameter nào ñó là ByVal. Trong thí d sau, m t copy c a StringA ñư c ñưa cho Sub nên sau khi execute ProcessString, StringA không h b thay ñ i. Sub ProcessString (ByVal StringA, ConditionA, ConditionB) Public Sub và Function Khi ta dùng ch Public (thay vì Private) phía trư c m t Sub hay Function, ta cho phép code n m m t Form hay Basic Module khác có th g i (hay dùng) Sub hay Function ñó. Thí d trong Form2 ta có ñ nh nghĩa DisplayData là: Public Sub DisplayData . . . . End Sub Trong Form1, ta g i DisplayDta như sau: Form2.DisplayData Chương Ba - Form và các Controls thông thư ng H u h t các chương trình VB6 ñ u có ít nh t m t Form. Khi ta ch y chương trình, Form n y s hi n ra trư c h t ñ ta ra l nh nó làm chuy n gì. Cái Form tr ng không ch làm ñư c gì nhi u, nên ta ñ t lên Form nh ng controls như Textbox(h p ñ ñánh ch vào), Label(nhãn), Commandbutton(nút b m m nh l nh), .v.v.. Các controls cho ta enter các d ki n ñ chương trình dùng x lý, và các controls cũng hi n th (display) k t qu cho chúng ta xem. S p ñ t controls lên Form Ta hãy b t ñ u thi t k m t chương trình m i (New Project) b ng cách ch n Standard EXE, môi trư ng tri n khai l p trình (IDE) cho b n s n m t Form tên là Form1. Mu n ñ t m t Control lên Form, click hình cái Control trong Toolbox r i Drag (b m nút trái c a con chu t r i kéo cho thành hình ch nh t trư c khi buông nút trái ra) con chu t trên Form v thành c c a Control. M t cách khác ñ ñ t m t control lên Form là doubleclick cái Control trong Toolbox, m t hình control s hi n ra trên Form. K ñó b n d i control ñi ñ n ch mình mu n và resize nó. N u b t c lúc nào b n không th y Túi ñ ngh (Toolbox) n m bên trái, b n có th dùng m nh l nh Menu View|Toolbox ñ b t nó hi n ra. Có m t cách khác là click lên toolbox icon trên toolbar chính c a VB6.
  • 38. 37 Nên nh r ng Toolbox cũng là m t window như các window khác. Khi nó hi n lên r i b n có th n m (b m nút trái c a con chu t và gi như v y ch không buông ra) title nó ñ d i ñi nơi khác. B n có th ñóng nó b ng cách click lên d u x góc ph i phía trên. N u right click trên Toolbox, nó s display context sensitive menu, trong ñó có property dockable (có th ñ u b n) . N u m t window là dockable, sau khi b n d i nó ñi kh i vi trí docked bình thư ng c a nó, b n có th dock nó l i như c b ng cách double click lên title c a nó. Resize và di chuy n control Khi b n select m t control (click lên nó), chung quanh control s hi n ra resize handle, 8 nút ñen d c theo chu vi c a control. Click lên các nút ñen c a resize handle, b n có th resize control. Có m t cách khác ñ resize control là dùng Shift + ArrowKey. B m nút Shift trong khi b m m t arrow key, control s l n ra hay thu h p theo chi u c a ArrowKey. Lưu ý: M t s control có kích thư c t i thi u, b n không th làm cho nó nh hơn ñư c. Thí d như Combobox, nó ph i cao ñ ñ display m t hàng text. Tương t như th , b m nút Ctrl trong khi b m m t arrow key, control s di chuy n theo chi u c a ArrowKey. Ngoài ra, nên nh r ng trong lúc chương trình ch y (at run-time), trong code ta có th thay ñ i kích thư c và v trí các controls d dàng, th m chí có th làm cho chúng hi n ra hay bi n m t b ng cách s a ñ i value các property left, top, width, height và visible c a các controls. Alignment Grid ð giúp b n s p ñ t ngay ng n các controls trên m t form, VB6 cho b n Alignment Grid. Nó là nh ng d u ñen c a các hàng d c và xuôi trên form. B n có th làm cho các d u ñen c a grid trên form bi n m t b ng cách dùng menu command Tools | Options ñ display Option Dialog, k ñó ch n Tag General và clear checkbox "Show Grid":
  • 39. 38 B n cũng có th nhân d p n y thay ñ i kho ng cách chi u r ng (Width) và chi u cao (Height) c a các ch m ñen c a grid. Kích thư c nh nh t c a Width hay Height là 24. Hãy so sánh hai trư ng h p form có và không có Show Grid như dư i ñây: Control Locking M t khi b n ñã s p ñ t kích thư c và v trí c a các control trên form r i, r t d ta tình c thay ñ i các ñ c tính y vì vô ý click lên m t control. Do ñó VB6 cho ta Menu command Format | Lock Controls ñ khóa chúng l i. Sau khi khóa, cái hình ng khóa trên menu b chìm xu ng.
  • 40. 39 N u sau n y b n mu n thay ñ i kích thư c ho c v trí c a chúng thì nh dùng Menu command Format | Lock Controls l i. Sau khi m khóa, cái hình ng khóa trên menu hi n ra bình thư ng. Cài ñ t các Properties c a Form Nhi u property c a m t form nh hư ng ñ n di n m o v t lý (physical appearance) c a nó. Property Caption s quy t ñ nh text ñư c hi u th trong title. N u Property BorderStyle c a form không ph i là Sizable thì User không th resize form at run-time. Property Icon quy t ñ nh hình icon ñu c dùng trong title c a form, nh t là khi form thu nh (minimized). N u b n không mu n cho phép User minimize hay maximize form thì set value c a property MinButton, MaxButton ra False. N u property ControlBox là False thì form s không có nút minize, maximize hay close (x) trên góc ph i c a nó, ñ ng th i form cũng không display c icon bên góc trái title như trong hình dư i ñây: V trí ñ u tiên (top,left) c a form có th ñư c thay ñ i trong design time b ng cách di chuy n hình nh c a nó trong window Form Layout: Property WindowState xác ñ nh Form s có kích thư c bình thư ng (normal=0), hay minimized (=1), maximized =(2). Lưu ý là property Font c a Form s ñư c các control n m trên nó th a k . T c là khi b n ñ t m t control lên form, property Font c a control y s t ñ ng tr nên gi ng y như c a form. Vài Event thông d ng c a Form Nhìn t m t phương di n, Form cũng gi ng như Control. Ta có th instantiate m t form nhi u l n ñ có nhi u form tương t nhau. Trong thí d dư i ñây, ta instantiate Form2 hai l n ñ có MyForm và YourForm: Private Sub CmdCreateForms_Click() Dim MyForm, YourForm Set MyForm = New Form2 MyForm.Caption = "This is My Form" MyForm.Show
  • 41. 40 MyForm.Move 1000, 1000 Set YourForm = New Form2 YourForm.Caption = "YOUR FORM IS HERE" YourForm.Show YourForm.Move 2000, 2000 End Sub M t Form cũng có nhi u Events r t h u d ng. • F orm_Initialize: Event n y xãy ra trư c nh t và ch m t l n thôi khi ta instantiate form ñ u tiên. Ta dùng Form_Initialize event ñ th c hi n nh ng gì c n ph i làm chung cho t t c các instances c a form n y. • F orm_Load: Event n y xãy ra m i l n ta instantiate m t form. N u ta ch dùng m t instance duy nh t c a m t form trong chương trình thì Form_Load coi như tương ñương v i Form_Initialize. Ta dùng Form_Load event ñ initialise variables, controls v.v. cho instance n y. Bên trong Form_Load b n không th dùng Setfocus cho m t control nào trên form vì form chưa h n thành hình (ra ñ i). Mu n làm vi c y b n ph i delay (trì ho n) m t chút xíu b ng cách dùng Control Timer ñ ñ i cho Form_Load ñư c hoàn t t. Thí d : Private Sub Form_Load() Timer1.Interval = 500 Timer1.Enabled = True End Sub Private Sub Timer1_Timer() Timer1.Enabled = False ' Timer1_Timer only execute once txtName.Setfocus ' Make Tab Cursor start at TextBox txtName End Sub • F orm_Activate: M i l n m t form tr nên active (current) thì nó generate m t Activate event. Ta có th dùng event n y ñ refresh display trên form. • F orm_QueryUnload: Khi User click d u x phía trên bên ph i ñ close form thì nó generate QueryUnload event. Syntax c a Sub n y như dư i ñây: Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) End Sub Event n y cho ta m t d p ñ cancel Close action c a form (t c là không cho User close form) b ng cách set Cancel b ng 1. UnloadMode cho ta bi t ai, task hay form nào mu n close form n y. Ngoài ra, b n cũng nên bi t r ng m t form t ñ ng Load hay tr nên active n u b n nh c ñ n nó, thí d như dùng Form2.List1. Khi m t form ñã ñư c loaded r i b n có th hide (làm cho bi n m t) nó.
  • 42. 41 K ñó, khi b n show form ra tr l i thì form không có gì thay ñ i. Nhưng n u b n Unload m t form (thí d b ng cách dùng Unload Form2 ), r i sau ñó load tr l i b ng cách dùng Form2.Show ch ng h n, thì Form ph i tr i qua quá trình Form_Load, và dĩ nhiên form m t t t c nh ng gì có trư c ñây. Ngoài ra, Hide/Show m t form ñã ñư c loaded r i thì r t nhanh, còn Unload/Load thì m t thì gi hơn. Khi b n Show m t Form chưa hi n h u thì form s ñư c loaded và show. ðôi khi b n mu n Load m t form, r i làm vi c v i nó trư c khi Show, trong trư ng h p ñó b n dùng Load Form2 r i m t ch p sau dùng Form2.Show. MDI Form ðôi khi b n mu n có m t MDI form, t c là m t form có th ch a nhi u form con bên trong. D ng MDIform n y thư ng ñư c dùng trong các application như wordprocessor ñ có th m nhi u document cùng m t lúc, m i document ñư c hi n th trong m t form con. ð có m t MDIForm b n c n ph i dùng menu command Project | Add MDI Form. M i VB6 project ch có th có t i ña m t MDIform. Mu n m t form tr thành m t form con b n set property MDI Child c a nó thành True. At run-time b n không th hide (bi n nó thành invisible) m t MDIChild form, nhưng có th minimize nó. N u b n th t s mu n hide nó thì ph i dùng mánh l i là cho nó v trí (top,left) s âm l n hơn kích thư c nó ñ nó n m ngoài t m hi n th c a form. Trong m t chương trình dùng MDI Form, khi b n click MDI Form nó không nh y ra phía trư c và che các form con, nhưng v n luôn luôn n m dư i. Controls là gì? Controls v a có hình, v a có code ch y bên trong m t window nho nh , gi ng như m t form. Khi ta l p trình VB6 ta l p ráp các controls (là nh ng v t d ng ti n ch ) trên m t hay nhi u form ñ có m t chương trình nhanh chóng. Ta giao d ch v i m t control qua ba ñ c tính c a control: • P roperties: t p h p các ñ c tính c a control mà ta có th n ñ nh lúc design time hay run-time. Có nhi u properties v di n m o, n u ta thay ñ i at design time s th y k t qu hi n ra l p t c, thí d Font hay màu s c. • M ethods: nh ng gì control th c hi n ñu c, t c là nh ng kh năng c a nó. • E vents: nh ng s c mà control s thông báo cho chúng ta bi t khi nó xãy ra v i control. Khi m t event xãy ra VB6 s x lý m t Event Handler (thí d như Sub Command1_Click()), mi n là chúng ta vi t code s n trong ñó. N u không có code thì coi như chúng ta không thèm bi t ñ n các event lo i ñó. Có m t s Events mà chúng ta thư ng x lý là: o C lick : xãy ra khi user click lên control. Ta thư ng dùng nó cho CommandButton và Listbox. o M ouseDown, MouseUp : m i khi User b m m t mouse button là có m t MouseDown Event, khi User buông nó ra thì có m t MouseUp Event. Ta thư ng dùng MouseDown Event ñ Popup context sensitive menu hay b t ñ u m t di n bi n Drag. Thí d : Private Sub Foods_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbRightButton Then ' if Right button was pressed PopupMenu mnuActions ' popup a menu End If
  • 43. 42 End Sub Private Sub DrinkList_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) DrinkList.drag ' Displaying a drag icon to start the drag process End Sub ð ý là Click không cho chúng ta thêm chi ti t gì v s c , trong khi MouseDown/MouseUp cho ta bi t v trí c a cursor, button nào c a Mouse ñư c b m và lúc y User có b m nút Shift, Ctrl hay Alt không. M i Click là ñi ñôi v i m t c p MouseDown/MouseUp. N u b n mu n x lý v a Click l n MouseDown thì ph i c n th n. Thí d b n mu n v a handle Click event v a handle Mouse Drag thì ph i làm sao phân bi t hai trư ng h p. N u không User ch mu n th y k t qu c a Click mà l i th y control b t ñ u display m t Drag icon thì s b c mình. o K eyPress : xãy ra khi user Press m t key. Ta thư ng dùng nó cho TextBox ñ lo i ra (filter out) các keystrokes ta không ch p nh n. KeyPress cho ta ASCII value, m t con s có giá tr t 1 ñ n 255, c a key. Trong thí d dư i ñây, m t Enter key s ñư c coi như m t TAB key: Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then KeyAscii = 0 ' Swallow the character to avoid side effect SendKeys "{TAB}" ' Emulate entering a TAB End If End Sub o K eyDown, KeyUp : m i KeyPress event là cho ta m t c p KeyDown/KeyUp event. KeyDown/KeyUp cho ta KeyCode và Shift value. ð detect Function key ta c n dùng KeyDown event. Trong thí d dư i ñây, ta display Function key User b m: Private Sub Text3_KeyDown(KeyCode As Integer, Shift As Integer) If (KeyCode >= 112) And (KeyCode <= 123) Then MsgBox "You pressed the Function key: F" & Trim(Str(KeyCode - 111)) End If End Sub o G LotFocus : Control tr nên active khi nó nh n ñư c Focus. Nó s generate m t GotFocus Event. Ta có th dùng nó ñ ñ i màu background c a m t text box như trong thí d dư i ñây: Private Sub Text2_GotFocus() Text2.BackColor = vbYellow End Sub
  • 44. 43 o L LostFocus : Thư ng thư ng h m t Control GotFocus thì trư c ñó có m t Control LostFocus. Ta có th dùng Event n y ñ Validate entry data hay thu x p công chuy n cho m t control v a m t Focus. Trong thí d dư i ñây, n u User không ñánh vào m t con s trong Textbox Text1 thì s ñư c thông báo và Tab Cursor s tr l i Textbox Text1. Private Sub Text1_LostFocus() If Not IsNumeric(Text1.Text) Then MsgBox "Please enter a number!" Text1.SetFocus End If End Sub o r DagDrop : xãy ra khi ta drop m t cái gì lên control . Parameter Source cho ta bi t Control nào ñã ñư c Drag và Drop. Nhi u khi m t control có th nh n drop t nhi u control khác nhau. Trong trư ng h p ñó ta ph i test xem ho c Control Type, ho c Name ho c Tag value c a Source control là gì ñ tùy nghi x lý. Trong thí d dư i ñây, khi User drop mouse xu ng Textbox Text2, n u Source là m t Listbox, không c n bi t Listbox nào, thì ta copy dòng ñư c ch n trong Listbox y qua Textbox Text2. Private Sub Text2_DragDrop(Source As Control, X As Single, Y As Single) If TypeOf Source Is ListBox Then Text2.Text = Source.Text End If End Sub TextBox TextBox là control ñu c dùng nhi u nh t ñ display text và nh n keystroke c a Userñ s a ñ i text có s n hay cho vào text m i. Property chính và default c a Textbox là text, t c là thư ng thư ng Text2.text có th ñư c vi t t t là Text2. Ta có th disable (khi n nó b t l c, không ph n ng gì h t và không cho s a ñ i) m t text box b ng cách set Property Enable ra False (ch s b m ñi), hay Lock (không cho s a ñ i) m t text box b ng cách set Property Locked ra True (ch không b m ). Text có th ñư c Align (Alignment Property) ñ display bên trái, chính gi a hay bên ph i c a h p nó. B n có th ch n BackColor và ForeColor cho background và text c a TextBox. Dùng Tag Palette khi ch n màu ñ có ñúng m t màu b n mu n.
  • 45. 44 Dĩ nhiên b n có th l a ch n Font và c ch cho Text v i Font Property. B n gi i h n s characters mà User có th enter cho TextBox b ng cách set MaxLength Property. N u Property Multiline là True thì User có th enter nhi u hàng. At Design time, n u b n mu n enter multiline thì ph i nh b m nút Ctrl khi press Enter m i khi xu ng hàng. N u không VB6 IDE tư ng r ng b n ñã k t thúc editing. Mu n assign cho text box multiline text thì ph i nhét vào m i cu i hàng CarriageReturn và LineFeed characters. Thí d như: Private Sub Command1_Click() Dim TextStr TextStr = "Bau ra bau lay ong cau" & vbCrLf ' Note: vbCrLf = chr(13) & chr(10) TextStr = TextStr & "Bau cau ca bong ngat dau kho tieu" Text1.Text = TextStr End Sub N u b n mu n mách nư c cho User v cách dùng m t textbox nào ñó thì có th dùng Property ToolTipText ñ nó display mách nư c m i khi mouse cursor n m lên textbox.
  • 46. 45 Dùng Property TabIndex ñ n ñ nh th t cho Tab Cursor d ng m i khi User b m nút TAB ñ d i TAB Cursor ñ n Textbox k ti p. N u b n không mu n Tab Cursor d ng m t TextBox nào thì set Property TabStop nó thành False. Tab Cursor không d ng Textbox có Property Enabled b ng False, nhưng v n d ng Textbox có property Locked b ng True. N u b n mu n dùng Textbox làm m t Password field thì set Property PasswordChar b ng "*". Làm như th s ép bu c Textbox display m i character b ng PasswordChar, t c là "*", ñ ngư i khác không ñ c ñư c trong khi User enter m t Paswword. Properties SelLength, SelStart và SelText N u b n mu n bi t ñư c tình hình hi n th i c a Textbox: SelText cho b n dãy ch ñang ñư c selected. SelStart cho b n v trí c a insertion point (ch cursor flashing). SelLength cho bi t con s characters ñã ñư c selected. N u b n mu n s a ñ i text trong Textbox: SelText cho b n nhét vào m t dãy ch . SelStart cho b n n ñ nh v trí b t ñ u c a dãy ch b n s p select. SelLength n ñ nh s characters b n mu n ch n, b t ñ u t SelStart. Dư i ñây là m t thí d trong ñó ta highlight text tìm ñư c: Private Sub Form_Click () Dim Search, Where ' Declare variables. ' Get search string from user. Search = InputBox("Enter text to be found:") Where = InStr(Text1.Text, Search) ' Find the given string in Text1.Text. If Where > 0 Then ' If found, Text1.SelStart = Where - 1 ' set selection start and Text1.SelLength = Len(Search) ' set selection length. Else MsgBox "String not found." ' Notify user. End If End Sub CommandButton CommandButton r t ti n cho ta dùng vào vi c x lý m t chuy n gì khi User click lên button. Event ta dùng thư ng nh t cho CommanButton là Click. Ta dùng Property Caption c a CommandButton ñ enter cái gì ta mu n display trên button. N u mu n cho phép User dùng ALT+E (ñè nút Atl trong lúc b m nút E) ñ generate event click thì nhét d u "&" trư c ch E trong Caption c a button. Caption s display ch E v i m t g ch dư i. Ngoài ra ta cũng có th cho thêm m t cái hình vào CommandButton b ng cách ch n m t icon cho property Picture và set Property Style ra Graphical, thay vì Standard.
  • 47. 46 Lúc Run-time b n có th thay ñ i hình hay Caption c a CommandButton. Trong thí d dư i ñây, Caption c a CommandButton CmdOperation flip-flop gi a hai values Stop và Start: Private Sub CmdOperation_Click() If CmdOperation.Caption = "&Stop" Then CmdOperation.Caption = "St&art" Else CmdOperation.Caption = "&Stop" End If End Sub Label M c ñích chính c a Label là ñ display, không cho User Edit như Textbox. Do ñó ta có th dùng Property Font, ForeColor và Backcolor ñ làm cho nó ñ p. Ngoài ra Property BorderStyle có th cho Label l m xu ng n u b n set nó b ng Fixed Single. N u set property BackStyle b ng Transparent s tránh trư ng h p Backcolor c a Label làm cho không ñ p. Label cũng có Property Tabindex. N u b n mu n dùng ALT key ñ mang Tab Cursor v m t Textbox, hãy ñ m t Label v i TabIndex b ng TabIndex c a TextBox tr 1. Gi s Label có Caption là "&Address" thì ALT+A s mang Tab Cursor v TextBox màu vàng như trong thí d dư i ñây: Ngoài ra nh r ng b n có th thay ñ i Caption c a Label lúc run-time. CheckBox CheckBox ñư c dùng ñ User xác nh n có ñ c tính nào m t cách nhanh chóng. Property Value c a CheckBox có th là Checked (làm cho h p vuông có d u, b ng 1), Unchecked (làm cho h p vuông tr ng không, b ng 0) hay Grayed (làm cho h p vuông có d u màu nh t, b ng 2). M t khi bi t r ng CheckBox có Value b ng 1, ta có th ñ c Caption c a CheckBox ñ dùng n u c n.
  • 48. 47 B n có th dùng Property Alignment ñ làm cho Caption ñ ng bên ph i (Left Justify) hay bên trái (Right Justify) c a h p vuông. OptionButton OptionButton ( còn g i là RadioButton) có hình tròn v i m t ch m gi a, thay gì hình vuông v i m t g ch gi a như CheckBox. OptionButton luôn luôn ñư c qui t thành m t nhóm, ch a trong m t container. Container là m t Control có kh năng ch a các controls khác. Frame, PictureBox, hay chính Form ñ u là Container. Sau khi ñ t m t Container lên Form, n u mu n ñ m t OptionButton lên Container, trư c h t ta ph i Select container, r i k ñó ch n OptionButton. S dĩ, t t c OptionButtons ph i n m trong m t container là vì b t c lúc nào, nhi u nh t là m t OptionButton trong container có value True (vòng tròn có ch m gi a). Mu n bi t m t OptionButton có th t s n m trong m t container, b n th kéo cái container ñi ch khác. N u OptionButton b d i theo container thì nó n m trong container. M t cách khác là th kéo OptionButton ra kh i container. N u kéo ra ñư c thì nó không n m trong container. Mu n di chuy n m t OptionButton t container n y sang container khác, b n Cut OptionButton r i Paste nó vô container kia. ðôi khi m t container n m che trên m t control khác. Mu n mang m t container ra phía sau các controls khác b n Select container r i dùng Menu command Format | Order | Send to Back.
  • 49. 48 Chương B n - Vi t Code Trong ba chương ñ u chúng ta ñã h c qua ba b ph n chánh c a m t chương trình Visual Basic 6.0. ðó là: • Forms là cái n n hay khung ñ ta xây d ng User Interface. • Controls là nh ng viên g ch ñ ta dùng xây d ng User Interface. • Event procedures là code n m phía sau nh ng hình nh, nó là ch t keo dùng ñ dán các Controls l i v i nhau ñ t o thành chương trình áp d ng c a ta. Như ta ñã th y, t t c các code ñư c x lý (executed) khi có m t Event xãy ra. Thí d như khi User click m t CommandButton (Event Click) hay type nút Tab ñ di chuy n Cursor t Textbox n y (Event Lostfocus) qua Textbox khác (Event GotFocus). Các nhóm code x lý là : Private Sub Command1_Click() ... End Sub Private Sub Text1_LostFocus() ... End Sub và Private Sub Text2_GotFocus() ... End Sub Trong khi l p trình, m i l n ta double click lên m t Control c a m t Form là VB6 IDE t ñ ng generate cho ta cái v t hàng Private Sub Control_Event() cho ñ n End Sub ñ chúng ta ñi n nh ng hàng code c a mình vào chính gi a. ði u khi n th t x lý các dòng code Gi d ta vi t m t chương trình Vb6 ñơn gi n như trong hình n y v i hai Textbox tên txtName, txtAge và m t nút tên CmdEnter n m trong m t form tên Form1:
  • 50. 49 Thông thư ng các dòng code ñư c x lý theo th t t trên xu ng dư i. Thí d như ñ ki m xem các d ki n v a ñư c cho vào các Textbox có tương ñ i h p lý hay không, khi User click nút CmdEnter, ta x lý Sub dư i ñây: Private Sub CmdEnter_Click() ' Make sure the Name field is not blank If txtName.Text = "" Then MsgBox "Please enter Name" Exit Sub ' Terminate this Sub End If ' Make sure a number is supplied for Age If Not IsNumeric(txtAge.Text) Then MsgBox "Please enter a number for Age" Exit Sub ' Terminate this Sub End If End Sub Cái Sub nói trên có ch Private n m phía trư c, ý nói ch n i trong cùng m t form ch a Control CmdEnter (t c là Form1 trong trư ng h p n y) ta m i có th g i (dùng) Sub CmdEnter_Click(). Thí d ta mu n khi User b m key "Enter" trên bàn phím sau khi cho vào chi ti t Textbox txtAge thì coi như User ñã click nút CmdEnter. Ta vi t như sau: Private Sub txtAge_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then KeyAscii = 0 ' swallow Key Enter to avoid side effect CmdEnter_Click ' Call Private Sub CmdEnter_Click from the same form End If End Sub Khi ta dùng câu CmdEnter_Click làm m t dòng code (còn g i là g i Sub CmdEnter_Click) thì coi như tương ñương v i nhét t t c 10 dòng codes gi a hai hàng Private Sub CmdEnter_Click() và End Sub t i ch câu CmdEnter_Click, như vi t l i dư i ñây: Private Sub txtAge_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then KeyAscii = 0 ' Swallow Key Enter to avoid side effect ' Make sure the Name field is not blank If txtName.Text = "" Then MsgBox "Please enter Name" Exit Sub ' Terminate this Sub End If ' Make sure a number is supplied for Age
  • 51. 50 If Not IsNumeric(txtAge.Text) Then MsgBox "Please enter a number for Age" Exit Sub ' Terminate this Sub End If End If End Sub Có m t cách nói khác là khi execution ñi ñ n hàng CmdEnter_Click thì nó nh y vào Private Sub CmdEnter_Click() ñ execute cho ñ n h t r i nh y tr l i hàng k ti p trong Private Sub txtAge_KeyPress(KeyAscii As Integer) Trong Private Sub CmdEnter_Click() n u User không ñánh gì vào Textbox txtName thì chương trình s display message "Please enter Name" r i Exit Sub. ðây là cách nh y ngay ra kh i Sub ch không ñ i ph i execute xu ng t i hàng chót. Dùng IF....THEN statement Trong Private Sub CmdEnter_Click() trên ta th y có hai ch dùng IF...THEN ñ th xem m t ñi u ki n gì có ñư c th a mãn không. N u ñi u ki n là ñúng v y, t c là True thì ta th c hi n nh ng gì ñu c vi t t hàng IF...THEN cho ñ n hàng END IF. Ngư c l i, n u ñi u ki n không ñúng thì execution nh y xu ng t i dòng code n m ngay dư i dòng END IF. T c là có khi execution s ñi ngang qua, có khi không ñi ngang qua nh ng dòng code gi a câu IF...THEN và câu END IF. ði u ki n trong IF Statement là ph n n m gi a hai ch IF và THEN. Nó ñu c g i là Logical Expression. Ta có: txtName.text = "" ' content of Textbox txtName is nothing, i.e. an empty string và NOT IsNumeric(txtAge.text) ' content of TextBox txtAge is not a number Trong Logical Expression th nhì ta dùng Function IsNumeric ñ ñư c cho bi t r ng txtAge.text có ph i là m t con s hay không. Vì ta ch than phi n khi txtAge không ph i là m t con s nên ta ph i ñ thêm ch NOT phía tru c. T c là khi IsNumeric(txtAge.text) = False thì NOT IsNumeric(txtAge.text) = True N u gi a IF...THEN và END IF ch có m t dòng code b n có th nh p dòng code lên v i IF...THEN và không dùng END IF. T c là: If theColorYouLike = vbRed Then MsgBox "You 're a lucky person!" End If is equivalent with If theColorYouLike = vbRed Then MsgBox "You 're a lucky person!" M t Logical Expression có th ñơn gi n (simple) như trong các thí d trên hay r c r i hơn n u ta ráp nhi u simple Logical Expression l i v i nhau b ng cách dùng nh ng t OR và AND. Khi hai Logical Expression ñư c ráp l i b ng ch OR (HAY) thì ch c n ít nh t m t trong hai Expression là TRUE là Logical Expression t ng h p cũng là TRUE. Cái TRUE Table cho OR như sau: A B A OR B FALSE FALSE FALSE FALSE TRUE TRUE
  • 52. 51 TRUE FALSE TRUE TRUE TRUE TRUE Trong thí d dư i ñây n u m t ngư i 25 tu i tr lên HAY có l i t c trên 30 ngàn ñô la m t năm thì cho mư n ti n ñư c : If (PersonAge >= 25) Or (PersonIncome >= 30000) Then LendPersonMoney End If ð ý cách dùng các d u ngo c ñơn gi ng như trong toán ñ i s . Thông thư ng h cái gì n m trong ngo c thì mình tính trư c. N u có nhi u l p d u ngo c thì tính theo th t t trong ra ngoài. Như trong bài trên ta tính xem PersonAge >= 25 xem là TRUE hay FALSE, r i tính xem PersonIncome >= 30000 xem là TRUE hay FALSE, trư c khi tính k t qu t ng h p, d a vào cái TRUE table cho OR. Khi hai Logical Expression ñư c ráp l i b ng ch AND (Và) thì ch khi nào c hai Expression ñ u là TRUE, Logical Expression t ng h p m i là TRUE. Cái TRUE Table cho AND như sau: A B A AND B FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE TRUE TRUE Trong thí d dư i ñây n u h c sinh 18 tu i tr lên và cha m ki m 100 ngàn tr lên m t năm thì ñăng ký h c sinh m t ñ i h c tư: If (StudentAge >= 18) And (ParentIncome >= 100000) Then EnrollStudentAtPrivateUniversity End If M t Logical Expression có th t p h p c OR l n AND như trong thí d dư i ñây n u h c sinh 18 tu i tr lên và cha m ki m 100 ngàn tr lên m t năm HAY h c sinh có Intelligent Quotient cao hơn 160 thì ñăng ký h c sinh m t ñ i h c tư: If ((StudentAge >= 18) And (ParentIncome >= 100000)) Or (StudentIQ > 160) Then EnrollStudentAtPrivateUniversity End If Hai d u ngo c ñơn n m bên ngoài c a: ((StudentAge >= 18 ) And (ParentIncome >= 100000)) không c n thi t vì theo qui ư c, ta tính AND expression trư c khi tính OR expression, nhưng nó giúp ta ñ c d hơn. Dùng IF....THEN..ELSE statement Hãy xem thí d : If (StudentPassmark > 75) Then ' Part A
  • 53. 52 EnrollStudentAtPublicSchool Else ' Part B EnrollStudentAtPrivateSchool End If N u h c sinh ñ u v i s ñi m trên 75 thì cho h c trư ng công, N U KHÔNG thì ph i h c trư ng tư. T c là n u StudentPassmark > 75 là TRUE thì x lý ph n A, n u không thì x lý ph n B. ð ý ph n A g m nh ng dòng code n m gi a dòng If (StudentPassmark > 75) then và else. Còn ph n B g m nh ng dòng code n m gi a dòng else và end if. Ta có th ráp ch ELSE v i ch IF ñ dùng như trong thí d sau ñây: < If (StudentPassmark > 75) Then EnrollStudentAtPublicSchool ElseIf (StudentPassmark >= 55) Then EnrollStudentAtSemipublicSchool Else EnrollStudentAtPrivateSchool End If N u h c sinh ñ u v i s ñi m trên 75 thì cho h c trư ng công, N U t 55 ñi m ñ n 75 ñi m thì cho h c trư ng bán công, n u không (t c là ñi m ñ u dư i 55) thì ph i h c trư ng tư. N u t nh nh , không có trư ng tư, ta không có quy t ñ nh cho h c trò ñ u dư i 55 ñi m h c ñâu thì b ph n ELSE trong thí d trên. Ph n chương trình tr thành: If (StudentPassmark > 75) Then EnrollStudentAtPublicSchool ElseIf (StudentPassmark >= 55) Then EnrollStudentAtSemipublicSchool End If Ta có th dùng ELSEIF nhi u l n như sau: If (TheColorYouLike = vbRed) Then MsgBox "You 're a lucky person" ElseIf (TheColorYouLike = vbGreen) Then MsgBox "You 're a hopeful person" ElseIf (TheColorYouLike = vbBlue) Then MsgBox "You 're a brave person" ElseIf (TheColorYouLike = vbMagenta) Then MsgBox "You 're a sad person" Else MsgBox "You 're an average person" End If Execution ñi l n lư t t trên xu ng dư i, n u m t ñi u ki n IF là TRUE thì x lý ph n c a nó r i nh y xu ng ngay dư i dòng END IF. Ch khi m t ñi u ki n IF không ñư c th a mãn ta m i th m t ñi u ki n IF bên dư i k ñó. T c là n u b n thích màu ñ l u màu tím (magenta) thì chương trình s display "You're a lucky person", và không h bi t "You're a sad person".