Phát triển ứng dụng với Visual Basic 6

pdf 96 trang phuongnguyen 6960
Bạn đang xem 20 trang mẫu của tài liệu "Phát triển ứng dụng với Visual Basic 6", để 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:

  • pdfphat_trien_ung_dung_voi_visual_basic_6.pdf

Nội dung text: Phát triển ứng dụng với Visual Basic 6

  1. Phát triển ứng dụng với Visual Basic 6 Hà nội - 2003 1
  2. Giíi thiÖu vÒ VB6 1 Giới thiệu về Visual Basic 6 • Visual Basic là gì ? • Các phiên bản khác nhau của VB • Cài đặt VB6 • Tìm kiếm trợ giúp khi sử dụng VB6 2
  3. Giíi thiÖu vÒ VB6 1.1 Visual Basic là gì? Micrsoft Visual Basic (viết tắt là VB) là cách dễ dàng nhất và nhanh nhất để xây dựng 1 chương trình ứng dụng chạy trên nền Microsoft Windows. VB cũng cấp sẵn 1 tập đầy đủ các công cụ để làm nhanh, đơn giản quá trình phát triển ứng dụng. “Visual” chỉ cách tạo giao diện người dùng đồ hoạ (GUI – graphic user interface) một cách trực quan. Thay vì phải viết rất nhiều dòng mã lệnh để mô tả hình dáng và vị trí của các phần tử tạo nên giao diện, ta chỉ cần đặt những đối tượng đã được xây dựng sẵn lên màn hình (như cách vẽ một bức tranh bằng chương trình Paint). “Basic” chỉ tới ngôn ngữ lập trình BASIC (Beginners All-Purpose Symbolic Intstruction Code), một trong những ngôn ngữ lập trình nổi tiếng. VB phát triển từ ngôn ngữ BASIC và hiện chứa rất nhiều câu lệnh, hàm, từ khoá, mà nhiều trong số chúng có liên quan trực tiếp tới GUI của Windows. Người mới lập trình có thể tạo những chương trình hữu ích bằng cách học sử dụng một số ít các câu lệnh. Còn những người lập trình chuyên nghiệp có thể sử dụng VB để thực hiện bất kỳ công việc nào mà các ngôn ngữ lập trình cho Windows khác có thể làm được. Ngôn ngữ lập trình Visual Basic không chỉ duy nhất được sử dụng trong xây dựng chương trình bằng sản phẩm Microsoft Visual Basic. Phiên bản VB cho lập trình các ứng dụng (VBA) có trong Microsoft Excel, Microsoft Access, VBScript là ngôn ngữ script được sử dụng rộng rãi trong các ứng dụng Web. 1.2 Các bản Visual Basic (Visual Basic Editions) Visual Basic được bán ở 3 bản khác nhau, phù hợp cho những yêu cầu phát triển khác nhau: • Bản Visual Basic Learning cho phép lập trình viên xây dựng các ứng dụng chạy trên MS Windows 95/98/NT/2000. Bản này chứa đầy đủ các điều khiển cơ sở (intrinsic control), cùng với các điều khiển lưới (grid), tab, và điều khiển gắn-dữ liệu. Tài liệu đi kèm gồm có đĩa CDROM chứa “Learn VB Now” và “Microsoft Developer Network (MSDN) Library” 3
  4. Giíi thiÖu vÒ VB6 • Bản Professional chứa tất cả các tính năng của bản Visual Basic Learning, cùng với: ActiveX control, Internet Information Server Application Designer, tích hợp với Visual Database Tools, Data Environment, Active Data Objects, Dynamic HTML Page Designer. Tài liệu đi kèm với bản Professional chứa sách “Visual Studio Professional Features” cùng với thư viện tài liệu “Microsoft Developer Network“. • Bản Enterprise cho phép những lập trình viên chuyên nghiệp tạo các ứng dụng mạnh, phân tán. Nó gồm các tính năng của bản Professional, cùng với công cụ cho bộ “Back Office” như: SQL Server, Microsoft Transaction Server, Internet Information Server, Visual SourceSafe, SNA Server, Tài liệu của bản Enterprise gồm sách “Visual Studio Enterprise Features” cùng với thư viện tài liệu “Microsoft Developer Network”. Phiên bản Visual Basic (Visual Basic Versions) Phiên bản Visual Basic hiện hành là Visual Basic 6.0 (Các phiên bản thông dụng trước đó là 3.0, 4.0 và 5.0). Phiên bản VB 6.0 ra đời năm 1998 trong bộ Visual Studio 6.0. Phiên bản VB 6.0 có nhiều đặc điểm mới, tăng cường so với các phiên bản VB trước đó: • Truy nhập cơ sở dữ liệu (ADO, Data Enviroment, ) • Hỗ trợ Internet (hỗ trợ IIS, DHTML, ) • Thêm nhiều control mới; Cho phép tạo thêm nhiều loại control mới. • 4
  5. Giíi thiÖu vÒ VB6 1.3 Cài đặt VB6 Yêu cầu phần cứng Để chạy Visual Basic, máy tính của ta cần tối thiểu: • Hệ điều hành: Microsoft Windows 95/98/ME/2000/NT (nên là Service Pack 3 trở lên). • Bộ vi xử lý: 486DX/66 MHz hay nhanh hơn • 1 ổ đĩa CD-ROM • Màn hình VGA hay với độ phân giải cao hơn • Bộ nhớ 16 MB RAM với Windows 95/98; 32 MB RAM với Windows NT Workstation. • Chuột hay thiết bị tương tự • Đĩa cứng: Tuỳ thuộc vào cài đặt chi tiết Cài đặt VB 6.0: • Cài đặt VB6 • Cài đặt tài liệu MSDN 5
  6. Giíi thiÖu vÒ VB6 1.4 Tìm kiếm trợ giúp khi sử dụng VB6 Visual Basic Help được gọi bằng cách chọn “Contents” từ menu Help; khi đó Thư viện MSDN sẽ được chạy. Tại đó có tất cả mọi chủ đề cần cho lập trình với VB. Contetxt-Sensitive Help (trợ giúp ngữ cảnh) được gọi bằng nhấn F1 bất cứ tại thời điểm cần trợ giúp Code Editor (Bộ soạn thảo mã lệnh) tự động cung cấp những thông tin cần thiết khi mã lệnh được đưa vào. Sample Applications (Ví dụ mẫu) minh hoạ các tính năng của VB, cách sử dụng chúng có trên đĩa CDROM MSDN tại thư mục \Disk 1\ Samples Microsoft Visual Basic Web site chứa thông tin cập nhật nhất về VB. 6
  7. Ph¸t triÓn øng dông víi VB6 2 Phát triển một ứng dụng với Visual Basic • Một số khái niệm cơ bản trong lập trình Windows • Mô hình hướng sự kiện • Môi trường phát triển tích hợp • Các bước cơ bản để xây dựng một chương trình ứng dụng • Tạo mới, mở, lưu trữ 1 project 7
  8. Ph¸t triÓn øng dông víi VB6 2.1 Một số khái niệm cơ bản trong lập trình Windows VB được xây dựng như là môi trường giúp phát triển các ứng dụng cho MS Windows. Lập trình với Windows gồm 3 khái niệm cơ sở : window (cửa sổ), event (sự kiện) và message (thông điệp). Cửa sổ đơn giản là 1 khu vực hình chữ nhật. Chúng ta đã biết nhiều loại cửa sổ khác nhau: cửa sổ chương trình Explorer, cửa sổ 1 tài liệu trong chương trình Windword, 1 hộp thông báo. Ngoài ra còn có nhiều loại cửa sổ khác như: một nút lệnh, một hộp soạn thảo, nút tuỳ chọn, thanh thực đơn. Hệ điều hành MS Windows quản lý các cửa sổ qua số hiệu duy nhất của mỗi cửa sổ (window handle hay hWnd). Hệ điều hành quản lý, theo dõi từng cửa sổ đó để nhận hay gửi các sự kiện. Sự kiện có thể là hành động của người sử dụng như nhấn chuột, ấn phím, hay phát sinh từ các điều khiển được lập trình, hay thậm chí là kết quả của những hành động của cửa sổ khác. Mỗi khi có 1 sự kiện xảy ra, nó gửi thông điệp tới cho hệ điều hành. HĐH xử lý thông điệp đó và truyền thông điệp đó tới tất cả các cửa sổ. Mỗi cửa sổ sẽ thực hiện hành động phù hợp của riêng mình để xử lý thông điệp. Xử lý với tất các kết hợp của cửa sổ, sự kiện, thông điệp rất phức tạp. VB giúp chúng ta tránh với việc xử lý chúng ở mức cơ sở và nhờ đó giúp chúng ta xây dựng ứng dụng cho MS Windows dễ dàng hơn. 8
  9. Ph¸t triÓn øng dông víi VB6 2.2 Mô hình hướng sự kiện Mô hình thủ tục truyền thống: - Trình tự thực hiện được định trước - Chương trình quyết định phần mã lệnh nào được chạy và theo thứ tự nào. Mô hình hướng sự kiện (event-driven model) - Trình tự thực hiện không được định trước - Những phần mã lệnh khác nhau được chạy để đáp ứng những sự kiện. 9
  10. Ph¸t triÓn øng dông víi VB6 2.3 Phát triển tương tác Môi trường phát triển truyền thống - Viết mã lệnh - Biên dịch mã lệnh - Kiểm tra mã lệnh VB sử dụng cách tiếp cận phát triển tương tác. Trong môi trường phát triển tương tác: - Mã lệnh được dịch cú pháp ngay khi được gõ vào - Mã lệnh được biên dịch ngay khi được gõ vào - Hồi âm lập tức cho lập trình viên 10
  11. Ph¸t triÓn øng dông víi VB6 2.4 Môi trường phát triển tích hợp Sau khi khởi động, chúng ta sẽ làm việc trong môi trường phát triển tích hợp gồm: View\chọn các thanh công cụ. • Menu Bar: Hiển thị các lệnh khi làm việc với VB • Context Menu: Chứa phím tắt tới các lệnh thường gọi gắn với đối tượng hiện đang làm việc. Hãy kích chuột phải để làm xuất hiện Context Menu • Toolbars: Cho phép truy nhập nhanh tới các lệnh thường sử dụng trong môi trường lập trình. Hãy sử dụng View trên menu bar để hiển thị/che dấu một toolbar. • Toolbox: là hộp công cụ chứa các điều khiển dùng trong khi thiết kế 1 form • Project Explorer Window: Liệt kê form và module có trong dự án (project) xây dựng ứng dụng. Ví dụ: Chương trình quản lý Sinh Viên: Form Nhập sinh viên, Form nhập môn học, • Properties Window: cửa sổ thuộc tính liệt kê các thuộc tính của form hay của điều khiển (control) được chọn. • Object Browser: Liệt kê các đối tượng (object) có trong dự án. • Form Designer: Cửa sổ để thiết kế giao diện cho ứng dụng • Code Editor Window: Nơi cho phép soạn thảo lệnh của chương trình. • Form Layout Window: Cho phép điều chỉnh vị trí của form tương ứng trên màn hình máy tính. • Immediate, Locals, và Watch Windows: Những cửa sổ dùng để gỡ rối khi chạy chương trình. * Giao diện SDI hay MDI SDI (single document interface) và MDI (mutiple document interface) là 2 kiểu giao diện của môi trường phát triển tích hợp của VB. Để chuyển đổi giữa chúng sử dụng: Tools | Options | Advanced ; chọn đánh dấu hay huỷ bỏ tại: 11
  12. Ph¸t triÓn øng dông víi VB6 SDI Development Enviroment 12
  13. Ph¸t triÓn øng dông víi VB6 Một chương trình viết bằng VB có 2 phần: Form và Code. 13
  14. Ph¸t triÓn øng dông víi VB6 2.5 Các bước cơ bản xây dựng chương trình • Tạo giao diện • Đặt giá trị thuộc tính • Viết mã lệnh • Chạy và kiểm tra chương trình 14
  15. Ph¸t triÓn øng dông víi VB6 2.6 Xây dựng một chương trình ví dụ: Hello • Tạo giao diện: gồm 1 form, 1 text box và 1 command button Texbox Command button Để đưa một đối tượng control (điều khiển) lên trên Form có thể thực hiện như sau: Cách 1: - Nhấn chọn điều khiển trên toolbox – trong bài này chọn textbox - Chuyển con trỏ lên form tới vị trí muốn đặt control - Nhấn và kéo chuột để điều chỉnh kích cỡ của control - Thả chuột Cách 2: Nhấn đúp vào đối tượng trên Toolbox khi đó đối tượng sẽ được đưa vào Form. 15
  16. Ph¸t triÓn øng dông víi VB6 16
  17. Ph¸t triÓn øng dông víi VB6 • Thay đổi kích cỡ, di chuyển, khoá 1 control - Để thay đổi kích cỡ: nhấn chọn control, đặt chuột tới góc (phải, dưới) và kéo chuột tới kích cỡ mong muốn. - Để thay đổi vị trí: kéo control tới vị trí bằng chuột, rồi thả chuột. - Để khoá cố định vị trí hoặc bỏ khoá: sử dụng chức năng Format | Lock Controls 17
  18. Ph¸t triÓn øng dông víi VB6 • Đặt giá trị thuộc tính cho control Nhấn chọn control Hiển thị cửa sổ thuộc tính: View \ Properties Chọn thuộc tính cần đặt từ : Properites List Nhập giá trị mới vào cột bên phải Ghi chú: Object box: Danh sách form và các control trên form Sort tabs: Kiểu sắp xếp danh sách các thuộc tính: theo bảng chữ cái (Alphabetic) hay theo phân loại (Categorized) Properties list: Danh sách các thuộc tính gắn với đối tượng được chọn (trên form hay từ object box) 18
  19. Ph¸t triÓn øng dông víi VB6 • Viết mã lệnh - Mở Code Editor bằng cách: Nhấn đúp lên control hoặc chọn View Code từ cửa sổ Project Explorer. - Tạo thủ tục đáp ứng sự kiện + Chọn control từ hộp danh sách bên trái (chứa form và các control) + Chọn tên sự kiện từ hộp bên phải (chứa danh sách sự kiện gắn với đối tượng vừa được chọn) Private Sub Command1_Click () Text1.Text = "Hello, world!" End Sub - Để chuyển đổi hiển thị tất các thủ tục trên cùng 1 cửa sổ và hiển thị mỗi thủ tục tại 1 thời điểm: + Chọn Tools | Options + Thay đổi các giá trị tương ứng trong tab: Editor 19
  20. Ph¸t triÓn øng dông víi VB6 • Chạy chương trình: - Chọn Run | Start hay nhấn F5 hoặc Nút Start để chạy chương trình - Chọn Run | End hoặc nút Stop để dừng chương trình đang chạy - Chọn Run | Break hay nhấn hoặc nút Pause để kết thúc chương trình bất thường 20
  21. Ph¸t triÓn øng dông víi VB6 2.7 Làm việc với Project Một project (dự án) trong Visual Basic thường bao gồm: • Một file dự án quản lý tất các thành phần của chương trình (*.vbp). • Một file cho mỗi form (*.frm). • Một file dạng nhị phân cho mỗi form chứa các thông tin về form và các control (*.frx). • Có thể có 1 file cho mỗi module class (*.cls). • Có thể có 1 file cho mỗi module standard (*.bas). • Có thể có 1 file cho mỗi ActiveX control (.ocx). • Có thể có 1 file tài nguyên (resource file) (*.res). 2.7.1 Project Explorer Là nơi chúng ta tạo mới, thêm vào, loại bỏ các file cho dự án. 21
  22. Ph¸t triÓn øng dông víi VB6 2.7.2 Tạo, mở, lưu trữ một project Bằng cách sử dụng các lệnh sau: Tên lệnh Mô tả New Project Đóng project hiện tại; Tạo 1 project mới. Open Project Đóng project hiện tại; Mở 1 project có sẵn. Save Project Lưu trữ, cập nhật file project, cũng như mọi file thành phần của nó. Save Project As Lưu file project với tên mới được nhập vào. 2.7.3 Đặt tuỳ chọn cho Project Bằng cách sử dụng hội thoại Project Properties, từ mục chọn Project Properties trên thực đơn Project Tuỳ chọn Mô tả Startup Object Form đầu tiên mà Visual Basic sẽ gọi, hay thủ tục đặc biệt Sub Main( ). Project Name Tên dự án, không nên vượt quá 37 kí tự. 22
  23. Ph¸t triÓn øng dông víi VB6 Tên của file trợ giúp gắn với chương trình. Help File Project Help Context Mã ngữ cảnh (context ID). ID Project Description Mô tả chung về dự án. Ngoài những tuỳ chọn trên, mỗi project còn có nhiều tuỳ chọn khác nữa. 23
  24. Form vµ Control 3 Form và Control • Thuộc tính, sự kiện, phương thức • Form • Control: Label, Text box, Check box, Option Group, List/Combo box, • Focus • Tab order (Thứ tự Tab) • Dialog box (hộp hội thoại) 24
  25. Form vµ Control 3.1 Thuộc tính, sự kiện, phương thức Form và control (điều khiển) của Visual Basic là các đối tượng với thuộc tính (property), phương thức (method) và sự kiện (event). Thuộc tính là các đặc điểm qui định đối tượng, phương thức là các hành động và sự kiện là sự đáp ứng tác động gắn với mỗi đối tượng. Quả bóng bay là 1 đối tượng. Nó có các thuộc tính như các thuộc tính trực quan: “độ cao”, “đường kính”, “màu sắc”. Các thuộc tính khác như thuộc tính mô tả trạng thái quả bóng (“căng tròn” hay chưa), hay các thuộc tính khác như thời gian sản xuất. Mọi quả bóng bay đều có đầy đủ tập thuộc tính trên; nhưng với mỗi quả bóng, giá trị cụ thể các thuộc tính đó là khác nhau. Quả bóng bay có sẵn các phương thức hay hành động mà nó có thể thực hiện. Nó có phương thức: “bơm” (hành động bơm hơi vào quả bóng), “xì” (xì hơi chứa bên trong), “bay” (bay lên cao nếu được thả ra). Quả bóng bay cũng có sẵn cách trả lời cho những sự kiện bên ngoài nhất định. Ví dụ: 1 quả bóng sẽ đáp ứng lại sự kiện bị châm thủng bằng cách xì hơi, hay sự kiện được thả ra bằng cách bay cao. Nếu lập trình 1 quả bóng, đoạn mã lệnh trong Visual Basic sẽ có dạng sau: Balloon.Color = Red Balloon.Diameter = 10 Balloon.Inflated = True 25
  26. Form vµ Control Chú ý cú pháp: đối tượng (Balloon) theo sau bởi thuộc tính (.Color) được gán giá trị (Red). Chúng ta có thể thay đổi thuộc tính 1 đối tượng bằng mã lệnh như trên khi chạy chương trình, hay từ cửa sổ Properties khi thiết kế. Phương thức của 1 quả bóng có thể được gọi như sau: Balloon.Inflate Balloon.Deflate Balloon.Rise 5 Cú pháp tương tự như với thuộc tính. Trong ví dụ 3, có thêm tham số truyền cho phương thức để mô tả thêm hành động. Quả bóng có thể đáp ứng 1 sự kiện như sau: Sub Balloon_Puncture() Balloon.Deflate Balloon.MakeNoise "Bang" Balloon.Inflated = False Balloon.Diameter = 1 End Sub Chúng ta không thực sự có thể lập trình 1 quả bóng bay. Nhưng thực sự, chúng ta lập trình với form và control trong Visual Basic theo cách tương tự. 26
  27. Form vµ Control 3.2 Form Đối tượng form là thành phần cơ sở của 1 chương trình viết bằng Visual Basic, là cửa số giao diện với người dùng. Form có thuộc tính, sự kiện, phương thức. Bước đầu tiên trong thiết kế form là đặt giá trị các thuộc tính. Thuộc tính có thể đặt giá trị tại thời điểm thiết kế (design time) bằng tay, hay khi chạy chương trình (run time) bằng mã lệnh. 3.2.1 Đặt giá trị thuộc tính cho form Form có nhiều thuộc tính qui định hình thức như: Caption, Icon, MaxButton, MinButton, BorderStyle, Height, Width, Left, Top, WindowState, Thuộc tính Name đặt tên cho form - đó là tên biến được sử dụng để thao tác với form khi lập trình (ví dụ: frmEntry). Chúng ta có thể tìm hiểu về từng thuộc tính bằng cách chọn thuộc tính rồi nhấn F1 để hiển thị trợ giúp ngữ cảnh. 27
  28. Form vµ Control 3.2.2 Phương thức và sự kiện của form Như mọi đối tượng, form thực hiện các phương thức và đáp ứng các sự kiện. Sự kiện Resize được kích hoạt khi kích cỡ form bị thay đổi. Sự kiện Activate được kích hoạt khi form được gọi. Deactivate được gọi khi 1 form hay 1 ứng dụng khác được gọi. Để làm 1 form xuất hiện, sự dụng phương thức Show tenform.Show Gọi phương thức Show khiến thuộc tính Visible của form có giá trị True. Có nhiều phương thức của form làm việc với văn bản và hình ảnh như: Print, Line, Circle, Refresh giúp in hay vẽ trực tiếp lên bề mặt form. 28
  29. Form vµ Control 3.3 Command button Command button (nút lệnh) cho phép người sử dụng nhấn vào để thực hiện 1 hành động. Khi người dùng nhấn vào nút lệnh, thủ tục sự kiện Click được gọi. Lập trình viên viết lệnh vào thủ tục sự kiện Click để thực hiện hành động mong muốn. Có nhiều cách để chọn 1 command button: • Nhấn chuột vào command button • Dùng phím Tab chuyển tới command button, rồi ấn SPACEBAR hay ENTER. • Nhấn • Dùng mã lệnh thay đổi thuộc tính Value: cmdClose.Value = True • Gọi thủ tục sự kiện Click: cmdClose_Click • Nếu command button là command button mặc định trên form, nhấn ENTER khi không có nút lệnh nào đang được chọn. Lúc thiết kế, chúng ta đặt command button mặc định bằng cách thay đổi giá trị thuộc tính Default thành True. • Nếu command button là Cancel button mặc định trên form, nhấn ESC. Lúc thiết kế, chúng ta đặt Cancel button mặc định bằng cách thay đổi giá trị thuộc tính Cancel mặc định thành True. Tất cả các cách trên khiến Visual Basic gọi thủ tục sự kiện Click. 29
  30. Form vµ Control 3.4 Label Label (nhãn) hiển thị văn bản mà người dùng không thể trực tiếp thay đổi. Ta có thể sử dụng label để định danh các control không có thuộc tính Caption, chẳng hạn text box và scroll bar. Văn bản được hiển thị trong một label được điều khiển bởi thuộc tính Caption, thuộc tính này có thể được đặt khi thiết kế tại cửa sổ Properties hay khi chạy bằng cách gán trị cho nó trong mã chương trình. Mặc định, caption là phần duy nhất nhìn thấy được của label. Ngoài ra, các thuộc tính khác, như BackColor, BackStyle, ForeColor, và Font, quy định hiển thị của label. Labels có 2 thuộc tính giúp văn bản trong nó phù hợp với kích cỡ của: AutoSize and WordWrap. Đặt AutoSize=True khiến nhãn tự thay đổi kích cỡ để vừa với nội dung trong thuộc tính Caption. WordWrap khiến lable thay đổi kích cỡ theo chiều dọc để chứa hết văn bản. 30
  31. Form vµ Control Chú ý: WordWrap chỉ có hiệu lực khi AutoSize cũng đã được đặt là True. 31
  32. Form vµ Control 3.5 Text box Text box (hộp soạn thảo) dùng để nhập dữ liệu từ người dùng hay hiển thị dữ liệu. Tuy nhiên, không nên dùng Textbox để hiển thị dữ liệu không được thay đổi bởi người dùng nếu như không đặt thuộc tính Locked là True. Văn bản thực sự hiển thị được lưu trong thuộc tính Text. Chúng ta có thể đặt văn bản vào textbox hay đọc nội dung qua thuộc tính Text này. Các thuộc tính MultiLine, ScrollBars và WordWrap giúp hiển thị văn bản trong Textbox khi có nhiều dòng. Private Sub Form_Load () Text1.Text = "Here are two lines" _ & vbCrLf & "in a text box" End Sub Trong thủ tục trên, vbCrLf là hằng số khiến chuỗi chia thành 2 dòng. Chú ý: để WordWrap có hiệu lực, Multiple cũng cần có hiệu lực. Các thuộc tính SelStart, SelLength và SelText giúp điều khiển việc lựa chọn 1 phần văn bản hộp textbox. 32
  33. Form vµ Control 33
  34. Form vµ Control 3.6 Check box Check box (hộp đánh dấu) được dùng để đưa ra lựa chọn đúng/sai, có/không cho người sử dụng. 3.6.1 Chương trình ví dụ về Check box Giao diện chương trình gồm text box, label, command button, và 2 check box. 34
  35. Form vµ Control Danh sách đối tượng và thuộc tính đặt như sau: Đối tượng Thuộc tính Giá trị Form Name frmCheck Caption Check Box Example Text box Name txtDisplay Text Some sample text Check box 1 Name chkBold Caption &Bold Check box 2 Name chkItalic Caption &Italic Command button Name cmdClose Caption &Close Mã lệnh các thủ tục sự kiện: Private Sub chkBold_Click () If ChkBold.Value = vbChecked Then ' If checked. txtDisplay.Font.Bold = True Else ' If not checked. txtDisplay.Font.Bold = False End If End Sub Private Sub chkItalic_Click () If ChkItalic.Value = vbChecked Then ' If checked. txtDisplay.Font.Italic = True Else ' If not checked. txtDisplay.Font.Italic = False End If End Sub Khi chạy chương trình, nếu ô chữ nghiêng được chọn thì kiểu chữ trong hộp textbox sẽ là chữ nghiêng, còn nếu không, kiểu chữ sẽ là không nghiêng. Tương tự với ô chữ đậm. Private Sub CmdClose_Click() End End Sub 35
  36. Form vµ Control 3.7 Option Button và nhóm Option Button Option button (nút tuỳ chọn) được dùng theo nhóm được cho phép người dùng chọn 1 trong số nhiều lựa chọn. 3.7.1 Tạo nhóm Option Button Tất các option button được đặt trực tiếp lên form tạo thành 1 nhóm. Nếu muốn tạo thêm các nhóm, những option button thuộc nhóm mới phải được cùng đặt trong 1 frame box hay picture box. Người dùng chỉ có thể chọn 1 tuỳ chọn trong mỗi nhóm. 36
  37. Form vµ Control Nhóm các control trong 1 frame 1. Chọn frame control trên toolbox và vẽ lên form. 2. Chọn option button control trên toolbox vẽ vào trong frame. 3. Làm lại bước 2 cho mỗi option button cần đặt trong frame. Nếu chúng ta đã có sẵn các control muốn nhóm gộp vào trong 1 frame, hãy chọn các control đó rồi cắt và dán chúng vào trong frame hay picture control. Đối tượng chứa các control Tuy mỗi control và 1 đối tượng độc lập, quan hệ cha-con tồn tại giữa form và control. Ví dụ: các option button được chứa trong 1 frame, và frame này được chứa trong 1 form Thực sự, mỗi khi vẽ 1 control lên form, mỗi control thường chứa 1 thuộc tính Parent chỉ tới form mà control được đặt trên. Các thuộc tính Left và Top chẳng hạn sẽ xác định vị trí tương đối của control trong form cha. 3.7.2 Chương trình ví dụ về Options Xây dựng chương trình với giao diện: 37
  38. Form vµ Control Bảng các đối tượng và thuộc tính: Đối tượng Thuộc tính Giá trị Label Name LblDisplay Caption (Empty) Command button Name CmdClose Caption &Close Option button 1 Name opt486 Caption &486 Option button 2 Name opt586 Caption &Pentium Value True Option button 3 Name opt686 Caption P&entium Pro Frame Name fraSystem Caption &Operating System Option button 4 Name optWin95 Caption Windows 95 Option button 5 Name optWinNT Caption Windows NT Value True Các thủ tục sự kiện: Private Sub opt586_Click() strComputer = "Pentium" Call DisplayCaption End Sub Sub DisplayCaption() lblDisplay.Caption = "You selected a " & _ strComputer & " running " & strSystem End Sub 38
  39. Form vµ Control 3.8 List box và Combo box Listbox (hộp danh sách) và combo box (hộp kéo thả) sử dụng để liệt kê các lựa chọn cho người dùng. Listbox và combox, khác với text box, chứa nhiều giá trị. Hai control này có sẵn các phương thức để thêm, bớt, lấy giá trị từ chúng. Đoạn lệnh sau thêm 3 giá trị và 1 list box: lstCity.AddItem "Paris" lstCity.AddItem "New York" lstCity.AddItem "San Francisco" 39
  40. Form vµ Control 3.9 Các control khác • Picture Box Control: Hiển thị kết quả của chương trình, ngoài ra còn hiển thị hình ảnh qua thuộc tính Picture chứa tên tệp ảnh và đường dẫn. picMain.Picture = LoadPicture("VANGOGH.BMP") Picture box cũng được dùng như đối tượng chứa các control khác • Lightweight Graphical Control: Các control image, shape và line được gọi là các lightweight controls; chúng hỗ trợ 1 tập các các propertie, method, và events của picture box. Do đó, chúng cần ít tài nguyên máy tính và sẽ được nạp nhanh hơn picture box. Chương trình ví dụ sử dụng Image control Tạo chương trình với giao diện sau (xem Images.frm trong Controls.vbp tại thư mục Samples). • Các đối tượng truy nhập CSDL (Data Access Control) • ADO Data control • DataList control • DataCombo control • DataGrid • Microsoft FlexGrid control, Hierarchical FlexGrid control 40
  41. Form vµ Control • Các đối tượng Hệ thống tệp (File System Control) • DriveListBox control • DirListBox control • FileListBox control • Các đối tượng không phân loại (Miscellaneous Control) • Timer control • OLE container control • Common dialog control 41
  42. Form vµ Control 3.10 Focus Focus là khả năng được nhận input của người dùng từ chuột hoặc bàn phím. Trong giao diện Microsoft Windows, vài ứng dụng có thể cùng chạy trong cùng thời điểm, nhưng chỉ ứng dụng có focus sẽ có title bar ở trạng thái hoạt động và có thể nhận input của người dùng. Trên một form Visual Basic với một số text box, chỉ text box có focus hiện văn bản gõ vào từ bàn phím. Các sự kiện GotFocus và LostFocus xảy ra khi một đối tượng nhận hoặc mất focus. Form và hầu hết các control hỗ trợ các sự kiện này. Sự kiện Mô tả GotFocus Xảy ra khi một đối tượng nhận focus. LostFocus Xảy ra khi một đối tượng mất focus. Một thủ tục cho sự kiện LostFocus thường được dùng để thẩm định và kiểm định các cập nhật, hoặc để đảo/đổi điều kiện ta đặt trong thủ tục GotFocus của đối tượng. Ta có thể gán focus cho 1 đối tượng bằng cách: • Chọn đối tượng trong khi chạy. • Sử dụng một access key (ví dụ: tab) để chọn đối tượng trong khi chạy. • Sử dụng phương thức SetFocus trong mã chương trình. 42
  43. Form vµ Control Một đối tượng chỉ có thể nhận focus khi các thuộc tính Enabled và Visible của nó có giá trị True. Thuộc tính Enabled cho phép đối tượng hưởng ứng các sự kiện do người dùng gây ra (bằng chuột hoặc bàn phím). Thuộc tính Visible quyết định xem đối tượng có được hiện trên màn hình hay không. Lưu ý Một form chỉ có thể nhận focus nếu nó không chứa control có thể nhận focus. 3.10.1 Sự kiện Validate của các control Sự kiện Validate (kiểm tra) của control cũng xảy ra trước khi nó mất focus. Tuy nhiên, sự kiện này chỉ có thể xảy ra nếu thuộc tính CausesValidation của control nhận focus có giá trị True. Trong nhiều trường hợp, do sự kiện Validate xảy ra trước khi mất focus, dùng sự kiện này cho việc thẩm định dữ liệu thích hợp hơn LostFocus. 3.10.2 Control không thể nhận focus Một số control, chẳng hạn lightweight control, không thể nhận focus. Các lightweight control bao gồm: • Frame control • Image control • Label control • Line control • Shape control Thêm vào đó là các control không hiện ra khi chạy, chẳng hạn Timer control, cũng không thể nhận focus. 43
  44. Form vµ Control 3.11 Đặt Tab Order Tab order (thứ tự Tab) là thứ tự mà người dùng di chuyển từ control này sang control khác bằng cách nhấn phím TAB. Mỗi form có một tab order của riêng nó. Thông thường, tab order là thứ tự ta tạo các control. Để thay đổi tab order cho một control, đặt thuộc tính TabIndex. Thuộc tính TabIndex của một control quyết định vị trí của nó trong tab order. Mặc định, control đầu tiên được vẽ có TabIndex bằng 0, cái thư hai có TabIndex bằng 1, TabIndex trước khi sửa TabIndex sau khi sửa Control Text1 0 1 Text2 1 2 Command1 2 0 Chú ý: Control không thể nhận focus, hoặc bị disabled hay được đặt trạng thái không hiện, không có thuộc tính TabIndex property và không có trong tab order. Khi người dùng nhấn phím TAB key, các control này bị bỏ qua. 44
  45. Form vµ Control 3.11.1 Bỏ một control ra khỏi Tab Order Ta có thể bỏ một control ra khỏi tab order bằng cách đặt thuộc tính TabStop bằng False (0). Một control có thuộc tính TabStop bằng False giữ nguyên vị trí trong tab order. Chú ý: Một nhóm các option button có một tabstop duy nhất. Nút được chọn (button có Value bằng True) có TabStop được tự động gán bằng True, trong khi đó, các nút khác có TabStop bằng False. 45
  46. Form vµ Control 3.12 Dialog Box Dialog box dùng để hỏi người dùng dữ liệu cần thiết hoặc dùng để hiện thông tin cho người dùng. Dialog box là một kiểu đối tượng form đặc biệt mà có thể tạo theo 3 cách: Predefined dialog box có thể được tạo từ mã chương trình sử dụng các hàm MsgBox, InputBox. Customized dialog box có thể được tạo từ form chuẩn hoặc sửa một dialog box sẵn có. Standard dialog box, chẳng hạn Print và File Open, có thể được tạo từ common dialog control. 46
  47. Kh¸i niÖm c¬ së vÒ lËp tr×nh 4 Khái niệm cơ sở về lập trình • Cơ bản về chương trình hướng sự kiện • Các module mã lệnh trong Visual Basic • Sử dụng Code Editor • Qui ước viết lệnh • Biến số và hằng số • Kiểu dữ liệu • Mảng • Hàm và thủ tục • Cấu trúc điều khiển 4.1 Cơ bản về chương trình hướng sự kiện Một sự kiện là 1 hành động nhận biết được bởi form và control. Chương trình hướng-sự kiện gọi đoạn mã lệnh Basic để đáp ứng 1 sự kiện. Mỗi form và control trong Visual Basic có 1 tập xác định trước các sự kiện. Nếu một trong số những sự kiện đó xảy đến và có mã lệnh gắn với thủ tục sự kiện, Visual Basic sẽ gọi đoạn lệnh đó. Mặc dù đối tượng trong Visual Basic tự động nhận ra tập định nghĩa trước các sự kiện, lập trình viên mới là người quyết định các đối tượng có đáp ứng hay không và đáp ứng thế nào với 1 sự kiện cụ thể. Mỗi sự kiện có 1 phần mã lệnh tương ứng với nó dưới dạng 1 thủ tục đáp ứng sự kiện. Để điều khiển các 1 đối tượng đáp ứng 1 sự kiện, chúng ta cần viết mã lệnh với thủ tục sự kiện tương ứng. Trình tự hoạt động của 1 chương trình hướng-sự kiện thường như sau: 1. Chương trình khởi động, form được nạp và hiển thị. 2. Form hay control trên form nhận được 1 sự kiện tác động. Sự kiện đó có thể gây ra bởi người dùng (nhấn 1 phím), bởi hệ thống (1 sự kiện gây ra bởi bộ định giờ timer), hay trực tiếp bởi mã lệnh của ta. 3. Nếu có phần mã lệnh tương ứng với thủ tục sự kiện, nó sẽ được gọi. 47
  48. Kh¸i niÖm c¬ së vÒ lËp tr×nh 4. Chương trình chờ cho sự kiện kế tiếp. Chú ý: Nhiều sự kiện xảy ra liên quan tới những sự kiện khác. Ví dụ, khi sự kiện DblClick xảy ra, sự kiện MouseDown, MouseUp, và Click cũng xảy ra. 48
  49. Kh¸i niÖm c¬ së vÒ lËp tr×nh 4.2 Các module mã lệnh trong Visual Basic Mã lệnh trong Visual Basic được lưu trong các module. Có 3 loại module: form, standard, và class. Chương trình đơn giản chỉ gồm 1 form và tất cả mã lệnh của chương trình nằm trong module form. Khi chương trình phức tạp thêm, lớn hơn, sự có nhiều form hơn. Sẽ có phần mã lệnh có thể dùng chung giữa các form. Để tránh trùng lặp, chúng có thể được đưa vào module tách riêng các form – gọi là module standard. Dần dần, chúng ta có thể sẽ xây dựng 1 thư viện các module chứa các thủ tục dùng chung. Mỗi module standard, class và form có thể chứa: • Phần khai báo – Declarations: Chứa khai báo Hằng số, kiểu, biến hay thư viện kết nối động (dynamic-link library – DLL). • Phần các thủ tục – Procedures: Chứa thủ tục, hàm số, thủ tục thuộc tính có thể được gọi trong mỗi module. 49
  50. Kh¸i niÖm c¬ së vÒ lËp tr×nh 4.2.1 Module Form Module form (trong các tệp *.FRM) chứa chứa các thủ tục đáp ứng sự kiện trên form, các thủ tục dùng chung trong form, các khai báo ở mức form về: biến, hằng, kiểu, thủ tục bên ngoài. Mã lệnh trong mỗi form được dùng riêng trong form đó và đôi khi mã lệnh trong 1 form có thể tham chiếu tới các form khác. 4.2.2 Module Standard Module standard (trong các tệp *.BAS) chứa thủ tục và khai báo truy nhập được bởi các module khác trong chương trình, hay thậm chí bởi các chương trình khác nhau. 4.2.3 Module Class Modules class (trong các tệp *.CLS) là cơ sở lập trình hướng đối tượng trong Visual Basic. Chúng ta viết mã lệnh trong module class để tạo những đối tượng mới với những thuộc tính và phương thức riêng. Thực ra, form chính là các module class, nơi có thể đặt các control và hiển thị các cửa sổ form. Chú ý: ActiveX Documents, ActiveX Designers, và User Controls: là những loại module mở rộng (với tên tệp có phần mở rộng khác). Có thể xem những module đó tương tự như module form. 50
  51. Kh¸i niÖm c¬ së vÒ lËp tr×nh 4.3 Sử dụng Code Editor Code Editor của Visual Basic là một cửa sổ nơi ta viết phần lớn mã chương trình. Nó giống một trình soạn thảo được chuyên hoá cao với nhiều tính năng tạo thuận lợi cho việc viết mã Visual Basic. Một cửa sổ riêng được mở cho mỗi module ta chọn từ Project Explorer. Mã nằm trong mỗi module được chia thành các phần riêng cho từng đối tượng trong module. Mỗi module form gồm: - Phần general: chứa phần khai báo và các thủ tục dùng chung. - Phần thủ tục sự kiện cho từng đối tượng. Để truy nhập tới phần mã lệnh cần viết, nên sử dụng hộp combo box trái rồi hộp combo box phải. 51
  52. Kh¸i niÖm c¬ së vÒ lËp tr×nh Visual Basic có chức năng Auto Code Completion giúp viết mã lệnh trong Code Editor được dễ dàng. Để chọn phần từ nào đó, chuyển thanh sáng tới đó, rồi nhấn TAB. Ngoài ra, chức năng Bookmarks giúp đánh dấu 1 vị trí mã lệnh để có thể quay lại được nhanh chóng (Edit | Bookmarks). 52
  53. Kh¸i niÖm c¬ së vÒ lËp tr×nh 4.4 Qui ước viết lệnh trong Visual Basic 4.4.1 Chia 1 lệnh thành nhiều dòng Bằng cách sử dụng ký tự: [ _ ] dtaTilesOfPublishers.RecordSource = _ "SELECT * FROM Titles, Publishers" _ & "WHERE Publishers.PubId = Titles.PubID" _ & "AND Publishers.State = 'CA'" Trong một số trường hợp cách chia 1 câu lệnh này không thực hiện được: nối các dòng chú giải, 4.4.2 Nối nhiều lệnh vào 1 dòng Bằng cách sử dụng kí tự: [ : ] txtMsg.Text = "Hello" : Red = 255 : txtMsg.BackColor = _ Red 4.4.3 Thêm chú giải vào mã lệnh Bằng cách sử dụng kí tự: [ ‘ ] ' This is a comment beginning at the left edge of the ' screen. txtMsg.Text = "Hi!" ' Place friendly greeting in ' text box. 53
  54. Kh¸i niÖm c¬ së vÒ lËp tr×nh 4.4.4 Hệ thống số Cơ số 10 Cơ số 8 Cơ số 16 (Decimal) (Octal) (Hexadecimal ) 9 &O11 &H9 15 &O17 &HF 16 &O20 &H10 20 &O24 &H14 255 &O377 &HFF 54
  55. Kh¸i niÖm c¬ së vÒ lËp tr×nh 4.4.5 Qui tắc đặt tên Tên thủ tục, hàm, biến, hằng phải tuân theo qui tắc: • Bắt đầu bằng kí tự chữ • Không chứa ký tự phân cách (như [ . ] hay kí tự rỗng), ký tự khai báo kiểu. • Không dài hơn 255 kí tự. Tên của control, forms, class, và module không vượt quá 40 kí tự. • Không trùng với các từ khoá của ngôn ngữ. 55
  56. Kh¸i niÖm c¬ së vÒ lËp tr×nh 4.5 Biến số Biến số là nơi lưu trữ tạm thời giá trị. Biến thường được định nghĩa bởi người sử dụng. Chúng ta có thể xem các thuộc tính của 1 đối tượng như biến. ApplesSold = 10 ApplesSold = ApplesSold + 1 txtSales.txt = ApplePrice * ApplesSold 4.5.1 Khai báo biến Dim variablename [As type] Biến khai báo với Dim trong 1 thủ tục tồn tại khi thủ tục đó được chạy; Khi thủ tục kết thúc, giá trị của biến đó được giải phóng; Tức biến này có phạm vi địa phương (local) trong thủ tục mà nó được khai báo. Phạm vi cơ bản của biến: • Biến khai báo trong phần Declarations của 1 module form, standard, hay class, chứ không phải bên trong 1 thủ tụccó thể được sử dụng bởi mọi thủ tục trong module. • Biến khai báo với từ khoá Public sử dụng được trong toàn chương trình. • Biến khai báo với từ khoá Static vẫn lưu tiếp giá trị của nó ngay cả khi thủ tục chứa khai báo của nó đã kết thúc. Chú ý: Trong 1 phạm vi, không được có 2 biến khai báo trùng tên. 4.5.2 Khai báo không tường minh Trong Visual Basic, biến có thể không khai báo trước khi sử dụng: Function SafeSqr(num) TempVal = Abs(num) SafeSqr = Sqr(TempVal) End Function 56
  57. Kh¸i niÖm c¬ së vÒ lËp tr×nh Tuy nhiên, điều này dễ dẫn sinh lỗi trong chương trình: Function SafeSqr(num) TempVal = Abs(num) SafeSqr = Sqr(TemVal) End Function 4.5.3 Khai báo tường minh Nên luôn khai báo biến trước khi sử dụng. Để yêu cầu Visual Basic luôn kiểm tra biến phải được khai báo trước khi sử dụng: - Đặt câu lệnh sau vào phần Declarations của 1 module class, form, hay standard: Option Explicit - Hay từ menu Tools, chọn Options, nhấn chọn tab Editor rồi đánh dấu chọn Require Variable Declaration. Sau đó, câu lệnh Option Explicit sẽ luôn được chèn tự động. 57
  58. Kh¸i niÖm c¬ së vÒ lËp tr×nh 4.6 Hằng số Có 2 kiểu hằng số • Hằng số cơ sở hay định nghĩa trước bởi hệ thống • Hằng số do người dùng định nghĩa 4.6.1 Tự khai báo 1 hằng số: [Public|Private] Const constantname [As type] = expression Ví dụ: Const conPi = 3.14159265358979 Public Const conMaxPlanets As Integer = 9 Const conReleaseDate = #1/1/95# 4.6.2 Phạm vi hằng số do người dùng định nghĩa • Hằng khai báo trong 1 thủ tục có phạm vi chỉ trong thủ tục đó • Hằng khai báo trong phần Declarations của 1 module có phạm vi trong toàn module. • Hằng khai báo trong phần Declarations của 1 module với từ khoá Public có phạm vi trong toàn chương trình. 58
  59. Kh¸i niÖm c¬ së vÒ lËp tr×nh 4.7 Kiểu dữ liệu 4.7.1 Khai báo biến với kiểu dữ liệu Biến thường được khai báo trước với kiểu dữ liệu định sẵnVí dụ: Private I As Integer Dim Amt As Double Static YourName As String Public BillsPaid As Currency Private I As Integer, Amt As Double Nếu kiểu biến không nêu rõ, biến sẽ có kiểu là Variant. Private v 4.7.2 Dữ liệu kiểu số Integer Long Single Double Currency 4.7.3 Kiểu Byte Byte Khi biến số chứa dữ liệu nhị phân, nên khai báo nó thành mảng các dữ liệu kiểu byte. Điều đó giúp giữ được khuôn dạng dữ liệu trong quá trình chuyển đổi. 59
  60. Kh¸i niÖm c¬ së vÒ lËp tr×nh 4.7.4 Kiểu dữ liệu chuỗi String Ví dụ: Dim S as String S = "Database" S = Left(S, 4) Mặc định, biến chuỗi có độ dài biến đổi phù hợp với giá trị nó lưu trữ. Để khai báo 1 biến chuỗi có độ dài cố định, sử dụng cú pháp: String * size Ví dụ: Dim EmpName As String * 50 Nếu biến EmpName được gán bằng 1 chuỗi ít hơn 50 kí tự, nó sẽ được chèn vào các kí tự trắng cho đủ 50. Còn nếu biến EmpName được gán bằng 1 chuỗi nhiều hơn 50 kí tự, Visual Basic sẽ cắt ngắn lại. Do chuỗi có độ dài cố định có thể được chèn thêm các kí tự trắng, chúng ta có thể cần tới các hàm Trim, RTrim để loại bỏ các kí tự trắng. Chuỗi có độ dài cố định có thể được khai báo Public hay Private trong module standard. Trong module form hay module class, chuỗi có độ dài cố định chỉ có thể được khai báo Private. 4.7.5 Trao đổi giữa chuỗi và số Visual Basic có thể tự động chuyển đổi dữ liệu giữa kiểu số và chuỗi. 60
  61. Kh¸i niÖm c¬ së vÒ lËp tr×nh Ví dụ: Private Sub Command1_Click() Dim intX As Integer Dim strY As String strY = "100.23" intX = strY ' Passes the string to a numeric ' variable. lstNum.AddItem Cos(strY) ' Adds cosine of number in ' the string to the listbox. strY = Cos(strY) ' Passes cosine to the ' string variable. txtStr.Text = strY ' String variable prints in ' the text box. End Sub Tuy nhiên, chúng ta phải luôn cẩn thận, bởi khi trao đổi giữa chuỗi và số, lỗi có thể nảy sinh khi chuỗi số chứa giá trị không ở khuôn dạng số. 4.7.6 Kiểu dữ liệu logic Boolean True/False 4.7.7 Kiểu dữ liệu thời gian Giá trị về ngày tháng, hay thời gian có thể được lưu trữ trong kiểu dữ liệu Date hay trong Variant. 61
  62. Kh¸i niÖm c¬ së vÒ lËp tr×nh 4.7.8 Kiểu dữ liệu đối tượng Biến đối tượng được lưu trữ thành địa chỉ 32-bit. Địa chỉ này tham trỏ tới đối tượng trong chương trình, hay tới đối tượng trong chương trình khác. Dim objDb As Object Set objDb = OpenDatabase("c:\Vb5\Biblio.mdb") 4.7.9 Kiểu dữ liệu Variant Biến kiểu Variant có thể lưu trữ dữ liệu có kiểu bất kỳ. Chúng ta không phải chuyển đổi giữa các kiểu dữ liệu nếu chúng ta gán chúng cho 1 biến kiểu Variant. 4.7.10 Kiểu dữ liệu do người dùng tự định nghĩa Chúng ta có thể định nghĩa những kiểu dữ liệu mới, tương tự như khái niệm Record trong Pascal. 62
  63. Kh¸i niÖm c¬ së vÒ lËp tr×nh 4.8 Mảng Trong Visual Basic, có 2 kiểu mảng: mảng tĩnh với kích thước cố định và mảng động với kích thước có thể thay đổi khi chạy. 4.8.1 Khai báo mảng tĩnh Dim Counters(14) As Integer Public Sums(20) As Double Khi đó, mảng Counters có 15 phần tử với chỉ số từ 0 tới 15, mảng Sums có 21 phần từ 0 tới 20 Để chỉ rõ phạm vi chỉ số, có thể khai báo: Dim Counters(1 To 15) As Integer Dim Sums(100 To 120) As String 4.8.2 Mảng chứa các mảng Có thể tạo mảng các Variant, và sau đó gán giá trị cho nó với mảng của các kiểu dữ liệu khác. Ví dụ tạo 2 mảng, một chứa các số nguyên và một chứa các chuỗi. Sau đó khai báo mảng thứ 3 chứa các Variant và gán giá trị với nó từ mảng số nguyên và mảng chuỗi. Private Sub Command1_Click() Dim intX As Integer ' Declare counter variable. ' Declare and populate an integer array. Dim countersA(5) As Integer For intX = 0 To 4 countersA(intX) = 5 Next intX ' Declare and populate a string array. Dim countersB(5) As String For intX = 0 To 4 countersB(intX) = "hello" Next intX Dim arrX(2) As Variant ' Declare a new two-member ' array. arrX(1) = countersA() ' Populate the array with ' other arrays. arrX(2) = countersB() MsgBox arrX(1)(2) ' Display a member of each ' array. MsgBox arrX(2)(3) End Sub 4.8.3 Mảng nhiều chiều Với Visual Basic, chúng ta có thể khai báo các mảng nhiều chiều: 63
  64. Kh¸i niÖm c¬ së vÒ lËp tr×nh Static MatrixA(9, 9) As Double Dim MultiD(3, 1 To 10, 1 To 15) 64
  65. Kh¸i niÖm c¬ së vÒ lËp tr×nh 4.9 Hàm và thủ tục Phân chia chương trình thành hàm và thủ tục có 2 lợi ích chính: • Chia chương trình thành các khối logic tách rời, mỗi khối dễ dàng được viết và gỗi lỗi hơn nếu viết cả chương trình lớn. • Một hàm/thủ tục có thể được sử dụng nhiều lần. Trong Visual Basic có một số kiểu hàm/thủ tục sau: • Thủ tục không trả về giá trị: thủ tục chung và thủ tục sự kiện. • Hàm có trả về giá trị. • Thủ tục thuộc tính có thể trả về và gán giá, và gán tham chiếu tới các đối tượng. 4.9.1 Khai báo hàm và thủ tục Cú pháp khai báo 1 thủ tục: [Private|Public][Static]Sub procedurename (arguments) statements End Sub Cú pháp khai báo 1 hàm: [Private|Public][Static]Function procedurename (arguments) [As type] statements End Function 65
  66. Kh¸i niÖm c¬ së vÒ lËp tr×nh 4.9.2 Tạo 1 hàm/thủ tục chung: • Gõ vào phần đầu hàm/thủ tục vào cửa sổ Code, với dạng sau Sub UpdateForm () Function GetCoord () • Visual Basic sẽ hoàn tất thủ tục theo khuôn mẫu 4.9.3 Gọi 1 thủ tục Có 2 cách như sau: ' Both of these statements call a Sub named MyProc. Call MyProc (FirstArgument, SecondArgument) MyProc FirstArgument, SecondArgument 4.9.4 Gọi 1 hàm ' All of the following statements would call a function ' named ToDec. Print 10 * ToDec X = ToDec If ToDec = 10 Then Debug.Print "Out of Range" X = AnotherFunction(10 * ToDec) Chúng ta cũng có thể gọi 1 hàm như cách chúng ta gọi 1 thủ tục: Call Year(Now) Year Now Khi đó, Visual Basic sẽ in ra giá trị trả về từ hàm Year. 4.9.5 Gọi hàm/thủ tục từ module khác - trong module form Call Form1.SomeSub(arguments) - trong module class Dim DemoClass as New Class1 DemoClass.SomeSub - trong module standard Module2.CommonName(arguments) 4.9.6 Truyền tham số cho hàm/thủ tục: Function WhatsForLunch(WeekDay As String, Hour _ As Integer) As String 66
  67. Kh¸i niÖm c¬ së vÒ lËp tr×nh ' Returns a lunch menu based on the day and time. If WeekDay = "Friday" then WhatsForLunch = "Fish" Else WhatsForLunch = "Chicken" End If If Hour > 4 Then WhatsForLunch = "Too late" End Function 67
  68. Kh¸i niÖm c¬ së vÒ lËp tr×nh 4.10 Cấu trúc điều khiển 4.10.1 Cấu trúc phân nhánh • If Then • If Then Else • Select Case If Then If condition Then statement If condition Then statements End If If Then Else If condition1 Then [statementblock-1] [ElseIf condition2 Then [statementblock-2]] [Else [statementblock-n]] End If Select Case Select Case testexpression [Case expressionlist1 [statementblock-1]] [Case expressionlist2 [statementblock-2]] . . . [Case Else [statementblock-n]] End Select Ví dụ: Private Sub mnuCut_Click (Index As Integer) Select Case Index Case 0 ' Cut command. CopyActiveControl ' Call general procedures. ClearActiveControl Case 1 ' Copy command. CopyActiveControl Case 2 ' Clear command. ClearActiveControl 68
  69. Kh¸i niÖm c¬ së vÒ lËp tr×nh Case 3 ' Paste command. PasteActiveControl Case Else frmFind.Show ' Show Find dialog box. End Select End Sub 69
  70. Kh¸i niÖm c¬ së vÒ lËp tr×nh 4.10.2 Cấu trúc lặp • Do Loop • For Next • For Each Next Do Loop Do While condition ‘ Loop until condition is True statements Loop Do statements Loop While condition ‘ Loop until condition is True Ví dụ: Function CountStrings (longstring, target) Dim position, count position = 1 Do While InStr(position, longstring, target) position = InStr(position, longstring, target)_ + 1 count = count + 1 Loop CountStrings = count End Function Hai biến dạng khác của lặp với số bước không định trước, chỉ khác là quá trình lặp tiếp tục khi điều kiện là False: Lặp 0 hay nhiều lần Lặp ít nhất 1 lần Do Until condition Do statements statements Loop Loop Until condition For Next For counter = start To end [Step increment] statements Next [counter] Ví dụ: Private Sub Form_Click () Dim I As Integer 70
  71. Kh¸i niÖm c¬ së vÒ lËp tr×nh For i = 0 To Screen.FontCount Print Screen.Fonts(i) Next End Sub Sub HighlightButton(MyControl As Variant) Dim i As Integer For i = 0 To frmVCR.Controls.Count - 1 If TypeOf frmVCR.Controls(i) Is Shape Then If frmVCR.Controls(i).Name = MyControl Then frmVCR.Controls(i).Visible = True Else frmVCR.Controls(i).Visible = False End If End If Next End Sub For Each Next Tương tự như For Next, nhưng nó duyệt qua các phần tử trong 1 object collection hay trong 1 mảng, chứ không phải duyệt theo số lần đếm định trước. Điều đó có ích khi chúng ta không biết trước số phần tử trong nhóm cần duyệt. For Each element In group statements Next element Ví dụ: Sub ListTableDefs() Dim objDb As Database Dim MyTableDef as TableDef Set objDb = OpenDatabase("c:\vb\biblio.mdb", _ True, False) For Each MyTableDef In objDb.TableDefs() List1.AddItem MyTableDef.Name Next MyTableDef End Sub Chú ý rằng khi sử dụng For Each Next: • Với collection, phần tử (element) chỉ có thể là: biến Variant, biến Object, hay 1 object được liệt kê trong Object Browser. • Với mảng, phần tử (element) chỉ có thể là biến Variant. • Không được sử dụng For Each Next với mảng các phần tử có kiểu dữ liệu do người dùng tự định nghĩa bởi 1 biến Variant không thể chữa dữ liệu có kiểu này. 71
  72. Kh¸i niÖm c¬ së vÒ lËp tr×nh 4.10.3 Làm việc với cấu trúc điều khiển Các cấu trúc lồng nhau Ví dụ: Private Sub Form_Click() Dim SFont, PFont For Each SFont In Screen.Fonts() For Each PFont In Printer.Fonts() If SFont = PFont Then Print SFont End If Next PFont Next SFont End Sub Thoát khỏi 1 cấu trúc điều khiển lặp Bằng cách sử dụng câu lệnh Exit: Exit For giúp thoát khỏi vòng lặp For Next, và Exit Do giúp thoát khỏi vòng lặp Do While. For counter = start To end [Step increment] [statementblock] [Exit For] [statementblock] Next [counter[, counter] [, ]] Do [{While | Until} condition] [statementblock] [Exit Do] [statementblock] Loop Ví dụ: Private Sub Form_Click() Dim SFont, PFont For Each SFont In Screen.Fonts() For Each PFont In Printer.Fonts() If SFont = PFont Then Print Sfont Exit For ' Exit inner loop. End If Next PFont Next SFont End Sub Thoát khỏi hàm/thủ tục Bằng câu lệnh: Exit Sub và Exit Function. Ví dụ: 72
  73. Kh¸i niÖm c¬ së vÒ lËp tr×nh Private Sub Form_Click() Dim SFont, PFont For Each SFont In Screen.Fonts() For Each PFont In Printer.Fonts() If SFont = PFont Then Print Sfont Exit Sub ' Exit the procedure. End If Next PFont Next SFont End Sub 73
  74. Kh¸i niÖm c¬ së vÒ lËp tr×nh (2) 5 Khái niệm cơ sở về lập trình (tiếp) • Qui ước về cách đặt tên biến • Phạm vi của biến • Một số vấn đề khi sử dụng biến và hằng • Chuyển đổi kiểu dữ liệu • Kiểu dữ liệu Variant • Mảng động • Truyền tham số cho hàm và thủ tục • Sử dụng biến Object 74
  75. Kh¸i niÖm c¬ së vÒ lËp tr×nh (2) 5.1 Qui ước về cách đặt tên biến Tên của 1 control là 1 trong những thuộc tính quan trọng nhất của nó. Để đặt tên có hệ thống, dễ nhớ, tránh nhầm lẫn. Trong Visual Basic, người ta thường sử dụng 3 kí tự đầu để phân loại tên đối tượng. Loại Control Tiền tố Loại Control Tiền tố Label lbl PictureBox pic Frame fra TextBox txt CheckBox chk CommandButton cmd ComboBox cbo OptionButton opt HscrollBar hsb ListBox lst Timer tmr VscrollBar vsb DirListBox dir DriveListBox drv Shape shp FileListBox fil Image img Line lin OLE Container Control ole Data dat Ví dụ: cmdClose chỉ là tên của 1 command button để đóng 1 form; txtFirstName là tên 1 text box chứa tên gọi. Bảng sau nêu phần tiền tố thường sử dụng cho cả control cũng như các kiểu biến: Tiền Biến/Control Ví dụ tố b Boolean bLightsOn c Currency cAmountDue d Double dDollarPerGallon db Database dbAccountsPayable ds Dynaset dsOverDue dt Date+time dtDateDue Prefix Variable/Control Example td TableDef tdEmployees h Handle hWnd i Integer iCounter l Long lNum str String strMessage 75
  76. Kh¸i niÖm c¬ së vÒ lËp tr×nh (2) s Single sPay a Array a_iMyArray g Global g_iTotal m Local to module or form m_iAmount ani Animation button aniMain cbo Combo box and drop-down list box cboMyList chk Check box chkDoctorIn clp Picture clip clpEmblems cmd Command button cmdFirstName com Communications comLineOne ctr Control (used within procs when the specific type is ctrNext unknown) dat Data datEmployees db ODBC database dbTaxpayers dir Directory list box dirProjects dlg Common dialog dlgSettings drv Drive list box drvMain fil File list box filPictures frm Form frmMain fra Frame fraTeams gau Gauge gauGas Prefix Variable/Control Example gpb Group button gpbApps grd Grid grdMain hsb Horizontal scroll bar hsbText img Image imgMain key Keyboard key status keyASCII lbl Label lblLastName lin Line linRed lst List box lstStooges mdi MDI child form mdiMain mnu Menu mnuEdit opt Option button optGender ole OLE client oleMain pnl 3D panel pnlFriends shp Shape shpCircle spn Spin control spnTemp txt Text/edit box txtAddress 76
  77. Kh¸i niÖm c¬ së vÒ lËp tr×nh (2) tmr Timer tmrBreak vsb Vertical scrollbar vsbComments 77
  78. Kh¸i niÖm c¬ së vÒ lËp tr×nh (2) 5.2 Phạm vi của biến Phạm vi của một biến số xác định trong phần nào của mã lệnh biến số thì biến số đó tồn tại. Khi chúng ta khai báo 1 biến trong 1 thủ tục, chỉ có phần lệnh trong thủ tục đó có thể truy nhập hay thay đổi giá trị của biến số đó; biến số có phạm vi địa phương (local) đối với thủ tục. Nhiều khi chúng ta muốn sử dụng 1 biến với phạm vi rộng hơn như những biến mà giá trị của nó có thể sử dụng được trong toàn bộ các thủ tục trong 1 module, hay thậm chí từ cả những module khác trong toàn chương trình. Visual Basic cho phép chúng ta định nghĩa các phạm vi biến khác nhau như vậy. Tuỳ thuộc và cách khai báo, 1 biến có phạm vi địa phương hay ở mức module. Phạm vi Private Public Trong thủ Biến chỉ được sử dụng Không được khai báo tục/hàm địa phương trong thủ biến public (công cộng). tục/hàm khai báo nó. Trong module Biến được sử dụng địa Biến có thể được sử (khai báo tại phương trong module: tại dụng bởi tất cả các Delaration) tất các hàm thủ tục/hàm module. trong module. 5.2.1 Biến sử dụng trong 1 hàm/thủ tục Để khai báo biến địa phương trong hàm/thủ tục, chúng ta có thể sử dụng: Ví dụ: Dim intTemp As Integer hay Static intPermanent As Integer Biến khai báo với Static tồn tại trong suốt chương trình chạy, duy trì giá trị giữa những lần hàm/thủ tục chạy; còn biến khai báo Dim thì chỉ tồn tại trong mỗi lần hàm/thủ tục chạy mà thôi. 78
  79. Kh¸i niÖm c¬ së vÒ lËp tr×nh (2) 5.2.2 Biến sử dụng trong phạm vi 1 module Biến khai báo với từ khoá Private tại phần Declarations của 1 module có phạm vi trong toàn module đó; tức sử dụng được trong tất các hàm/thủ tục thuộc module. Ví dụ: Private intTemp As Integer hay Dim intTemp As Integer Khai báo Private hay Dim ở mức module là tương tự nhau, tuy nhiên, nên khai báo với từ khoá Private 5.2.3 Biến sử dụng trong tất cả các module Là biến khai báo với từ khoá Public tại phần Declarations của 1 module. Nó có thể được sử dụng tại tất cả các module trong chương trình. Ví dụ: Public intTemp As Integer 79
  80. Kh¸i niÖm c¬ së vÒ lËp tr×nh (2) 5.3 Một số vấn đề khi sử dụng biến và hằng 5.3.1 Nhiều biến với cùng 1 tên Nếu có các biến công cộng trong các module khác nhau có cùng tên, để chỉ phân biệt rõ chúng trong mã lệnh, chúng ta cần nêu rõ tên của module chứa biến cùng tên biến. Nếu 2 biến công cộng kiểu Integer tên intX khai báo trong cả Form1 và Module1, chúng ta có thể chỉ rõ biến theo cách Module1.intX và Form1.intX. Ví dụ: tạo 1 project với:2 module standard, 1 form với 2 command button. Biến intX được khai báo trong module standard đầu tiên: Module1. Module1 có thủ tục Test. Public intX As Integer ' Declare Module1's intX. Sub Test() ' Set the value for the intX variable in Module1. intX = 1 End Sub Biến intX khác được khai báo trong module standard thứ hai: Module2. Module2 cũng có thủ tục tên Test. Public intX As Integer ' Declare Module2's intX. Sub Test() ' Set the value for the intX variable in Module2. intX = 2 End Sub Biến intX thứ 3 được khai báo trong form: form1. Module mã lệnh của form1 cũng có thủ tục tên Test. Public intX As Integer ' Declare the form's intX ' variable. Sub Test() ' Set the value for the intX variable in the form. intX = 3 End Sub Ba command button trên form1 tương ứng gọi 3 thủ tục Test và sử dụng MsgBox để hiển thị giá trị của 3 biến. Private Sub Command1_Click() 80
  81. Kh¸i niÖm c¬ së vÒ lËp tr×nh (2) Module1.Test ' Calls Test in Module1. MsgBox Module1.intX ' Displays Module1's intX. End Sub Private Sub Command2_Click() Module2.Test ' Calls Test in Module2. MsgBox Module2.intX ' Displays Module2's intX. End Sub Private Sub Command3_Click() Test ' Calls Test in Form1. MsgBox intX ' Displays Form1's intX. End Sub Chạy chương trình, nhấn vào từng command buttons. Chúng ta sẽ thấy việc gọi tới 3 biến khác nhau trong 3 module. Chú ý rằng, với nút lệnh thứ 3, chúng ta không chỉ rõ tên module chứa khai báo biến. 81
  82. Kh¸i niÖm c¬ së vÒ lËp tr×nh (2) 5.3.2 Biến công cộng và biến địa phương Chúng ta có thể có biến cùng tên nhưng ở các phạm vi khác nhau. Ví dụ: 1 biến công cộng (public) tên Temp và trong 1 thủ tục có khai báo 1 biến địa phương (local) cũng với tên Temp. Khi đó nếu gọi tới Temp trong thủ tục là sử dụng biến Temp địa phương trong đó, còn khi gọi tới Temp bên ngoài thủ tục, thì biến công cộng Temp sẽ được sử dụng. Public Temp As Integer Sub Test() Dim Temp As Integer Temp = 2 ' Temp has a value of 2. MsgBox Form1.Temp ' Form1.Temp has a value of 1. End Sub Private Sub Form_Load() Temp = 1 ' Set Form1.Temp to 1. End Sub Private Sub Command1_Click() Test End Sub 82
  83. Kh¸i niÖm c¬ së vÒ lËp tr×nh (2) 5.3.3 Biến thuộc tính form và control Thuộc tính của form, các controls, hằng và hàm/thủ tụcđược xem như biến trong phạm vi toàn module form. Do đó, không được có thuộc tính form hay control có cùng tên với biến được khai báo trong module form. Trong module form, các biến địa phương có thể cùng tên với các control. Để chỉ rõ là control khi cần đặt hay lấy giá trị của control đó, chúng ta có thể nêu tên của form hay sử dụng từ khoá Me. Private Sub Form_Click () Dim Text1, BackColor ' Assume there is also a control on the form called ' Text1. Text1 = "Variable" ' Variable shadows control. Me.Text1 = "Control" ' Must qualify with Me to get ' control. Text1.Top = 0 ' This causes an error! Me.Text1.Top = 0 ' Must qualify with Me to get ' control. BackColor = 0 ' Variable shadows property. Me.BackColor = 0 ' Must qualify with Me to get ' form property. End Sub 83
  84. Kh¸i niÖm c¬ së vÒ lËp tr×nh (2) 5.3.4 Tránh tham chiếu vòng Bởi vì 1 hằng số có thể được định nghĩa từ những hằng số khác, chúng ta cần cẩn thận để tránh xảy ra tham chiếu vòng. Ví dụ: ' In Module 1: Public Const conA = conB * 2 ' Available throughout ' application. ' In Module 2: Public Const conB = conA / 2 ' Available throughout ' application. Khi tham chiếu vòng xảy ra, Visual Basic sẽ sinh lỗi khi chạy chương trình. Để tránh tham chiếu vòng, nên giới hạn việc khai báo các hằng công cộng vào trong 1 module duy nhất. 84
  85. Kh¸i niÖm c¬ së vÒ lËp tr×nh (2) 5.4 Chuyển đổi kiểu dữ liệu Visual Basic cung cấp 1 số hàm giúp chúng ta chuyển đổi 1 giá trị sang 1 kiểu dữ liệu nhất định. Tên hàm Kiểu dữ liệu đích Cbool Boolean Cbyte Byte Ccur Currency Cdate Date CDbl Double Cint Integer CLng Long CSng Single CStr String Cvar Variant CVErr Error Chú ý: Kiểu dữ liệu truyền cho hàm chuyển đổi phải phù hợp. Ví dụ, khi chuyển 1 giá trị kiểu Long thành 1 số Integer, giá trị kiểu LongValues passed to a conversion function must be valid for the destination data type or an error occurs. For example, if you attempt to convert a Longđó phải trong miền giá trị của kiểu Integer. 85
  86. Kh¸i niÖm c¬ së vÒ lËp tr×nh (2) 5.5 Kiểu dữ liệu Variant Một biến kiểu Variant có thể lưu trữ giá trị dữ liệu của tất cả các kiểu biến do hệ thống định nghĩa. Ví dụ: Dim SomeValue ' Variant by default. SomeValue = "17" ' SomeValue contains "17" (a two- ' character string). SomeValue = SomeValue - 15 ' SomeValue now contains ' the numeric value 2. SomeValue = "U" & SomeValue ' SomeValue now contains ' "U2" (a two- character string). Một biến kiểuVariantcũng có thể chứa các giá trị đặc biệt là: Empty, Null. 5.5.1 Giá trị Empty Khi 1 biến kiểu Variant được khởi tạo, nó có giá trị Empty; khi 1 biến kiểu String không chứa 1 kí tự nào, nó có giá trị Empty. Chúng ta có thể kiểm tra 1 giá trị có là Empty hay không bằng hàm IsEmpty. If IsEmpty(Z) Then Z = 0 5.5.2 Giá trị Null Biến kiểu Variant có thể chứa 1 giá trị đặc biệt khác là: Null. Null thường được sử dụng trong các ứng dụng cơ sở dữ liệu để chỉ rằng dữ liệu là không xác định hay bị mất. Chúng ta có thể kiểm tra 1 giá trị có là Null hay không bằng hàm IsNull. If IsNull(X) And IsNull(Y) Then Z = Null Else Z = 0 End If 86
  87. Kh¸i niÖm c¬ së vÒ lËp tr×nh (2) 5.5.3 Kiểm tra kiểu dữ liệu Do biến kiểu Variant có thể lưu trữ kiểu dữ liệu bất kỳ, nên có thể chúng ta cần xác định chính xác kiểu dữ liệu trước khi sử dụng. Hàm IsNumeric dùng để kiểm tra 1 giá trị có là số hay không. Ví dụ: IsNumeric("$100") ‘return True IsNumeric("1,560.50") ‘return True IsNumeric("DM100") ‘return False IsNumeric("1.560,50") ‘return False Hàm IsDate dùng để kiểm tra 1 giá trị có là ngày tháng hay không. Ví dụ: If IsDate(Text1.Text) Then SomeDate = CDate(Text1.Text) daysleft = DateSerial(Year(SomeDate) + _ 1, 1, 1) - SomeDate Text2.Text = daysleft & " days left in the year." Else MsgBox Text1.Text & " is not a valid date." End If Nói chung, mọi giá trị đều có thể xem là ở dạng chuỗi. Khi chúng ta muốn luôn đảm bảo kết quả là phép nối các chuỗi, bất kể thể hiện giá trị các biến, chúng ta có thể sử dụng phép toán & . Ví dụ: Sub Form_Click () Dim X, Y X = "6" Y = "7" Print X + Y, X & Y X = 6 Print X + Y, X & Y End Sub Kết quả in ra: 67 67 13 67 87
  88. Kh¸i niÖm c¬ së vÒ lËp tr×nh (2) 5.6 Mảng động Mảng động (dynamic array) được sử dụng khi chúng ta không biết chính xác độ lớn cần thiết cho 1 mảng, bởi mảng động có thể được thay đổi kích cỡ. 5.6.1 Cách tạo 1 mảng động • Khai báo mảng nhưng không chỉ rõ kích cỡ Dim DynArray() • Đặt rõ hay thay đổi kích cỡ bằng câu lệnh ReDim ReDim DynArray(X + 1) Lệnh ReDim chỉ được xuất hiện trong hàm/thủ tục, chứ không phải như các từ khoá khai báo Dim hay Static. ReDim có thể thay đổi số phần tử, cận trên, cận dưới trong mỗi chiều của mảng, nhưng không thể thay đổi được số chiều của mảng. 5.6.2 Bảo tồn giá trị 1 mảng động Khi sử dụng ReDim, toàn bộ giá trị trong mảng sẽ được gán giá trị khởi tạo mới phù hợp với kiểu dữ liệu của mảng. Muốn bảo tồn các giá trị hiện có, sử dụng ReDim cùng với từ khoá Preserve, nhưng lúc này, chỉ cận trên của mảng có thể được phép thay đổi. Ví dụ: ReDim Preserve DynArray(UBound(DynArray) + 1) 88
  89. Kh¸i niÖm c¬ së vÒ lËp tr×nh (2) 5.7 Truyền tham số cho hàm/thủ tục 5.7.1 Truyền tham số bằng giá trị Chỉ truyền một bản sao của biến. Nếu thủ tục thay đổi giá trị, thay đổi đó chỉ ảnh hưởng đến bản sao, không ảnh hưởng đến biến được truyền. Sử dụng từ khoá ByVal. Ví dụ: Sub PostAccounts(ByVal intAcctNum as Integer) . . ' Các lệnh được đặt ở đây. . End Sub 89
  90. Kh¸i niÖm c¬ së vÒ lËp tr×nh (2) 5.7.2 Truyền tham số bằng tham chiếu Kiểu truyền này cho phép thủ tục truy nhập trực tiếp đến biến được truyền. Do đó, giá trị của biến có thể bị thay đổi bởi thủ tục mà biến đó được truyền vào. Đây là kiểu truyền biến mặc định trong Visual Basic. Phải truyền tham số là một giá trị thuộc kiểu dữ liệu đã được chỉ rõ cho tham số. Nếu không, ta phải truyền một biểu thức làm tham số. Visual Basic tính giá trị biểu thức và truyền nó theo kiểu dữ liệu được yêu cầu. Cách đơn giản chuyển 1 biến thành 1 biểu thức là đặt nó vào trong 1 cặp ngoặc đơn. Ví dụ, truyền 1 biến integer vào 1 thủ tục yêu cầu 1 tham số kiểu string: Sub CallingProcedure() Dim intX As Integer intX = 12 * 3 Foo(intX) End Sub Sub Foo(Bar As String) MsgBox Bar 'The value of Bar is the string "36". End Sub 90
  91. Kh¸i niÖm c¬ së vÒ lËp tr×nh (2) 5.7.3 Sử dụng các tham số tuỳ chọn Chúng ta có thể chỉ ra một số tham số trong 1 thủ tục/hàm là tuỳ chọn (tức là có thể không cần truyền khi gọi) bằng cách sử dụng từ khoá Optional. Chú ý rằng, mọi tham số theo sau từ khoá Optional đều là tuỳ chọn. Ví dụ: Dim strName As String Dim varAddress As Variant Sub ListText(x As String, Optional y As Variant) List1.AddItem x If Not IsMissing(y) Then List1.AddItem y End If End Sub Private Sub Command1_Click() strName = "yourname" ' Second argument is not ' provided. Call ListText(strName) End Sub 5.7.4 Đặt giá trị mặc định cho tham số tuỳ chọn Chúng ta có thể đặt giá trị mặc định cho tham số tuỳ chọn. Giá trị đó là giá trị mà tham số sẽ được nhận khi gọi thủ tục nếu nó không được truyền khi thủ tục/hàm chứa nó được gọi. Ví dụ: Sub ListText(x As String, Optional y As _ Integer = 12345) List1.AddItem x List1.AddItem y End Sub Private Sub Command1_Click() strName = "yourname" ' Second argument is not ' provided. Call ListText(strName) ' Adds "yourname" and ' "12345". End Sub 91
  92. Kh¸i niÖm c¬ së vÒ lËp tr×nh (2) 5.7.5 Sử dụng số tham với số lượng không định trước Số tham số cho 1 hàm/thủ tục thường được định sẵn khi khai báo nó. Nhưng nếu sử dụng từ khoá ParamArray, chúng ta có thể có khai báo cho phép có được số tham số là tuỳ ý khi gọi. Ví dụ: Dim x As Integer Dim y As Integer Dim intSum As Integer Sub Sum(ParamArray intNums()) For Each x In intNums y = y + x Next x intSum = y End Sub Private Sub Command1_Click() Sum 1, 3, 5, 7, 8 List1.AddItem intSum End Sub 92
  93. Kh¸i niÖm c¬ së vÒ lËp tr×nh (2) 5.8 Sử dụng biến Object Chúng ta có thể sử dụng biến để tham chiếu tới 1 object (đối tượng). Khi đó chúng ta cần khai báo biến, sau đó gán giá trị cho biến: Dim variable As class Set variable = object Ví dụ về khai báo biến: Dim FormVar As New frmMain ' Declare an object ' variable of type frmMain. Dim anyForm As Form ' Generic form variable. Dim anyText As TextBox ' Can refer to any text box ' (but only a text box). Dim anyControl As Control ' Generic control variable. Ví dụ về gán giá trị cho biến: Dim Bal As TextBox Set Bal = frmAccountDisplay!txtAccountBalance If Bal.Text < 0 Then Bal.BackColor = 0 Bal.ForeColor = 255 End If 93
  94. Môc lôc Mục lục 1 Giới thiệu về Visual Basic 6 2 1.1 Visual Basic là gì? 3 1.2 Các bản Visual Basic (Visual Basic Editions) 3 1.3 Cài đặt VB6 5 1.4 Tìm kiếm trợ giúp khi sử dụng VB6 6 2 Phát triển một ứng dụng với Visual Basic 7 2.1 Một số khái niệm cơ bản trong lập trình Windows 8 2.2 Mô hình hướng sự kiện 9 2.3 Phát triển tương tác 10 2.4 Môi trường phát triển tích hợp 11 2.5 Các bước cơ bản xây dựng chương trình 14 2.6 Chương trình Hello 15 2.7 Làm việc với Project 21 2.7.1 Project Explorer 21 2.7.2 Tạo, mở, lưu trữ một project 22 2.7.3 Đặt tuỳ chọn cho Project 22 3 Form và Control 24 3.1 Thuộc tính, sự kiện, phương thức 25 3.2 Form Error! Bookmark not defined. 3.2.1 Đặt giá trị thuộc tính cho form 27 3.2.2 Phương thức và sự kiện của form 28 3.3 Command button 29 3.4 Label Error! Bookmark not defined. 3.5 Text box 32 3.6 Check box 34 3.6.1 Chương trình ví dụ về Check box 34 3.7 Option Button và nhóm Option Button 36 3.7.1 Tạo nhóm Option Button 36 3.7.2 Chương trình ví dụ về Options 37 3.8 List box và Combo box 39 3.9 Các control khác 40 3.10 Focus Error! Bookmark not defined. 3.10.1 Sự kiện Validate của các control 43 3.10.2 Control không thể nhận focus 43 3.11 Đặt Tab Order 44 3.11.1 Bỏ một control ra khỏi Tab Order 45 3.12 Dialog Box 46 4 Khái niệm cơ sở về lập trình 47 4.1 Cơ bản về chương trình hướng sự kiện 47 4.2 Các module mã lệnh trong Visual Basic 49 4.2.1 Module Form 50 4.2.2 Module Standard 50 4.2.3 Module Class 50 4.3 Sử dụng Code Editor 51 4.4 Qui ước viết lệnh trong Visual Basic 53 4.4.1 Chia 1 lệnh thành nhiều dòng 53 4.4.2 Nối nhiều lệnh vào 1 dòng 53 4.4.3 Thêm chú giải vào mã lệnh 53 94
  95. Môc lôc 4.4.4 Hệ thống số 54 4.4.5 Qui tắc đặt tên 55 4.5 Biến số 56 4.5.1 Khai báo biến 56 4.5.2 Khai báo không tường minh 56 4.5.3 Khai báo tường minh 57 4.6 Hằng số 58 4.6.1 Tự khai báo 1 hằng số: 58 4.6.2 Phạm vi hằng số do người dùng định nghĩa 58 4.7 Kiểu dữ liệu 59 4.7.1 Khai báo biến với kiểu dữ liệu 59 4.7.2 Dữ liệu kiểu số 59 4.7.3 Kiểu Byte 59 4.7.4 Kiểu dữ liệu chuỗi 60 4.7.5 Trao đổi giữa chuỗi và số 60 4.7.6 Kiểu dữ liệu logic 61 4.7.7 Kiểu dữ liệu thời gian 61 4.7.8 Kiểu dữ liệu đối tượng 62 4.7.9 Kiểu dữ liệu Variant 62 4.7.10 Kiểu dữ liệu do người dùng tự định nghĩa 62 4.8 Mảng Error! Bookmark not defined. 4.8.1 Khai báo mảng tĩnh 63 4.8.2 Mảng chứa các mảng 63 4.8.3 Mảng nhiều chiều 63 4.9 Hàm và thủ tục 65 4.9.1 Khai báo hàm và thủ tục 65 4.9.2 Tạo 1 hàm/thủ tục chung: 66 4.9.3 Gọi 1 thủ tục 66 4.9.4 Gọi 1 hàm 66 4.9.5 Gọi hàm/thủ tục từ module khác 66 4.9.6 Truyền tham số cho hàm/thủ tục: 66 4.10 Cấu trúc điều khiển 68 4.10.1 Cấu trúc phân nhánh 68 4.10.2 Cấu trúc lặp 70 4.10.3 Làm việc với cấu trúc điều khiển 72 5 Khái niệm cơ sở về lập trình (tiếp) 74 5.1 Qui ước về cách đặt tên biến 75 5.2 Phạm vi của biến 78 5.2.1 Biến sử dụng trong 1 hàm/thủ tục 78 5.2.2 Biến sử dụng trong phạm vi 1 module 79 5.2.3 Biến sử dụng trong tất cả các module 79 5.3 Một số vấn đề khi sử dụng biến và hằng 80 5.3.1 Nhiều biến với cùng 1 tên 80 5.3.2 Biến công cộng và biến địa phương 82 5.3.3 Biến thuộc tính form và control 83 5.3.4 Tránh tham chiếu vòng 84 5.4 Chuyển đổi kiểu dữ liệu 85 5.5 Kiểu dữ liệu Variant 86 5.5.1 Giá trị Empty 86 5.5.2 Giá trị Null 86 95
  96. Môc lôc 5.5.3 Kiểm tra kiểu dữ liệu 87 5.6 Mảng động 88 5.6.1 Cách tạo 1 mảng động 88 5.6.2 Bảo tồn giá trị 1 mảng động 88 5.7 Truyền tham số cho hàm/thủ tục 89 5.7.1 Truyền tham số bằng giá trị 89 5.7.2 Truyền tham số bằng tham chiếu 90 5.7.3 Sử dụng các tham số tuỳ chọn 91 5.7.4 Đặt giá trị mặc định cho tham số tuỳ chọn 91 5.7.5 Sử dụng số tham với số lượng không định trước 92 5.8 Sử dụng biến Object 93 96