Giáo trình VB6 - Chương 4: 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

 

doc10 trang | Chuyên mục: Visual Basic 6.0 | Chia sẻ: dkS00TYs | Lượt xem: 1719 | Lượt tải: 3download
Tóm tắt nội dung Giáo trình VB6 - Chương 4: Viết Code, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
rê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 
 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: 
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. 
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 
 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
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

File đính kèm:

  • docGiáo trình VB6 - Chương 4_Viết Code.doc
Tài liệu liên quan