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
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
1
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()
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
2
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 IFTHEN. Nó đu c g i là Logical
Expression. Ta có:
txtName.text = "" ' content of Textbox txtName is nothing, i.e. an empty string
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 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 ORAND. 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
3
>= 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
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) thenelse. Còn ph n B
g m nh ng dòng code n m gi a dòng elseend if.
Ta có th ráp ch ELSE v i ch IF đ dùng nh trong thí d sau đây: ư
4
<
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". ế
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
5