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".