Giáo trình Lập trình căn bản (Phần 2) - Trường Đại học Công nghệ Sài Gòn

pdf 40 trang Hùng Dũng 04/01/2024 870
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Lập trình căn bản (Phần 2) - Trường Đại học Công nghệ Sài Gòn", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfgiao_trinh_lap_trinh_can_ban_phan_2_truong_dai_hoc_cong_nghe.pdf

Nội dung text: Giáo trình Lập trình căn bản (Phần 2) - Trường Đại học Công nghệ Sài Gòn

  1. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Chương 4 Các lệnh và hàm cơ bản 1. Lệnh rẽ nhánh 1.1. Lệnh If o Một dịng lệnh: If Then o Nhiều dịng lệnh: If Then Các dịng lệnh End If Ý nghĩa câu lệnh: Các dịng lệnh hay dịng lệnh sẽ được thi hành nếu như điều kiện là đúng. Cịn nếu như điều kiện là sai thì câu lệnh tiếp theo sau cấu trúc If Then được thi hành. o Dạng đầy đủ: If Then Else If Then [Khối lệnh 1] ElseIf Then [Khối lệnh 2] [Else [Khối lệnh n]] End If VB sẽ kiểm tra các điều kiện, nếu điều kiện nào đúng thì khối lệnh tương ứng sẽ được thi hành. Ngược lại nếu khơng cĩ điều kiện nào đúng thì khối lệnh sau từ khĩa Else sẽ được thi hành. Ví dụ: If (TheColorYouLike = vbRed) Then MsgBox "You are a lucky person" ElseIf (TheColorYouLike = vbGreen) Then MsgBox "You are a hopeful person" ElseIf (TheColorYouLike = vbBlue) Then MsgBox "You are a brave person" ElseIf (TheColorYouLike = vbMagenta) Then MsgBox "You are a sad person" Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 26
  2. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Else MsgBox "You are an average person" End If 1.2. Lệnh Select Case Trong trường hợp cĩ quá nhiều các điều kiện cần phải kiểm tra, nếu ta dùng cấu trúc rẽ nhánh If Then thì đoạn lệnh khơng được trong sáng, khĩ kiểm tra, sửa đổi khi cĩ sai sĩt. Ngược lại với cấu trúc Select Case, biểu thức điều kiện sẽ được tính tốn một lần vào đầu cấu trúc, sau đĩ VB sẽ so sánh kết quả với từng trường hợp (Case). Nếu bằng nĩ thi hành khối lệnh trong trường hợp (Case) đĩ. Select Case Case [Khối lệnh 1] Case [Khối lệnh 2] . . . [Case Else [Khối lệnh n]] End Select Mỗi danh sách kết quả biểu thức sẽ chứa một hoặc nhiều giá trị. Trong trường hợp cĩ nhiều giá trị thì mỗi giá trị cách nhau bởi dấu phẩy (,). Nếu cĩ nhiều Case cùng thỏa điều kiện thì khối lệnh của Case đầu tiên sẽ được thực hiện. Ví dụ của lệnh rẽ nhánh If Then ở trên cĩ thể viết như sau: Select Case TheColorYouLike Case vbRed MsgBox "You are a lucky person" Case vbGreen MsgBox "You are a hopeful person" Case vbBlue MsgBox "You are a brave person" Case vbMagenta MsgBox "You are a sad person" Case Else MsgBox "You are an average person" End Select Tốn tử Is & To Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 27
  3. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Tốn tử Is: Được dùng để so sánh với một biểu thức nào đĩ. Tốn tử To: Dùng để xác lập miền giá trị của . Ví dụ: Select Case Tuoi Case Is = To [Step ] [khối lệnh] Next Biến đếm, giá trị đầu, giá trị cuối, bước nhảy là những giá trị số (Integer, Single, ). Bước nhảy cĩ thể là âm hoặc dương. Nếu bước nhảy là số âm thì giá trị đầu phải lớn hơn giá trị cuối, nếu khơng khối lệnh sẽ khơng được thi hành. Khi Step khơng được chỉ ra, VB sẽ dùng bước nhảy mặc định là một. Ví dụ: Đoạn lệnh sau đây sẽ hiển thị các kiểu chữ hiện cĩ của máy bạn. Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 28
  4. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Private Sub Form_Click( ) Dim i As Integer For i = 0 To Screen.FontCount MsgBox Screen.Fonts(I) Next End Sub Ví dụ: Tính N! o Bước 1: Thiết kế chương trình cĩ giao diện: Hình 4-1. Giao diện chương trình tính giai thừa o Bước 2: Sự kiện Command1_Click được xử lý như sau: Private Sub cmdTinh_Click() Dim i As Integer, gt As Long, n As Integer n = Val(txtSo.Text) gt = 1 For i = 2 To n gt = gt * CLng(i) Next txtgt.Text = gt Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 29
  5. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin End Sub Lưu dự án và chạy chương trình ta được kết quả như hình trên. 2.1.2 For Each Next Tương tự vịng lặp For Next, nhưng nĩ lặp khối lệnh theo số phần tử của một tập các đối tượng hay một mảng thay vì theo số lần lặp xác định. Vịng lặp này tiện lợi khi ta khơng biết chính xác bao nhiêu phần tử trong tập hợp. For Each In Next Lưu ý: - Phần tử trong tập hợp chỉ cĩ thể là biến Variant, biến Object, hoặc một đối tượng trong Object Browser. - Phần tử trong mảng chỉ cĩ thể là biến Variant. - Khơng dùng For Each Next với mảng chứa kiểu tự định nghĩa vì Variant khơng chứa kiểu tự định nghĩa. 2.2. Lệnh Do Do Loop: Đây là cấu trúc lặp khơng xác định trước số lần lặp, trong đĩ, số lần lặp sẽ được quyết định bởi một biểu thức điều kiện. Biểu thức điều kiện phải cĩ kết quả là True hoặc False. Cấu trúc này cĩ 4 kiểu: Kiểu 1: Do While Loop Khối lệnh sẽ được thi hành đến khi nào điều kiện khơng cịn đúng nữa. Do biểu thức điều kiện được kiểm tra trước khi thi hành khối lệnh, do đĩ cĩ thể khối lệnh sẽ khơng được thực hiện một lần nào cả. Kiểu 2: Do Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 30
  6. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Loop While Khối lệnh sẽ được thực hiện, sau đĩ biểu thức điều kiện được kiểm tra, nếu điều kiện cịn đúng thì, khối lệnh sẽ được thực hiện tiếp tục. Do biểu thức điều kiện được kiểm tra sau, do đĩ khối lệnh sẽ được thực hiện ít nhất một lần. Kiểu 3: Do Until Loop Cũng tương tự như cấu trúc Do While Loop nhưng khác biệt ở chỗ là khối lệnh sẽ được thi hành khi điều kiện cịn sai. Kiểu 4: Do Loop Until Khối lệnh được thi hành trong khi điều kiện cịn sai và cĩ ít nhất là một lần lặp. Ví dụ: Đoạn lệnh dưới đây cho phép kiểm tra một số nguyên N cĩ phải là số nguyên tố hay khơng? Dim i As Integer i = 2 Do While (i Sqr(N)) And (N <> 1) Then MsgBox Str(N) & “ la so nguyen to” Else MsgBox Str(N) & “ khong la so nguyen to” End If Trong đĩ, hàm Sqr: hàm tính căn bậc hai của một số Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 31
  7. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin 2.3. Lệnh While Tương tự vịng lặp Do While, nhưng ta khơing thể thốt vịng lặp bằng lệnh Exit. Vì vậy, vịng lặp kiểu này chỉ thốt khi biểu thức điều kiện sai. While Wend 3. Các lệnh và hàm cơ bản 3.1. Lệnh End Dùng để kết thúc chương trình Cú pháp: End 3.2. Lệnh Exit Để thốt khỏi cấu trúc ta dùng lệnh Exit, Exit for cho phép thốt khỏi vịng For, exit Do cho phép thốt khỏi vịng lặp Do, exit sub cho phép thốt khỏi Sub, exit function thốt khỏi Function. Cú pháp: Exit For | Do|Sub|Function. Ví dụ: Đây là ví dụ minh học một dạng thốt khỏi vịng lặp Do khơng điều kiện. Do Exit Do Loop 3.3. Lệnh Msgbox MsgBox [, [, Tiêu đề]] Trong cú pháp sử dụng này, thành phần Thơng báo chính là chuỗi nội dung sẽ hiển thị của lệnh. Giá trị của thành phần Loại thơng báo sẽ quy định hình ảnh và những nút sẽ hiển thị trong thơng báo. Các hằng số liên quan đến hình ảnh được hiển thị gồm: Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 32
  8. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin vbQuestion vbCritical vbInformation vbExclamation Hằng số quy định các nút sẽ hiển thị gồm: vbOKOnly, vbOKCancel, vbYesNoCancel, vbYesNo, vbAbortRetryIgnore. Tiêu đề là chuỗi ký tự sẽ xuất hiện trên thanh tiêu đề của cửa sổ thơng báo. Ví dụ để hiển thị giá trị của biến k chúng ta cĩ thể dùng câu lệnh như sau: MsgBox “k= “ & Format(k, “0.0”) & vbCrLf & “Khong hop le! Bien k phai khac 0”, vbOKOnly + vbCritical, “Thong bao loi” 3.4. Go Sub Return Chuyển điều khiển đến một nhãn trong chương trình và trở về (lệnh rẽ nhánh trở về). Cú pháp: GoSub Nhãn Nhãn: Các lệnh trong nhãn Return Trong đĩ: Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 33
  9. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Nhãn là một thường trình trong chương trình, một chương trình cĩ thể cĩ nhiều thường trình, mỗi thường trình cĩ một Nhãn phân biệt. Nhãn là một tên cĩ độ dài. Return: là lệnh đặc biệt cho biết kết thúc một nhãn và thực hiên quay trở về lệnh đứng sau lệnh GoSub 3.5. Goto Được dùng cho bẫy lỗi. On Error Goto ErrorHandler Khi cĩ lỗi, chương trình sẽ nhảy đến nhãn ErrorHandler và thi hành lệnh ở đĩ. 3.6. On Error Goto nhãn Lệnh On Error dùng trong hàm hay thủ tục báo cho Visual basic biết cách xử lý khi lỗi xảy ra. On Error GoTo Dùng On error Goto 0 tắt xử lý lỗi Cú pháp: Dạng 1: On Error GoTo : Ý nghĩa: : là một tên được đặt theo quy tắc của một danh biểu. Nếu một lệnh trong thì khi chương trình thực thi đến câu lệnh đĩ, chương trình sẽ tự động nhảy đến đoạn chương trình định nghĩa bên dưới để thực thi. Dạng 2: On Error Resume Next Ý nghĩa: - Nếu một lệnh trong thì khi chương trình thực thi đến câu lệnh đĩ, chương trình sẽ tự động bỏ qua câu lệnh bị lỗi và thực thi câu lệnh kế tiếp. Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 34
  10. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin 3.7. Các hàm chuyển kiểu Cbool(biểu thức): trả ra giá trị Boolean bằng cách chuyển đổi luận lý biểu thức. Ví dụ: A = 6; B = 7 Check = (A = B) (Check = False) Cbyte(biểu thức): trả ra số nguyên Byte bằng cách chuyển biểu thức ra Byte. Ví dụ: X = 126.234 N = Cbyte(X) (N = 126) Cint(biểu thức): trả ra số nguyên Integer bằng cách chuyển biểu thức ra Integer. Ví dụ: X = 12245.323 M = Cint(X) (M = 12245) Clng(biểu thức): trả ra số nguyên Long bằng cách chuyển biểu thức ra Long. Ví dụ: MyDouble = 12145.4324 X = Clng(X) (X = 12145) Csng(biểu thức): trả ra số thực Single bằng cách chuyển biểu thức ra Single. Ví dụ: MyDouble = 12145.432416934 X = Csng(MyDouble) (MyDouble = 12145.43242) Cdbl(biểu thức): trả ra số thực Double bằng cách chuyển biểu thức ra Double. Ccur(biểu thức): trả ra số Curency bằng cách chuyển biểu thức ra Currency. Cvar(biểu thức): trả ra giá trị kiểu Variant bằng cách chuyển biểu thức ra Variant. Cstr(biểu thức): trả ra Chuỗi bằng cách chuyển biểu thức ra Chuỗi. Cvdate(biểu thức): trả ra chuỗi Date bằng cách chuyển biểu thức ra Date. Chr(mã ký tự): trả ra một ký tự bằng cách chuyển mã ký tự ra ký tự tương ứng theo bảng mã Ascii. Mã ký tự: là giá trị số từ 0 đến 255 Ví dụ: C = Chr(65) (C = “A”) Val(số): trả ra một số chứa trong chuỗi. Ví dụ: MyValue = Val(“2457”) (MyValue = 2457) MyValue = Val(“2 4 5 7”) (MyValue = 2457) MyValue = Val(“24 and 57”) (MyValue = 24) Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 35
  11. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin 3.8. Các hàm tốn học Atn(Số): trả về giá trị Arctangent của số tính theo đơn vị Radians. Giá trị trả về trong khoảng từ -Pi/2 đến Pi/2. Cos(số): trả về giá trị Cosine của số tính theo đơn vị Radians. Giá trị trả về trong khoảng từ -1 đến 1. Sin(Số): trả về giá trị Sine của số tính theo đơn vị Radians. Giá trị trả về trong khoảng từ - 1 đến 1. Tan(Số): trả về giá trị Tangent của số tính theo đơn vị Radians. Exp(Số): trả về giá trị eSơ, với hằng số e = 2.718282. Log(Số): trả về giá trị Logarithm tự nhiên của số với số >0. (Logarithm của e = 2.718282). Sqr(Số): trả về căn bậc hai của số, với số >=0. Ví dụ: A = Sqr(4) (A = 2) Randomize: thực hiện khởi động bộ tạo số ngẫu nhiên. Rnd: trả về một số ngẫu nhiên cĩ giá trị =0. Abs(Số): trả về giá trị tuyệt đối của số. Sgn(Số): trả về một số nguyên cho biết dấu của số. Giá trị trả về = 1: số là số dương. Giá trị trả về = 0: số = 0. Giá trị trả về = -1: số là số âm. Ví dụ: A = 23.454; B= -34.65 N = Int(A) (N = 23) M = Fix(A) (M = 23) X = Int(B) (X = -35) Y = Fix(B) (Y = -34) 3.9. Các hàm kiểm tra kiểu dữ liệu IsDate(biểu thức): trả về giá trị True | False cho biết biểu thức cĩ phải là Date khơng. Ví dụ: MyDate = “February 12, 1969”: YourDate = #2/12/69#: NoDate = “Hello”. MyCheck = IsDate(MyDate) (MyCheck = True) MyCheck = IsDate(YourDate) (MyCheck = True) MyCheck = IsDate(NoDate) (MyCheck = False) Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 36
  12. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin IsEmpty(biểu thức): trả về giá trị True | False cho biết biểu thức đã được khởi tạo chưa. IsNull(biểu thức): trả về giá trị True | False cho biết biểu thức cĩ phải là Null khơng. IsNumeric(biểu thức): trả về giá trị True | False cho biết biểu thức cĩ phải là số khơng. IsArray(tên biến): trả về giá trị True | False cho biết biến cĩ phải là mảng khơng. VarType(tên biến): trả về số nguyên cho biết kiểu dữ liệu của biến. Giá trị Mơ tả kiểu dữ liệu trả về 0 Empty (chưa khởi tạo) 1 Null 2 Integer 3 Long 4 Single 5 Double 6 Currency 7 Date 8 String 9 OLE Automation Object 10 Error (biến lỗi) 11 Boolean 12 Mảng Variant 13 None OLE Automation Object 17 Byte 8192 Mảng 3.10. Các hàm thời gian 3.10.1 Lệnh gán giá trị Với biến d được khai báo là cĩ kiểu dữ liệu ngày tháng, chúng ta cĩ thể khởi tạo giá trị cho d bằng những lệnh sau: Dim d As Date 'Khoi tao d bang ngay gio hien tai: d = Now 'Khoi tao d bang ngay hien tai: d = Date 'Khoi tao d bang gia tri ngay thang: Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 37
  13. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin d = #12/24/2000# 'Khoi tao d bang 3 gia tri ngay, thang, nam: d = DateSerial(nam, thang, ngay) 3.10.2 Lệnh xử lý ngày tháng Lấy riêng giá trị ngày của d Hàm Day(d) As Variant(Integer) Lấy riêng giá trị tháng của d Hàm Month(d) As Variant(Integer) Lấy riêng giá trị năm của d Hàm Year(d) As Variant(Integer) Tính thứ trong tuần của ngày d Hàm WeekDay(d) (1 = vbSunday, 2 = vbMonday, ) Cộng giá trị ngày d với k(tháng, ngày, tuần, ) Hàm DateAdd(“Đơn vị”, k, d) As Date (Đơn vị được dùng cĩ thể là: “d”: tương ứng với ngày “w”: tương ứng với tuần “m”: tương ứng với tháng “yyyy”: tương ứng với năm Ví dụ dưới đây sẽ sử dụng các hàm về ngày tháng trong VB để xác định sinh nhật lần thứ n của bạn là thứ mấy trong tuần. Dim d As Date, d1 As Date, n As Integer Dim s As String, thu As String s = InputBox("Nhap ngay sinh cua ban", "Nhap thong tin") n = InputBox("Nhap n", "Nhap thong tin") Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 38
  14. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin d = CDate(s) d1 = DateAdd("yyyy", n, d) Select Case Weekday(d1) Case 1 thu = "Chu Nhat" Case 2 thu = "Thu Hai" Case 7 thu = "Thu Bay" End Select MsgBox "Sinh nhat thu " & Str(n) & " cua ban la ngay " & thu 3.11. Các hàm xử lý chuỗi 3.11.1 Hàm Len Hàm này dùng để tính chiều dài của một chuỗi nào đĩ. Cú pháp sử dụng của hàm cĩ dạng sau: dodai = Len(chuoi) trong đĩ dodai phải là một biến kiểu số nguyên đã được khai báo. Câu lệnh dưới đây sẽ duyệt qua từng ký tự của chuỗi s: Dim I As Integer For I = 1 to Len(s) ‘Xu ly tren tung ky tu cua chuoi s Print Mid(s, I, 1) Next 3.11.2 Hàm InStr Hàm InStr dùng để xem một chuỗi s cĩ chứa chuỗi con s1 hay khơng. Nếu tìm thấy, hàm sẽ cĩ giá trị là vị trí được tìm. Ngược lại hàm sẽ cĩ giá trị là 0. Cú pháp sử dụng của hàm cĩ dạng sau: Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 39
  15. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Dim tim As Integer tim = InStr([vt = 1,] chuỗi s, chuỗi con s1, [tuỳ chọn = vbBinaryCompare]) As Integer Trong đĩ: vt là một thành phần cĩ thể cĩ hay khơng. Giá trị của thành phần này là vị trí bắt đầu thực hiện việc tìm kiếm trong chuỗi s. Nếu chúng ta khơng chỉ ra thành phần này khi sử dụng InStr, VB sẽ thực hiện tìm từ đầu chuỗi (vt là 1). Tuỳ chọn tìm cũng là một thành phần cĩ thể dùng hoặc khơng. Khi được sử dụng thành phần này cĩ thể sẽ là một trong những giá trị sau: vbTextCompare: Khơng phân biệt chữ hoa hay thường . vbBinaryCompare: So sánh cĩ phân biệt hoa thường. vbUseCompareOption: Dùng chế độ hiện hành được đặt của hệ thống. Ví dụ: Dim s As String, s1 As String s = “Chuong trinh Visual Basic 1” s1 = “Visual Basic” If InStr(s, s1, vbTextCompare) > 0 Then MsgBox “Tim thay s1 trong s” End If 3.11.3 Lệnh Replace Lệnh Replace dùng để tìm và thay thế chuỗi ký tự sTim cĩ trong chuỗi s bằng chuỗi thay thế sThayThe. Cú pháp của lệnh cĩ dạng sau: Replace(s, sTim, sThayThe [, vị trí đầu = 1] [, số lần thay thế = 0] [, tuỳ chọn = vbBinaryCompare]) As String Mặc nhiên số lần thay thế cĩ giá trị là 0, khi ấy hàm sẽ thay thế tất cả chuỗi sTim bằng sThayThe cĩ trong s. Kết quả trả về là chuỗi đã được thay thế. 3.11.4 Các hàm trích chuỗi Hàm Left(chuỗi s, n) As String Hàm Right(chuỗi s, n) As String Hàm Mid(chuỗi s, bắt đầu, [n]) As String Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 40
  16. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Trong cú pháp các hàm trên, than số n chính là số ký tự cần trích. Với hàm Mid, nếu tham số này được bỏ qua thì chuỗi kết quả trả về sẽ được trích từ vị trí bắt đầu đến cuối chuỗi s. 3.11.5 Các lệnh cắt khoảng trắng Cắt các khoảng thừa bên trái của chuỗi s: LTrim(chuỗi s) Cắt các khoảng thừa bên phải của chuỗi s: RTrim(chuỗi s) Cắt các khoảng thừa bên trái và bên phải của chuỗi s: Trim(chuỗi s) 3.11.6 Các hàm định dạng Đổi chuỗi s thành chuỗi chữ hoa Hàm UCase(chuỗi s) Đổi chuỗi s thành chuỗi chữ thường: Hàm LCase(chuỗi s) Đổi biểu thức thành dạng chuỗi cĩ định dạng Hàm Format( , chuỗi định dạng) Ví dụ: hàm Format(10, “0.0”) sẽ trả về chuỗi “10.0” 3.12. Các hàm khác 3.12.1 Hàm MsgBox Trong trường hợp cần hỏi đáp với người sử dụng, chúng ta cĩ thể dùng hàm MsgBox theo cú pháp: MsgBox(Thơng báo, Loại, Tiêu đề) Ví dụ: Dim TraLoi As Integer TraLoi = MsgBox(Thơng báo, Loại, Tiêu đề) Kết quả trả về trong biến TraLoi sẽ chỉ là số của nút mà người dùng đã nhấn. Cĩ thể dùng chỉ số các nút này là các hằng số vbOK, vbYes, vbCancel. Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 41
  17. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin 3.12.2 Hàm InputBox Hàm InputBox này sẽ hiển thị một hộp thoại để người dùng nhập giá trị cho một biến nào đĩ của chương trình. Đây là một trong những lệnh nhập xuất cơ sở của VB. Cú pháp của hàm như sau: InputBox (Thơng báo, Tiêu đề) As String Ví dụ: Để yêu cầu người sử dụng nhập giá trị cho một biến n trong chương trình chúng ta cĩ thể ra lệnh n = InputBox(“Nhap gia tri so n”,”Nhap lieu””) Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 42
  18. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Chương 5 Thủ tục và hàm 1. Thủ tục 1.1. Khái niệm Thủ tục là một dạng chương trình con cho phép khai báo tập hợp các lệnh tương ứng với một đơn vị xử lý nào đĩ mà đơn vị xử lý này khơng cĩ giá trị trả về. Thủ tục cĩ thể cĩ hay khơng cĩ tham số. 1.2. Phân loại Thủ tục cĩ thể được chia làm 2 loại: thủ tục sự kiện và thủ tục dùng chung. Thủ tục sự kiện: là các thủ tục được viết cho một sự kiện của Form hoặc Control. Thủ tục loại này sẽ tự thực hiện khi sự kiện xảy ra. Thủ tục dùng chung: là các thủ tục được viết ở cấp Module hoặc ở phần General cấp Form. Các thủ tục này cĩ tính tổng quát và được gọi sử dụng từ các thủ tục, hàm khác. 1.3. Cấu trúc một thủ tục [Private | Public] Sub (các tham số) Tập hợp lệnh [Exit Sub] Tập hợp lệnh End Sub Giải thích các từ khĩa: Private: Thủ tục chỉ cĩ thể được gọi thực hiện trong cùng màn hình giao tiếp (form), thư viện (module) hiện hành. Public: Thủ tục cĩ thể được gọi thực hiện từ một màn hình, thư viện khác. Các khai báo thủ tục khơng chỉ ra phạm vi là Private hay Public sẽ cĩ phạm vi mặc nhiên là Public. Sub End Sub: là cặp từ khố khai báo bắt đầu và kết thúc một thủ tục. Tên thủ tục: Cũng giống như tên biến, tên thủ tục là một chuỗi ký tự liên tục khơng trùng với các đối tượng khác trong cùng phạm vi. Với các thủ tục xử lý biến cố của một đối tượng nào đĩ, tên của các thủ tục sẽ do chính VB tạo ra theo quy định tênđốitượng_biếncố(). Các tham số: Danh sách tên các biến “hình thức” (cịn thường được gọi là tham số hình thức) được sử dụng để giao tiếp dữ liệu với đơn vị chương trình gọi. Khác với các ngơn ngữ lập trình khác, những thủ tục khơng cĩ tham số trong VB cũng phải được khai báo cĩ cặp ngoặc (). Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 43
  19. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Exit Sub: Mặc nhiên thủ tục sẽ chấm dứt khi thực hiện đến lệnh End Sub. Tuy nhiên chúng ta cũng cĩ thể dùng lệnh Exit Sub để thốt khỏi thủ tục khi cần thiết 1.4. Xây dựng một thủ tục 1.4.1 Thủ tục dùng chung Cĩ 2 trường hợp: cấp Form và cấp Module Cấp Form: Từ Form ta nhấn F7, xuất hiện khung chương trình, chọn mục General tại hộp Object, nhập vào dịng [Private|Public] [Static] Sub Tên thủ tục [(Danh số các tham số)], sẽ xuất hiện dịng End Sub. Ta thực hiện viết khối lệnh bên trong. Public Sub Vidu() ' khoi lenh duoc viet o day End Sub Hoặc ta cĩ thể chọn Menu Tools \Add Procedure, sẽ xuất hiện khung đối thoại sau: Hình 5-1. Hộp thoại Add Procedure Chọn □ Sub, quy định □ Public|□ Private, đánh dấu □ All Local variables as Statics để chỉ định (static) cho các biến cục bộ là biến tĩnh, nhập tên thủ tục trong hộp Name, chọn Ok. Xuất hiện cấu trúc của thủ tục, ta chỉ việc nhập khối lệnh cho thủ tục bên trong Sub End Sub. Cấp Module: Để thêm vào Project một Module chương trình mới (lúc này trên khung Project sẽ cĩ thêm một Module mới) chọn menu Project\chọn Add Module, sẽ xuất hiện hộp thoại sau: Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 44
  20. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Hình 5-2. Hộp thoại Add Module Chọn New để thêm một Module mới, chọn thẻ Existing để thêm vào Project một Module đã được xây dựng sẵn. Thao tác thêm mới vào một thủ tục trong Module cũng giống như thao tác thêm mới vào một thủ tục trong Form. Ví dụ: Private Sub PhucHoi() txtSo1.Text = "" txtSo2.Text = "" txtTong.text = "" txtSo1.SetFocus End Sub 1.4.2 Thủ tục sự kiện Chọn đối tượng cần viết thủ tục, nhấn phím F7 (chọn menu View, Code), sẽ xuất hiện khung chương trình: Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 45
  21. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Chọn tên một sự kiện cần lập trình tại hộp Proc: sẽ xuất hiện ngăn: Private Sub End Sub. Viết khối lệnh bên trong Private Sub End Sub. Ghi chú: Để thực hiện viết thủ tục sự kiện cho đối tượng bằng cách Double Click vào đối tượng. Ví dụ: viết cho nút lệnh thốt Private Sub cmdthoat_Click() End End Sub 1.5. Gọi thực hiện thủ tục Khi đã khai báo một thủ tục, chúng ta cĩ thể gọi thực hiện thủ tục này trong phạm vi cho phép theo hai cách sau: thamsố1, thamsố2, Call (thamsố1, thamsố2, ) Ví dụ với thủ tục PhucHoi đã được khai báo trên đây, chúng ta cĩ thể gọi thực hiện như sau: PhucHoi Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 46
  22. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Hay: Call PhucHoi() Tuỳ theo các tham số hình thức lúc khai báo, khi gọi thực hiện thủ tục chúng ta phải truyền theo các thamsối (tham số thực) như trong mơ tả cú pháp trên. Các tham số thực này cĩ thể là một giá trị, một biến hay một biểu thức. Với các gọi thực hiện thứ nhất, các thành phần thamsối nếu cĩ sẽ cách nhau bằng dấu phân cách (,). Với cách gọi thực hiện thứ hai, các tham số thực luơn phải được đặt trong dấu ngoặc (). Một điểm cần lưu ý là tên của các tham số hình thức trong khai báo thủ tục và các tham số thực thamsối khơng nhất thiết phải giống nhau. Ví dụ trong khai báo Sub Dientich (bankinh As Single) Thì mỗi khi gọi thực hiện, thủ tục sẽ được truyền vào một tham số thực kiểu Single được đại diện bởi một tên chung là bankinh. Khi ấy người lập trình cĩ thể gọi thực hiện với các tham số thực khác như sau: Call Dientich (3) ‘Tham so thuc la so 3 Call Dientich (r) ‘Tham so thuc la bien r Trong trường hợp cần gọi thủ tục được khai báo Public, từ một màn hình giao tiếp khác ví dụ như Module, chúng ta cần chỉ ra tên của màn hình theo cú pháp: . 2. Hàm 2.1. Định nghĩa Cũng giống như thủ tục, hàm là một dạng chương trình con cĩ thể nhận vào các giá trị qua danh sách tham số hình thức, thực hiện các lệnh được khai báo, thay đổi các giá trị trong những tham số thực, Tuy nhiên hàm cĩ giá trị trả về cịn thủ tục thì khơng. Khác với cú pháp khai báo một thủ tục, khai báo hàm sẽ bắt đầu và kết thúc bằng cặp từ khố Function End Function. Ngồi ra, khi khai báo hàm chúng ta cịn phải chỉ ra kiểu dữ liệu trả về của hàm. 2.2. Cấu trúc một hàm [Private|Public] [Static] Fuction Tên hàm [(Danh số các tham số)] As Kiểu Khối lệnh . Tên hàm = giá trị|biến|biểu thức End Fuction Giải thích các từ khĩa: Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 47
  23. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin As Kiểu: là giá trị của hàm trả ra, cĩ thể là các kiểu sau: Boolean, Byte, Integer, Long, Single, Double, String, Date và Variant. Tên hàm = giá trị|biến|biểu thức: là lệnh gán đặc biệt dùng gán kết quả tính tốn được chứa trong giá trị|biến|biểu thức cho hàm. Nếu khơng cĩ lệnh này thì hàm khơng trả ra kết quả nào cả. End Fuction: là từ khĩa cho biết kết thúc hàm. Ví dụ: Đây là một hàm tính diện tích Hình Chữ nhật khi biết chiều dài và chiều rộng. Public Function DienTichHinhCN(d As Single, r As Single) As Single Dim dt As Single dt = d * r DienTichHinhCN = dt End Function 2.3. Xây dựng một hàm Hàm cĩ thể được xây dựng ở cấp Module hoặc cấp Form: Nếu hàm được bố trí trong Module thì cĩ thể gọi sử dụng bất kỳ ở mọi thủ tục, hàm khác trong Form kể cả các thủ tục, hàm viết trong các Module khác(trừ trường hợp hàm Private là bị “che”). Nếu hàm được bố trí trong Form thì nĩ chỉ được gọi sử dụng trong các thủ tục, hàm của Form đĩ mà thơi. Cách xây dựng một hàm tương tự như xây dựng thủ tục dùng chung. 2.4. Gọi hàm Hàm do ta tự xây dựng được sử dụng như các hàm xây dựng sẵn bởi hệ thống. Nĩ được hiểu như thực hiện một phép tốn. Để gọi thực hiện hàm, chúng ta thấy thơng thường một hàm khi được sử dụng sẽ thuộc vào những dạng sau: Tính giá trị và gán cho biến. Biến = (thamsố1, thamsố2, ) Tham gia vào một biểu thức tính tốn. Biến = Biểu thức cĩ chứa hàm Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 48
  24. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Trường hợp cần gọi thực hiện hàm nhưng khơng cần lấy giá trị trả về chúng ta cĩ thể sử dụng cú pháp cĩ dạng: Call (thamsố1, thamsố2, ) Ví dụ: Public Fuction THU (DD As Date) As String Dim N As Byte, S As String N = WeekDay(DD) Select Case (N) Case 1: S = “Chủ Nhật” Case 2: S = “Thứ Hai” Case 3: S = “Thứ Ba” Case 4: S = “Thứ Tư” Case 5: S = “Thứ Năm” Case 6: S = “Thứ Sáu” Case 7: S = “Thứ Bảy” End Select THU = S End Fuction Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 49
  25. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Hàm trên là hàm “cơng cộng” cho mọi thủ tục, hàm khác; Hàm thực hiện tính thứ của một Date và cho ra một chuỗi cho biết tham số Date là ngày thứ mấy trong tuần. ta thực hiện gọi hàm trên như sau: DayofWeek = THU(#1/198#) (DayofWeek = “Thứ Tư” ngày 1/1/98 là ngày thứ tư) 3. Sự kiện 3.1. Giới thiệu Sự kiện là các tình huống xảy ra trên các đối tượng khi chương trình chạy. Visual Basic cho phép ta cĩ thể lập trình để xử lý, đáp ứng sự kiện xảy ra một cách tức thời. Các đối tượng khác nhau sẽ cĩ những sự kiện khác nhau. Trong quá trình lập trình cần quan tâm đến các sự kiện cĩ thể xẩy ra và tìm cách đáp ứng chúng. 3.2. Các sự kiện của đối tượng Sự kiện Active: sự kiện xảy ra khi Form bắt đầu trở thành cửa sổ hoạt động. Áp dụng cho: Form, MDI Form. Sự kiện Click: sự kiện xảy ra khi ta Click trong Form hoặc trong Control. Áp dụng cho: CheckBox, CommandButton, ComboBox, DirListBox, FileListBox, Form, Frame, Image, Label, ListBox, PictureBox, TextBox. Sự kiện DblClick: sự kiện xảy ra khi ta Double Click trong Form hoặc trong Control. Áp dụng cho: ComboBox, FileListBox, Form, Frame, Image, Label, ListBox, OLE, OptionButton, PictureBox, TextBox. Sự kiện DeActive: sự kiện xảy ra khi Form biến mất khỏi màn hình (Form được đĩng lại và khơng phải là ẩn Form bởi phương thức Hide). Áp dụng cho: Form, MDI Form. Sự kiện DragDrop: sự kiện xảy ra khi thực hiện thao tác “rê” và thả một Control trên Form. Áp dụng cho: CheckBox, ComboBox, CommandButton, DirListBox, DriveListBox, FileListBox, Form, MDI Form, Frame, Hscrollbar, Vscrollbar, Image, Label, ListBox, OptionButton, PictureBox, TextBox. Sự kiện DragOver: sự kiện xảy ra khi thực hiện thao tác “rê” và thả một Control trên một Control khác. Áp dụng cho: CheckBox, ComboBox, CommandButton, DirListBox, DriveListBox, FileListBox, Form, MDI Form, Frame, Hscrollbar, Vscrollbar, Image, Label, ListBox, OptionButton, PictureBox, TextBox. Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 50
  26. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Sự kiện GotFocus: sự kiện xảy ra khi Form hoặc Control cĩ tiêu điểm hoạt động (cĩ con trỏ). Áp dụng cho: CheckBox, ComboBox, CommandButton, DirListBox, DriveListBox, FileListBox, Form, Hscrollbar, Vscrollbar, ListBox, OptionButton, PictureBox, TextBox. Sự kiện Initialize: sự kiện xảy ra trong khi ta tạo một Form mới bằng hàm CreateObject. Áp dụng cho: Form, MDI Form. Sự kiện KeyDown: sự kiện xảy ra khi ta nhấn phím trên Form hoặc trên Control (nếu nhấn khơng nhả thì sự kiện KeyDown lập lại nhiều lần). Áp dụng cho: CheckBox, ComboBox, CommandButton, DirListBox, DriveListBox, FileListBox, Form, Hscrollbar, Vscrollbar, ListBox, OptionButton, PictureBox, TextBox. Sự kiện KeyPress: sự kiện xảy ra khi ta nhấn và nhả phím trên Form hoặc trên Control. Áp dụng cho: CheckBox, ComboBox, CommandButton, DirListBox, DriveListBox, FileListBox, Form, Hscrollbar, Vscrollbar, ListBox, OptionButton, PictureBox, TextBox. Sự kiện KeyUp: sự kiện xảy ra khi nhả một phím vừa nhấn. Áp dụng cho: CheckBox, ComboBox, CommandButton, DirListBox, DriveListBox, FileListBox, Form, Hscrollbar, Vscrollbar, ListBox, OptionButton, PictureBox, TextBox. Sự kiện LinkClose: sự kiện xảy ra khi quá trình DDE (Dynamic Data Exchange) kết thúc. Áp dụng cho: Form, MDI Form, Label, PictureBox, TextBox. Sự kiện LinkError: sự kiện xảy ra khi quá trình DDE xảy ra lỗi. Áp dụng cho: Form, MDI Form, Label, PictureBox, TextBox. Sự kiện LinkExecute: sự kiện xảy ra khi một lệnh được gởi đến ứng dụng đích trong quá trình DDE. Áp dụng cho: Form, MDI Form. Sự kiện LinkOpen: sự kiện xảy ra khi quá trình DDE được khởi động. Áp dụng cho: Form, MDI Form, Label, PictureBox, TextBox. Sự kiện Load: sự kiện xảy ra khi Form đã được nạp và thể hiện trên màn hình. Áp dụng cho: Form, MDI Form. Sự kiện LostFocus: sự kiện xảy ra khi Form hoặc Control vừa mất con trỏ (Form, Control khác nhận con trỏ). Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 51
  27. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Áp dụng cho: CheckBox, ComboBox, CommandButton, DirListBox, DriveListBox, FileListBox, Form, Hscrollbar, Vscrollbar, ListBox, OptionButton, PictureBox, TextBox. Sự kiện Unload: sự kiện xảy ra khi Form được gỡ bỏ khỏi màn hình. Ta cĩ thể ngắt sự kiện này bằng cách gán tham số Cancel = -1. Áp dụng cho: Form, MDI Form. Sự kiện Terminate: sự kiện xảy ra khi mọi tham chiếu đến Form được giải phĩng khỏi vùng nhớ. Sự kiện này xảy ra sau sự kiện Unload. Áp dụng cho: Form, MDI Form. Sự kiện Resize: sự kiện xảy ra khi Form, PictureBox hiện lần đầu tiên hoặc bị thay đổi kích thước. Áp dụng cho: Form, MDI Form, PictureBox. Sự kiện Paint: sự kiện xảy ra khi một phần trên Form hoặc tồn bộ Form hoặc PictureBox bị thay đổi nội dung. Áp dụng cho: Form, PictureBox. Sự kiện QueryUnload: sự kiện xảy ra trước khi ứng dụng kết thúc và cửa sổ Form chưa đĩng. Sự kiện này xảy ra trước sự kiện Unload. Ta cĩ thể ngắt sự kiện này bằng cách gán tham số Cancel một giá trị <>0. Áp dụng cho: Form, MDI Form. Sự kiện MouseDown: sự kiện xảy ra khi ta Click nút chuột bất kỳ trên Form hoặc Control. Áp dụng cho: CheckBox, CommandButton, DirListBox, FileListBox, Form, Frame, Image, Label, ListBox, MDI Form, OptionButton, PictureBox, TextBox. Sự kiện MouseUp: sự kiện xảy ra khi ta nhả nút chuột đã nhấn. Áp dụng cho: CheckBox, CommandButton, DirListBox, FileListBox, Form, Frame, Image, Label, ListBox, MDI Form, OptionButton, PictureBox, TextBox. Sự kiện MouseMove: sự kiện xảy ra khi ta rê trỏ chuột trên Form hoặc trên Control. Áp dụng cho: CheckBox, CommandButton, DirListBox, FileListBox, Form, Frame, Image, Label, ListBox, MDI Form, OptionButton, PictureBox, TextBox. Sự kiện Change: sự kiện xảy ra khi ta thay đổi dữ liệu trên Control. Áp dụng cho: ComboBox, DirListBox, DriveListBox, Hscrollbar, Vscrollbar, Label, PictureBox, TextBox. Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 52
  28. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Sự kiện PartternChange: sự kiện xảy ra khi thuộc tính Parttern của FileListBox bị thay đổi. Áp dụng cho: FileListBox. Sự kiện PathChange: sự kiện xảy ra khi thuộc tính Path của FileListBox bị thay đổi. Áp dụng cho: FileListBox. Sự kiện Scroll: sự kiện xảy ra khi người sử dụng thay đổi “con chạy” trên thanh cuộn. Áp dụng cho: Hscrollbar, Vscrollbar. Sự kiện Timer: sự kiện một khoảng thời gian (theo thuộc tính Interval) trơi qua. Áp dụng cho: Timer. Sự kiện Update: sự kiện xảy ra khi dữ liệu trong OLE bị thay đổi. Áp dụng cho: OLE. Sự kiện LinkNotify: sự kiện xảy ra khi chương trình ứng dụng, Form, Control thực hiện thay đổi dữ liệu trong quá trình DDE nếu thuộc tính LinkMode của Control được quy định là 3. Áp dụng cho: Label, PictureBox, TextBox. 4. Truyền tham số Một đơn vị chương trình con dù là hàm hay thủ tục cũng thường cần được truyền vào những giá trị cần thiết để thực hiện. Việc truyền các giá trị cần thiết khi gọi thực hiện một chương trình con như vậy gọi là truyền tham số. Giống như các ngơn ngữ lập trình khác, truyền tham số trong VB cũng cĩ hai loại là: Truyền tham trị Truyền tham biến 4.1. Truyền tham trị Trong cách truyền tham trị, chỉ cĩ bản sao của tham số thực được truyền cho tham số hình thức. Khi ấy mọi thay đổi giá trị của tham số hình thức thực chất chỉ ảnh hưởng đến bản sao được truyền chứ khơng thay đổi giá trị của tham số thực. Để truyền tham số theo dạng trị chúng ta phải dùng từ khố ByVal trước khai báo các tham số hình thức tương ứng. Ví dụ hàm So_nto() dưới đây sẽ nhận vào một số nguyên thơng qua tham số hình thức m, kiểm tra xem m cĩ phải là số nguyên tố hay khơng và trả về giá trị True hay False tương ứng. Tham số hình thức m được khai báo ByVal nên việc truyền tham số khi sử dụng hàm So_nto() sẽ theo dạng truyền tham trị. Function Songuyento(ByVal m As Long) As Boolean Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 53
  29. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Dim i As Integer, n As Integer If m 0 co phai la so nguyen to If m = 1 Then Songuyento = False Else n = m \ 2 For i = 2 To n If (m Mod i = 0) Then Exit For Next If i 0 co phai la so nguyen to Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 54
  30. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin If m = 1 Then Songuyento = False Else n = m \ 2 For i = 2 To n If (m Mod i = 0) Then Exit For Next If i <= n Then Songuyento = False Else Songuyento = True End If End Function Khi đĩ, chúng ta cĩ thể kiểm tra một giá trị k cĩ phải số nguyên tố hay khơng như sau: Dim k As Long, kt As Boolean, thongbao As String k = -6 kt = Songuyento(k) If kt = True Then thongbao = str(k) & “ la so nguyen to” Else thongbao = str(k) & “ khong la so nguyen to” End If MsgBox thongbao Kết quả thực hiện của các dịng lệnh trên đây sẽ là “6 khong la so nguyen to” thay vì “-6 khong la so nguyen to”. Kết quả này khơng hiển thị đúng giá trị k lúc đầu. Đĩ là vì giá trị tham số thực k đã bị thay đổi trong quá trình thực hiện hàm Songuyento(). Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 55
  31. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin 4.3. Tham số tuỳ chọn Trong thủ tục hay hàm, chúng ta cĩ thể khai báo một tham số là tuỳ chọn hay bắt buộc. Khi một tham số là tuỳ chọn, chúng ta cĩ thể truyền hay khơng truyền giá trị cho nĩ khi gọi thực hiện thủ tục hay hàm. Đoạn chương trình ví dụ tính giá trị phân số sau sẽ minh hoạ việc dùng tham số tuỳ chọn trong VB: Function Phanso(p As Integer, Optional q As Integer) As Single If q = 0 Then Phanso = p Else Phanso = p / q End If End Function ‘Tinh tong hai phan so Dim a As Single, b As Single, tong As Single a = Phanso(3) b = Phanso(2, 3) tong = a + b MsgBox tong Khi khơng được truyền giá trị, tham số tuỳ chọn sẽ cĩ giá trị mặc nhiên của kiểu dữ liệu khai báo. Khi ấy, những tham số tuỳ chọn cĩ kiểu Variant sẽ cĩ giá trị là rỗng. Trong trường hợp này, chúng ta cĩ thể dùng hàm IsMissing() để xác định xem một tham số tuỳ chọn kiểu Variant cĩ được truyền giá trị hay khơng. Ngồi ra, để tránh giá trị rỗng đối với những tham số tuỳ chọn, chúng ta cĩ thể mơ tả giá trị mặc nhiên của tham số tuỳ chọn như trong hàm tính giá trị phân số được định nghĩa lại dưới đây. Function Phanso(p As Integer, Optional q As Integer = 1) As Single Phanso = p / q End Function Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 56
  32. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Chương 6 Thiết Kế BIểU MẫU DÙNG CÁC ĐIềU KHIểN 1. Phân loại điều khiển Cĩ 3 nhĩm điều khiển trong Visual Basic: Các điều khiển nội tại (Intrinsic control). Các điều khiển nội tại luơn chứa sẵn trong hộp cơng cụ (nhãn, khung, nút lệnh, khung ảnh ). Ta khơng thể gỡ bỏ các điều khiển nội tại ra khỏi hộp cơng cụ. Các điều khiển ActiveX tồn tại trong các tập tin độc lập cĩ phần mở rộng .OCX: Đĩ là các điều khiển cĩ thể cĩ trong mọi phiên bản của VB hoặc là các điều khiển chỉ hiện diện trong ấn bản Professional và Enterprise. Mặt khác cịn cĩ rất nhiều điều khiển ActiveX do nhà cung cấp thứ ba cung cấp. Các đối tượng chèn được (Insertable Object): Các đối tượng này cĩ thể là Microsoft Equation 3.0 hoặc bảng tính (Worksheet) của Microsoft Excel Một vài đối tượng kiểu này cho phép ta lập trình với các đối tượng sinh ra từ các ứng dụng khác ngay trong ứng dụng VB. 2. Sử dụng các điều khiển 2.1. Listbox 2.1.1 Khái niệm Điều khiển này hiển thị một danh sách các đề mục mà ở đĩ người dùng cĩ thể chọn lựa một hoặc nhiều đề mục Biểu tượng (Shortcut) trên hộp cơng cụ Điều khiển này hiển thị một danh sách các đề mục mà ở đĩ người dùng cĩ thể chọn lựa một hoặc nhiều đề mục List Box giới thiệu với người dùng một danh sách các lựa chọn. Một cách mặc định, các lựa chọn hiển thị theo chiều dọc trên một cột và bạn cĩ thể thiết lập là hiển thị theo nhiều cột. Nếu số lượng các lựa chọn nhiều và khơng thể hiển thị hết trong danh sách thì một thanh trượt Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 57
  33. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin sẽ tự động xuất hiện trên điều khiển. Dưới đây là một ví dụ về danh sách các lựa chọn đơn cột. 2.1.2 Thuộc tính Name: Đây là tên của danh sách lựa chọn, được sử dụng như một định danh. o MultiSelect: Thuộc tính này cho phép List Box cĩ được phép cĩ nhiều lựa chọn khi thực thi hay khơng? Sort: List Box cĩ sắp xếp hay khơng? o Ngồi ra cịn cĩ một số thuộc tính thơng dụng khác như: Font, Width, Height ListIndex: Vị trí của phần tử được lựa chọn trong List Box. Select( ): cho biết phần tử thứ trong List Box cĩ được chọn hay khơng? 2.1.3 Phương thức AddItem: Thêm một phần tử vào List Box. Cú pháp: .AddIem(Item As String, [Index]) Private Sub Form_Load () List1.AddItem "Germany" List1.AddItem "India" List1.AddItem "France" List1.AddItem "USA" End Sub Người dùng cũng cĩ thể thêm vào một đề mục mới một cách tự động vào bất kỳ thời điểm nào nhằm đáp lại tác động từ phía người sử dụng ứng dụng. Dưới đây là hình ảnh minh họa cho List Box tương ứng với đoạn mã ở trên. Thêm một đề mục mới tại vị trí xác định: để thực hiện cơng việc này ta chỉ cần chỉ ra vị trí cần xen đề mục mới vào. Ví dụ: List1.AddItem "Japan", 0 Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 58
  34. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Thêm mới đề mục tại thời điểm thiết kế: Sử dụng thuộc tính List của điều khiển List Box, ta cĩ thể thêm mới các đề mục và dùng tổ hợp phím CTRL+ENTER để bắt đầu thêm vào đề mục mới trên dịng khác. Khi đã thêm xong danh sách các đề mục, ta cĩ thể sắp xếp lại các đề mục bằng cách sử dụng thuộc tính Sorted và đặt giá trị của thuộc tính này là TRUE. RemoveItem: Xĩa một phần tử ra khỏi List Box. Cú pháp: .RemoveItem Index Tham số Name và Index giống như ở trường hợp thêm vào một đề mục. Clear: Xĩa tất cả các mục trong List Box. Cú pháp .Clear Text: Nhận giá trị từ List Box khi một đề mục được chọn. Chẳng hạn đoạn mã sau đây sẽ cho biết dân số của Canada khi người dùng chọn Canada từ List Box. Private Sub List1_Click () If List1.Text = "Canada" Then Text1.Text = "Canada has 24 million people." End If End Sub List: truy xuất nội dung phần tử bất kỳ trong List Box. Thuộc tính này cho phép truy xuất tất cả các đề mục của điều khiển List Box. Thuộc tính này chứa một mảng và mỗi đề mục là một phần tử của mảng. Mỗi đề mục được hiển thị dưới dạng chuỗi, để tham chiếu đến một đề mục trong danh sách, sử dụng cú pháp sau: .List(Index) Ví dụ: Text1.Text = List1.List(2) 2.1.4 Sự kiện Click & Double Click: Xảy ra khi người sử dụng nhấp chuột (hay nhấp đúp) vào List Box. Thơng thường người sử dụng sẽ thiết kế một nút lệnh đi kèm để nhận về giá trị do người dùng chọn. Khi đĩ cơng việc thực hiện sau khi nút lệnh được chọn sẽ phụ thuộc vào giá trị người dùng chọn từ List Box. Double Click lên một đề mục trong danh sách cũng cĩ kết quả tương tự như việc chọn một đề mục trong danh sách rồi ấn lên nút lệnh. Để thực hiện cơng việc như trên trong sự kiện Double Click của List Box ta sẽ gọi đến sự kiện Click của nút lệnh. Private Sub List1_DblClick () Command1_Click Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 59
  35. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin End Sub Hoặc ta cĩ thể thiết đặt giá trị True cho thuộc tính Value của nút lệnh. Private Sub List1_DblClick () mmand1.Value = True End Sub 2.2. Combobox Điều khiển Combo Box cĩ thể được xem là tích hợp giữa hai điều khiển Text Box và List Box. Người dùng cĩ thể chọn một đề mục bằng cách đánh chuỗi văn bản vào Combo Box hoặc chọn một đề mục trong danh sách. Điểm khác nhau cơ bản giữa Combo Box và List Box là điều khiển Combo chỉ gợi ý (hay đề nghị) các lựa chọn trong khi đĩ điều khiển List thì giới hạn các đề mục nhập vào tức là người dùng chỉ cĩ thể chọn những đề mục cĩ trong danh sách. Điều khiển Combo chứa cả ơ nhập liệu nên người dùng cĩ thể đưa vào một đề mục khơng cĩ sẵn trong danh sách. Biểu tượng (Shortcut) trên hộp cơng cụ Các dạng của điều khiển Combo Box: Cĩ tất cả 3 dạng của điều khiển Combo Box. Ta cĩ thể chọn dạng của Combo tại thời điểm thiết kế bằng cách dùng giá trị hoặc hằng chuỗi của VB. Kiểu Giá trị Hằng Drop-down Combo Box 0 VbComboDropDown Simple Combo Box 1 VbComboSimple Drop-down List Box 2 vbComboDropDownList - Drop-down Combo Box: Đây là dạng mặc nhiên của Combo. Người dùng cĩ thể nhập vào trực tiếp hoặc chọn từ danh sách các đề mục. - Simple Combo Box: Ta cĩ thể hiển thị nhiều đề mục cùng một lúc. Để hiển thị tất cả các đề mục, bạn cần thiết kế Combo đủ lớn. Một thanh trượt sẽ xuất hiện khi cịn đề mục chưa được hiển thị hết. Ở dạng này, người dùng vẫn cĩ thể nhập một chuỗi vào trực tiếp hoặc chọn từ danh sách các đề mục. - Drop down List Box: Dạng này rất giống như một List box. Một điểm khác biệt đĩ là các đề mục sẽ khơng hiển thị đến khi nào người dùng Click lên mũi tên phía phải của điều khiển. Điểm khác biệt với dạng thứ 2 đĩ là người dùng khơng thể nhập vào trực tiếp một chuỗi khơng cĩ trong danh sách. Các thuộc tính cũng như các phương thức áp dụng trên Combo Box giống như trên List Box. Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 60
  36. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin 2.3. Checkbox 2.3.1 Khái niệm Đây là điều khiển hiển thị dấu nếu như được chọn và dấu bị xố nếu như khơng chọn. Dùng điều khiển Check Box để nhận thơng tin từ người dùng theo dạng Yes/No hoặc True/False. Ta cũng cĩ thể dùng nhiều điều khiển trong một nhĩm để hiển thị nhiều khả năng lựa chọn trong khi chỉ cĩ một được chọn. Khi Check Box được chọn, nĩ cĩ giá trị 1 và ngược lại cĩ giá trị 0. Biểu tượng (Shortcut) trên hộp cơng cụ 2.3.2 Thuộc tính Name: thuộc tính tên. Value: Giá trị hiện thời trên Check Box. Cĩ thể nhận các giá trị: vbChecked, vbUnchecked, vbGrayed. 2.3.3 Sự kiện Click: Xảy ra khi người sử dụng nhấp chuột trên Check Box. 2.4. Option Button 2.4.1 Khái niệm Cơng dụng của điều khiển Option button cũng tương tự như điều khiển Check Box. Điểm khác nhau chủ yếu giữa hai loại điều khiển này đĩ là: Các Option Button của cùng một nhĩm tại mỗi thời điểm chỉ cĩ một điều khiển nhất định được chọn. Biểu tượng (Shortcut) trên hộp cơng cụ Cách sử dụng Option button cũng tương tự như của Check Box. Tạo nhĩm Option Button Tất cả các Option button đặt trực tiếp trên biểu mẫu (cĩ nghĩa là khơng thuộc vào Frame hoặc Picture Box) sẽ được xem như là một nhĩm. Nếu người dùng muốn tạo một nhĩm các Option button khác thì bắt buộc phải đặt chúng bên trong phạm vi của một Frame hoặc Picture box. 2.4.2 Thuộc tính Name: thuộc tính tên của điều khiển Option Button. Value: Giá trị hiện thời trên Option Button. Cĩ thể nhận các giá trị: True & False. 2.4.3 Sự kiện Click: Xảy ra khi người sử dụng nhấp chuột trên Option Button. Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 61
  37. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin 2.5. Timer 2.5.1 Khái niệm Điều khiển Timer đáp ứng lại sự trơi đi của thời gian. Nĩ độc lập với người sử dụng và ta cĩ thể lập trình để thực hiện một cơng việc nào đĩ cứ sau một khoảng thời gian đều nhau. Biểu tượng (shortcut) trên hộp cơng cụ Việc đưa một điều khiển Timer vào trong một biểu mẫu cũng tương tự như những điều khiển khác. Ở đây, ta chỉ cĩ thể quan sát được vị trí của điều khiển Timer tại giai đoạn thiết kế, khi chạy ứng dụng điều khiển Timer coi như khơng cĩ thể hiện trên biểu mẫu. 2.5.2 Thuộc tính Name: tên của điều khiển Timer. Interval: Đây là thuộc tính chỉ rõ số ms giữa hai sự kiện kế tiếp nhau. Trừ khi nĩ bị vơ hiệu hĩa, mỗi điều khiển Timer sẽ luơn nhận được một sự kiện sau một khoảng thời gian đều nhau. Thuộc tính Interval nhận giá trị trong khoảng 0 64.767 ms cĩ nghĩa là khoảng thời gian dài nhất giữa hai sự kiện chỉ cĩ thể là khoảng một phút (64.8 giây). Enabled: nếu giá trị là True nghĩa là điều khiển Timer được kích hoạt và ngược lại. 2.5.3 Sự kiện Timer: xảy ra mỗi khi đến thời gian một sự kiện được thực hiện (xác định trong thuộc tính Interval). 2.5.4 Sử dụng điều khiển Timer Khởi tạo một điều khiển Timer: Nếu lập trình viên muốn điều khiển Timer hoạt động ngay tại thời điểm biểu mẫu chứa nĩ được nạp thì đặt thuộc tính Enable là TRUE hoặc cĩ thể dùng một sự kiện nào đĩ từ bên ngồi để kích hoạt điều khiển Timer. Lập trình đáp ứng sự kiện trả về từ điều khiển Timer: Ta sẽ đưa mã lệnh của cơng viêc cần thực hiện vào trong sự kiện Timer của điều khiển Timer. Sau đây là ví dụ khởi tạo một đồng hồ số nhờ vào điều khiển Timer. Private Sub Timer1_Timer() If Label1.Caption <> CStr(Time) Then Label1.Caption = Time End If End Sub Thuộc tính Interval được thiết lập là 500 (tức 0.5 giây). Điều khiển Timer cịn hữu ích trong việc tính tốn thời gian cho một cơng việc nào đĩ, đến một thời điểm nào đĩ thì ta sẽ khởi tạo một cơng việc mới hoặc ngưng một cơng việc khơng cịn cần nữa. Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 62
  38. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin 2.6. Hscroll 2.6.1 Khái niệm Là điều khiển cĩ thanh trượt cho phép cuộn ngang và người dùng cĩ thể sử dụng HScrollBar như một thiết bị nhập hoặc một thiết bị chỉ định cho số lượng hoặc vận tốc. Ví dụ ta thiết kế volume cho một trị chơi trên máy tính hoặc để diễn đạt cĩ bao nhiêu thời gian trơi qua trong một khoảng định thời nhất định. Biểu tượng (Shortcut) trên hộp cơng cụ Khi người dùng sử dụng Scroll Bar như một thiết bị chỉ định số lượng thì người dùng cần xác định giá trị cho hai thuộc tính Max và Min để đưa ra khoảng thay đổi thích hợp. 2.6.2 Thuộc tính Name: Tên của thanh cuộn. Min: Là giá trị nhỏ nhất trên thanh cuộn. Max: Giá trị lớn nhất của thanh cuộn. Large change: Thuộc tính này dùng để xác định khoảng thay đổi khi người dùng ấn chuột lên Hscrollbar. Small change: Thuộc tính này dùng để xác định khoảng thay đổi khi người dùng ấn lên mũi tên phía cuối thanh cuộn. Value: Thuộc tính này trả về giá trị tại một thời điểm của thanh cuộn nằm trong khoảng giá trị [Min, Max] mà người dùng đã xác định. 2.6.3 Sự kiện Change: Xảy ra mỗi khi HScrollBar thay đổi giá trị. Scroll: Xảy ra mỗi khi ta di chuyển con trỏ thanh cuộn. Private Sub HScroll1_Change() Text1.FontSize = HScroll1.Value End Sub 2.7. Vscroll Biểu tượng (Shortcut) trên hộp cơng cụ Các thuộc tính và cơng dụng của VScrollBar cũng tương tự như HScrollBar. 2.8. Picture Box 2.8.1 Khái niệm Điều khiển Picture Box cho phép người dùng hiển thị hình ảnh lên một biểu mẫu. Biểu tượng (Shortcut) trên hộp cơng cụ Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 63
  39. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin 2.8.2 Thuộc tính Name: tên của điều khiển Picture Box. Picture: Đây là thuộc tính cho phép xác định hình ảnh nào sẽ được hiển thị bên trong Picture box. Bao gồm tên tập tin hình ảnh và cả đường dẫn nếu cĩ. Để hiển thị hoặc thay thế một hình ảnh tại thời điểm chạy chương trình thì người dùng cĩ thể dùng phương thức LoadPicture để đặt lại giá trị của thuộc tính Picture với cú pháp như trong ví dụ dưới đây: picMain.Picture = LoadPicture("NEW.JPG") Autosize: Khi giá trị của thuộc tính này là TRUE thì điều khiển Picture box sẽ tự động thay đổi kích thước cho phù hợp với hình ảnh được hiển thị. Ta nên cẩn thận khi sử dụng thuộc tính này vì khi điều khiển Picture Box thay đổi kích thước, nĩ khơng quan tâm đến vị trí của các điều khiển khác. 2.8.3 Sự kiện Mouse Down: Xảy ra khi người sử dụng chương trình nhấn giữ phím chuột. Mouse Move: Xảy ra khi người sử dụng chương trình di chuyển chuột. Mouse Up: Xảy ra khi người sử dụng chương trình thả phím chuột. Lưu ý : Điều khiển Picture Box cĩ thể được dùng như một vật chứa các điều khiển khác (tương tự như một Frame). Ngồi ra người dùng cũng cĩ thể sử dụng Picture Box như một khung vẽ hoặc như một khung soạn thảo và cĩ thể in được nội dung trên đĩ. 2.9. Image 2.9.1 Khái niệm Điều khiển Image dùng để hiển thị một hình ảnh. Các dạng cĩ thể là Bitmap, Icon, Metafile, Jpeg, Gif. Tuy nhiên khác với điều khiển Picture Box điều khiển Image sử dụng tài nguyên hệ thống ít và cũng nạp ảnh nhanh hơn; hơn nữa số lượng thuộc tính và phương thức áp dụng ít hơn điều khiển Picture box. Biểu tượng Shortcut trên hộp cơng cụ 2.9.2 Thuộc tính Name: tên của điều khiển Image. Picture: Đây là thuộc tính cho phép xác định hình ảnh nào sẽ được hiển thị bên trong điều khiển Image. Bao gồm tên tập tin hình ảnh và cả đường dẫn nếu cĩ. Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 64
  40. Trường Đại học Cơng Nghệ Sài Gịn Khoa Cơng Nghệ Thơng Tin Để hiển thị hoặc thay thế một hình ảnh tại thời điểm chạy chương trình thì người dùng cĩ thể dùng phương thức LoadPicture để đặt lại giá trị của thuộc tính Picture với cú pháp như trong ví dụ dưới đây: imgMain.Picture = LoadPicture("NEW.JPG") Stretch: Khi giá trị của thuộc tính này là TRUE thì điều khiển Image sẽ tự động thay đổi kích thước cho phù hợp với hình ảnh được hiển thị. 2.9.3 Sự kiện Mouse Down: Xảy ra khi người sử dụng chương trình nhấn giữ phím chuột. Mouse Move: Xảy ra khi người sử dụng chương trình di chuyển chuột. Mouse Up: Xảy ra khi người sử dụng chương trình thả phím chuột. 2.10. Shape Biểu tượng Shortcut trên hộp cơng cụ Điều khiển Shape dùng để vẽ các hình dạng như: hình chữ nhật, hình vuơng, oval, hình trịn, hình chữ nhật gĩc trịn hoặc hình vuơng gĩc trịn. Thuộc tính Shape cho phép người dùng chọn 1 trong 6 dạng như đã nêu ở trên. Sau đây là bảng giá trị của thuộc tính này Hình dạng Giá trị Hằng Rectangle 0 vbShapeRectangle Square 1 vbShapeSquare Oval 2 vbShapeOval Circle 3 vbShapeCircle Rounded Rectangle 4 vbShapeRoundedRectangle Rounded Square 5 vbShapeRoundedSquare Giáo trình Lập trình căn bản – dành cho hệ TCCN Trang 65