Giáo trình Visual Basic 6.0 - Nguyễn Đăng Quang

pdf 172 trang hapham 2830
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Visual Basic 6.0 - Nguyễn Đăng Quang", để 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_visual_basic_6_0_nguyen_dang_quang.pdf

Nội dung text: Giáo trình Visual Basic 6.0 - Nguyễn Đăng Quang

  1. TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT KHOA CÔNG NGHỆ THÔNG TIN GIÁO TRÌNH BIÊN SOẠN Nguyễn Đăng Quang THÁNG 09 - 2009
  2. 201 Mục lục Chương 1: GIỚI THIỆU I. CÁC MÔI TRƯỜNG LẬP TRÌNH 1 II. CÁC ĐỐI TƯỢNG ĐIỀU KHIỂN CHUẨN TRÊN WINDOWS 2 III. GIỚI THIỆU VISUAL BASIC 3 1. Khởi động - cửa sổ khởi động 3 2. Màn hình làm việc 5 IV. CÁC THAO TÁC CƠ BẢN VỚI ĐỐI TƯỢNG TRÊN FORM 10 1. Đưa một đối tượng lên form 10 2. Chọn đối tượng 11 3. Di chuyển 11 4. Hiệu chỉnh 11 5. Xóa 11 V. GHI NẠP MỘT VISUAL BASIC PROJECT 11 1. Thêm form mới vào chương trình 11 2. Xóa một form 12 3. Ghi Project 13 4. Nạp Project 14 5. Tạo Project mới 14 VI. MỘT CHƯƠNG TRÌNH VÍ DỤ 15 Chương 2: Đối tượng và cách sử dụng đối tượng I. ĐỐI TƯỢNG 17 1. Khái niệm 17 2. Các đặc điểm 17 3. Truy xuất 18 4. Các thuộc tính chung 18 5. Các sự kiện chung 19
  3. 202 II. ĐỐI TƯỢNG FORM 20 1. Thuộc tính 20 2. Phương thức 20 3. Xử lý sự kiện 20 III. ĐỐI TƯỢNG LABEL 22 1. Thuộc tính 22 2. Xử lý sự kiện 22 IV. ĐỐI TƯỢNG TEXTBOX 22 1. Thuộc tính 23 2. Xử lý sự kiện 23 V. ĐỐI TƯỢNG COMMAND BUTTON 23 1. Thuộc tính 23 2. Xử lý sự kiện 23 VI. FOCUS VÀ THỨ TỰ TAB 23 1. Focus 23 2. Thứ tự TAB 24 3. Phím nóng 24 4. Ví dụ 24 Chương 3: Kiểu dữ liệu – Hằng – Biến I. BIÊN 27 1. Định nghĩa 27 2. Khai báo 27 3. Qui tắc đặt tên biến 27 4. Truy xuất biến 27 5. Phạm vi sử dụng biến 28 6. Biến tĩnh 29 II. KIỂU DỮ LIỆU 30 III. HẰNG 30 IV. TOÁN TỬ 31
  4. 203 V. MỘT SỐ HÀM CHUẨN 31 1. Hàm đại số 31 2. Hàm thời gian 31 3. Hàm chuyển đổi 32 4. Hàm kiểm tra kiểu dữ liệu 32 VI. HỘP THÔNG BÁO 32 Chương 4: Các cấu trúc điều khiển I. LỆNH ĐIỀU KIỆN IF 35 II. LỆNH CHỌN LỰA CASE 35 III. LỆNH LẶP FOR NEXT 36 IV. LỆNH LẶP DO LOOP 37 V. CHƯƠNG TRÌNH CON 38 1. Chương trình con Sub 39 2. Hàm 39 3. Khai báo 40 Chương 5: Mảng – Chuỗi – Collection I. MẢNG 41 1. Định nghĩa 41 2. Khai báo 41 3. Mảng đối tượng điều khiển 42 4. Ví dụ 43 5. Mảng động và mảng tĩnh 44 6. Một số vấn đề khác 46 II. CHUỖI KÝ TỰ 48 1. Khai báo 48 2. Các hàm xử lý chuỗi 48 III. COLLECTION 49 1. Giới thiệu 49 2. Thao tác trên Collection 50
  5. 204 3. Ví dụ khác 53 Chương 6: TextBox – ListBox – ComboBox I. TEXTBOX 55 1. Các thuộc tính bổ sung 55 2. Sự kiện 55 3. Ví dụ 55 II. LISTBOX 57 1. Các thuộc tính 58 2. Các phương thức 59 3. Sự kiện 60 4. Một số ví dụ 62 III. COMBOBOX 65 IV. DRIVELISTBOX, DIRLISTBOX, FILELISTBOX 1. DriveListBox 66 2. DirListBox 66 3. FileListBox 66 Chương 7: Scrollbar – Image – Timer I. SCROLLBAR 69 1. Các thuộc tính 69 2. Sự kiện 69 3. Ví dụ 69 II. IMAGE 70 III. TIMER 71 1. Thuộc tính 71 2. Sự kiện 71 3. Ví dụ 71 Chương 8: Truy xuất dữ liệu
  6. 205 I. TRUY XUẤT DỮ LIỆU BẰNG ĐỐI TƯỢNG ĐK CÓ KẾT NỐI CSDL 73 1. DataControl 73 2. Các thuộc tính 73 3. Các đối tượng điều khiển có kết nối cơ sở dữ liệu 74 4. Sử dụng Databound Listbox và Combobox 75 5. Sử dụng Databound Grid Control (DBGrid) 78 II. TRUY XUẤT DỮ LIỆU THÔNG QUA DATA ACCESS OBJECT 84 1. Các thao tác cơ bản 84 2. Các thuộc tính của Recordset 85 3. Các thao tác trên Recordset 85 Chương 9: PictureBox –Xử lý mouse I. PICTUREBOX 91 1. Thuộc tính 91 2. Các phương thức đồ họa 92 3. Các thuộc tính qui định đơn vị vẽ 96 4. Các lệnh ghi nạp ảnh 97 II. XỬ LÝ MOUSE 98 Chương 10: Menu – Common Dialog I. Menu 103 1. Định nghĩa menu 103 2. Viết lệnh 104 II. COMMON DIALOG 106 1. Hộp thoại Open, Save 106 2. Hộp thoại chọn màu 108 Chương 11: Kiểu bản ghi – Tập tin I. KIỂU BẢN GHI 109 1. Định nghĩa 109 2. Khai báo 109 II. TẬP TIN 109
  7. 206 1. Định nghĩa 109 2. Phân loại 109 3. Thủ tục truy xuất dữ liệu trên tập tin 110 4. Các lệnh trên tập tin truy xuất ngẫu nhiên 110 III. CÁC LỆNH TRÊN TẬP TIN VĂN BẢN 113 Chương 12: Microsoft Windows Common Controls: ImageList – Listview – ImageCombo I. IMAGELIST 117 II. LISTVIEW 117 1. Các thuộc tính 118 2. Các thuộc tính của đối tượng ListItem 120 3. Phương thức 120 4. Sự kiện 123 III. IMAGECOMBO 123 1. Các thuộc tính 123 2. Các thuộc tính của đối tượng ComboItem 124 3. Các phương thức 125 Chương 13: Microsoft Windows Common Controls: Toolbar - Statusbar - Dtpicker I. TOOLBAR 127 1. Sử dụng Toolbar 127 2. Định nghĩa Toolbar 129 3. Định nghĩa nút Toolbar lúc chạy chương trình 130 II. STATUSBAR 131 1. Sử dụng 131 2. Viết lệnh cho StatusBar 133 III. DTPICKER 135 1. Thuộc tính 135 2. Sự kiện 137
  8. 207 Chương 14: Microsoft Windows Common Controls: Treeview - Updown – Slider – Progressbar I. TREE VIEW 139 1. Các thuộc tính 139 2. Các thuộc tính của đối tượng Node 140 3. Phương thức 141 4. Sự kiện 143 II. UPDOWN 144 1. Các thuộc tính 144 2. Sự kiện 144 III. SLIDER 145 1. Thuộc tính 145 2. Phương thức 146 3. Sự kiện 146 IV. PROGRESSBAR 147 Chương 15: RichTextBox – Form MDI I. RICHTEXTBOX 149 1. Các thuộc tính 149 2. Các phương thức 150 II. SỬ DỤNG RICHTEXTBOX 151 1. Chọn dáng vẻ Font chữ bằng nút lệnh trên Toolbar 151 2. Chọn Font chữ bằng lệnh trên menu và hộp thoại Font 152 3. Sự kiện SelChange 152 III. SỬ DỤNG CLIPBOARD 153 1. Sao chép vào Clipboard 153 2. Chép dữ liệu từ Clipboard vào văn bản 153 3. Cắt dữ liệu vào Clipboard 153 IV. SỬ DỤNG COMBOBOX CHỌN FONT VÀ CỠ CHỮ TRÊN TOOLBAR 154 V. MDI FORM 154
  9. 208 1. Đặc điểm 154 2. Form con MDI 155 3. Các thuộc tính và phương thức bổ sung so với form thường 155 4. Nạp cửa sổ con trong form MDI 156 5. Tạo ứng dụng MDI bằng Form Wizard 156 Chương 16: Lập trình Drag-and-Drop I. TỔNG QUAN 159 1. Kéo nhả tự động 159 2. Kéo nhả điều khiển bằng chương trình 160 II. MỘT CHƯƠNG TRÌNH VÍ DỤ 161 1. Khởi tạo hoạt động kéo-nhả 161 2. Chuẩn bi cho thao tác nhả trên đối tượng nguồn 162 3. Nhả trên đối tượng đích 164 4. Nạp dữ liệu theo yêu cầu 165 5. Kéo nhả File 165
  10. Giáo trình Visual Basic 6.0 1 Chương 1 Giới thiệu I. CÁC MÔI TRƯỜNG LẬP TRÌNH Lập trình: Viết chương trình Chương trình phải được chạy trên nền một Hệ điều hành. Trên máy PC có hai loại môi trường hệ điều hành : đó là môi trường DOS và môi trường Windows Đặc điểm của môi trường DOS • Hệ điều hành đơn chương : mỗi lúc chỉ có 1 chương trình làm việc. Lệnh trong chương trình sẽ qui định hoạt động kế tiếp mà người dùng sẽ tác động vào chương trình. • Về mặt giao diện: Mỗi lúc chỉ có một chương trình hoạt động. Khi hoạt động giao diện của chương trình sẽ chiếm toàn bộ màn hình. Chỉ khi chương trình này kết thúc thì chương trình khác mới có thể hoạt động được. • Về nguyên tắc lập trình: Lập trình thủ tục (Procedural Programming) • Các công cụ lập trình trên DOS thông dụng: BASIC, TURBO PASCAL, TURBO C Đặc điểm của môi trường Windows: • Hệ điều hành đa chương: mỗi lúc có thể có nhiều chương trình hoạt động đồng thời. Mỗi chương trình sẽ không biết trước hoạt động kế tiếp mà người dùng sẽ tác động vào chương trình • Giao diện đồ họa (GUI-Graphics User Interface): Mỗi chương trình khi hoạt động được trình bày trong 1 cửa sổ • Các chương trình Windows hoạt động theo nguyên tắc nhận và xử lý thông điệp (Message) đó là các tác động từ người dùng như các sự kiện bấm phím từ bàn phím, sự kiện từ mouse (di chuyển, bấm phím, nhả phím ) . Các tác động này sẽ được chuyển thành các thông điệp chứa trong hàng đợi (Message Queue) của hệ thống. Windows sẽ lần lượt xem xét các thông điệp và chuyển chúng đến các ứng dụng tương ứng. Chương trình đang hoạt động nhận thông điệp sẽ phản ứng theo cách của nó tuỳ theo ý nghĩa của từng loại thông điệp. Ví dụ: Sự kiện bấm phím trái chuột trên nuty Minimize sẽ làm cho cửa sổ phóng lớn, Sự kiện nhấp đúp phím trái chuột trên thanh tiêu đề sẽ làm cho cửa sổ phóng lớn (Maximize) hoặc hoàn nguyên (Restore) • Các công cụ lập trình thông dụng trên Windows: BPW (Borland Pascal for Windows), BCW (Borland C for Windows), Delphi, Visual C++, Visual Basic. Nguyễn Đăng Quang
  11. 2 Giáo trình Visual Basic 6.0 II. CÁC ĐỐI TƯỢNG ĐIỀU KHIỂN CHUẨN TRÊN WINDOWS Chương trình trên windows sử dụng giao diện đồ họa để giao tiếp với người sử dụng: Trên mỗi cửa sổ của 1 chương trình Windows sử dụng một số đối tượng điều khiển để người dùng ra lệnh. Có nhiều loại đối tượng với các chức năng khác nhau. Để có thể viết chương trình trên Windows, cần làm quen với các đối tượng chuẩn. 1. Command Button (Nút lệnh): được sử dụng để ra lệnh. Trên các hộp thoại, thường thấy các nút lệnh như OK để chấp nhận hoặc Cancel để hủy một yêu cầu. 2. Checkbox: được sử dụng để chọn hoặc không chọn một yếu tố nào đó Hình 1.1:CheckBox chọn chế độ đánh số trang cho trang đầu tiên trong chức năng đánh số trang của ứng dụng WORD 3. Option Button (Nút chọn): Thường hoạt động theo nhóm được sử dụng để chọn một trong nhiều yếu tố Hình 1.2:Chọn cách chuyển dạng chữ trong WORD 4. Textbox: Hộp nhập dữ liệu cho chương trình, có thể nhập 1 dòng hay nhiều dòng. 5. Label (Nhãn): đối tượng điều khiển được sử dụng trình bày một nội dung. 6. List box: Hộp danh sách được sử dụng trình bày một danh sách giá trị . 7. Combobox: Hộp danh sách hoạt động giống ListBox và TextBox, người dùng có thể nhập giá trị hoặc chọn một giá trị trong một danh sách cho trước.
  12. Giáo trình Visual Basic 6.0 3 Hình 1.3: Hộp thoại Print với các đối tượng TextBox, Label, ComboBox III. GIỚI THIỆU VISUAL BASIC 1. Khởi động - Cửa sổ khởi động Màn hình khởi động có dạng Hình 1.4: Cửa sổ khởi động-Thẻ New New: Sử dụng thẻ này để tạo ứng dụng mới, thường chọn biểu tượng đầu tiên (Standard EXE) cho các ứng dụng bình thường chạy trên Windows. Existing: Sử dụng thẻ này để mở một ứng dụng đang có trên dĩa. Nguyễn Đăng Quang
  13. 4 Giáo trình Visual Basic 6.0 Hình 1.5: Cửa sổ khởi động-Thẻ Existing Để ý là ứng dụng viết trên VB được gọi là project. Tập tin này có phần mở rộng VBP (Visual Basic Project) , VBG (Visual Basic Group) hoặc MAK - Phần mở rộng loại này chỉ được sử dụng cho các project viết trên VB3.0. Recent: Sử dụng thẻ này để nạp nhanh ứng dụng đã làm việc trước đó Hình 1.6: Cửa sổ khởi động-Thẻ Recent
  14. Giáo trình Visual Basic 6.0 5 2. Màn hình làm việc Màn hình Visual Basic có dạng ToolBa Menu r Bar Form ToolBo Window x Project Explore r Propert y Window Form Layout Window Hình 1.7: Màn hình làm việc Visual Basic • Thanh menu (Menu Bar) : Menu chính của chương trình. Cùng với các menu kéo xuống (Pulldown) - hệ thống menu trình bày tất cả các chức năng của màn hình VB. • Thanh công cụ (Toolbar): Giống các ứng dụng khác chạy trên Windows, thanh công cụ trình bày tất cả các chức năng thường sử dụng trong màn hình VB. • Hộp công cụ (Toolbox): Chứa các đối tượng điều khiển được sử dụng trong thiết kế giao diện của chương trình. Mỗi một biểu tượng trên ToolBox đại diện cho một đối tượng muốn sử dụng trong giao diện của chương trình. Khi di chuyển mouse trên các biểu tượng, lời nhắc chức năng của nút sẽ tự động xuất hiện. Đối tượng được chọn bằng cách click vào hình ảnh biểu tượng trên ToolBox. Đối tượng nào được chọn thì hình ảnh của nó sẽ được vẽ lõm xuống. ToolBox được đóng lại bằng nút close trên thanh tiêu đề. Làm toolbox xuất hiện trở lại bằng cách chọn View/Toolbox trên menu hoặc bấm nút Toolbox trên thanh công cụ Nút Toolbox Nguyễn Đăng Quang
  15. 6 Giáo trình Visual Basic 6.0 Hình 1.8: Chương trình có 2 form • Cửa sổ Form: Quản lý các cửa sổ được sử dụng trong chương trình. Mỗi cửa sổ trong chương trình gọi là form. Chương trình có bao nhiêu form sẽ có bấy nhiêu cửa sổ form. Hình trên trình bày một ứng dụng có 2 form • Cửa sổ Project (Project Explorer): Giúp người lập trình dễ dàng theo dõi và quản lý các tập tin trong chương trình đang viết. Mỗi chương trình VB có thể bao gồm nhiều loại tập tin đại điện cho các thành phần sử dụng trong chương trình. Các loại tập tin trong một chương trình VB có thể gồm: *.FRM: Tập tin form. Chương trình có bao nhiêu form sẽ có bấy nhiêu tập tin FRM *.BAS: Tập tin Module chứa các khai báo chung sử dụng trong chương trình Hình trên là cửa sổ Project của một chương trình có 2 form và 1 module Project Explorer được đóng lại bằng nút close trên thanh tiêu đề của cửa sổ . Làm xuất hiện trở lại bằng cách chọn View/Project Explorer trên menu hoặc bấm tổ hợp phím CTRL+R hoặc bấm nút Project Explorer trên thanh công cụ
  16. Giáo trình Visual Basic 6.0 7 • Cửa sổ thuộc tính (Properties Window): Mỗi đối tượng điều khiển trong chương trình có nhiều đặc điểm để mô tả tính chất của đối tượng như vị trí trên form, màu chữ Các đặc điểm thường sử dụng được mô tả trong cửa sổ thuộc tính. Thông qua cửa sổ này, người lập trình sẽ điều chỉnh các thuộc tính của đối tượng theo ý muốn trong quá trình thiết kế giao diện cho chương trình. Các thành phần của cửa sổ thuộc tính: Hình 1.9: Cửa sổ thuộc tính - Hộp chọn đối tượng: ComboBox phía trên chứa danh sách các đối tượng trên form đang thiết kế. Người lập trình có thể click trên form để chọn đối tượng cần điều chỉnh thuộc tính hoặc click chọn tên đối tượng trong danh sách này. - Thẻ Alphabetic trình bày các thuộc tính theo thú tự a, b, c của tên thuộc tính - Thẻ Categorize trình bày các thuộc tính theo nhóm chức năng Trong lúc thiết kế, thường xem thuộc tính theo thứ tự alphabetic Các thuộc tính đối tượng được trình bày thành 2 cột : cột bên trái là tên thuộc tính, cột bên phải là giá trị của thuộc tính. Cách điều chỉnh giá trị thuộc tính phụ thuộc vào thuộc tính cần điều chỉnh - có loại thuộc tính được điều chỉnh giá trị bằng cách nhập giá trị mới tại cột giá trị, có loại thuộc tính chỉ có thể điều chỉnh giá trị bằng cách chọn 1 trong danh sách giá trị đã được qui định trước Nguyễn Đăng Quang
  17. 8 Giáo trình Visual Basic 6.0 Hình 1.10: Nhập giá trị cho thuộc tính tiêu đề của form. Hình 1.11: Chọn thuộc tính cho viền của form, danh sách trị có sẵn
  18. Giáo trình Visual Basic 6.0 9 Properties Window được đóng lại bằng nút close trên thanh tiêu đề. Làm xuất hiện trở lại bằng cách chọn View/Properties Window trên menu hoặc bấm phím F4 hoặc bấm nút Properties Window trên menu • Cửa sổ Form Layout: Dùng điều chỉnh vị trí form khi xuất hiện lúc chạy chương trình. Trỏ chuột vào hình chữ nhật vẽ bên trong màn hình của cửa sổ và di chuyển để điều chỉnh vị trí. Thường vị trí của các form khi chạy sẽ được thực hiện bằng lệnh trong chương trình. Để thuận tiện cho việc thao tác trên cửa sổ thuộc tính thường đóng cửa sổ này trong lúc thiết kế. Muốn làm xuất hiện cửa sổ này, bấm nút Form Layout trên thanh công cụ • Cửa sổ lệnh: Cửa số dùng viết lệnh cho các đối tượng trên 1 form. Mỗi Form có một cửa sổ lệnh, cửa sổ lệnh chỉ xuất hiện khi nhấp đúp lên đối tượng muốn viết lệnh. Cửa sổ lệnh gồm các thành phần sau: - Hộp chọn đối tượng (Combo box phía trên bên trái) - Click để chọn đối tượng muốn viết lệnh Hình 1.12: Chọn đối tượng viết lệnh - Hộp chọn loại sự kiện (ComboBox phía trên bên phải) - Click để chọn sự kiện muốn viết lệnh. Nguyễn Đăng Quang
  19. 10 Giáo trình Visual Basic 6.0 Hình 1.13: Chọn sự kiện viết lệnh Khi một sự kiện được chọn, dòng khai báo của thủ tục tương ứng xuất hiện trong cửa sổ phía dưới. Ví dụ: Chọn đối tượng nút bấm CmdPt, sự kiện Click. Dòng khai báo thủ tục có dạng Private sub CmdPt_Click(Index As Integer) End sub Phần lệnh bên trong do người lập trình viết Hình 1.14: Viết lệnh bên trong các khai báo thủ tục IV. CÁC THAO TÁC CƠ BẢN VỚI ĐỐI TƯỢNG TRÊN FORM 1. Đưa một đối tượng lên form • Nhấp đúp tại nút đối tượng trên Toolbox, đối tượng sẽ xuất hiện ngay giữa form. Hoặc
  20. Giáo trình Visual Basic 6.0 11 • Click đối tượng trên Toolbox, con trỏ chuyển thành dạng + trên form, • Click tại vị trí cần đặt đối tượng trên form, • Kéo lê để định kích thước đối tượng trên form, • Nhả . Lưu ý: Trong khi kéo để qui định kích thước đối tượng, có thể quan sát kích thước trên Toolbar hoặc dừng lại đủ lâu trên form, ô kích thước sẽ xuất hiện. 2. Chọn đối tượng trên form Chọn một đối tượng • Click tại đối tượng cần chọn Chọn nhiều đối tượng cùng lúc • Bấm Shift và Click để chọn nhiều đối tượng Hoặc • Sử dụng biểu tượng chọn trên Toolbox để xác định vùng hình chữ nhật bao quanh các đối tượng cần chọn 3. Di chuyển • Chọn một hoặc nhiều đối tượng cần di chuyển • Kéo đến vị trí mới • Nhả 4. Hiệu chỉnh kích thước một đối tượng • Chọn đối tượng • Trỏ mouse vào 1 trong 8 nút điều khiển quanh đối tượng chọn, kéo để điều chỉnh kích thước 5. Xoá • Chọn một hoặc nhiều đối tượng muốn xoá • Bấm DEL V. GHI NẠP MỘT VB PROJECT Phần này trình bày các thao tác thường sử dụng đối với màn hình làm việc VB để quản lý các form, module trong một Project. Đó là cách ghi một project sau khi thiết kế hoặc nạp một Project có sẵn trên dĩa. 1. Thêm một form mới vào chương trình Trường hợp thêm form mới • Right-click trong Project Explorer/Add/Form, • Nhấp đúp biểu tượng Form trong hộp thoại Add Form, form mới sẽ được thêm vào project (hình 1.15). Trường hợp thêm form có sẵn trên dĩa (từ Project khác) • Right-click trong Project Explorer/Add/Form , • Chọn thẻ Exising, nhấp đúp form cần thêm vào (hình 1.16) . Nguyễn Đăng Quang
  21. 12 Giáo trình Visual Basic 6.0 Hình 1.15: Thêm một form mới vào chương trình Hình 1.16: Thêm một form có sẵn vào chương trình 2. Xoá một form • Right-Click form muốn xoá trong Project Explorer, • Chọn Remove form trên menu.
  22. Giáo trình Visual Basic 6.0 13 3. Ghi Project lên dĩa Cần nhắc lại là Project trong VB gồm nhiều thành phần như form, Module mỗi form hoặc Module sẽ được ghi thành một tập tin. Như vậy phải đặt tên cho các form và module khi ghi Project. • Bấm nút Save trên Toolbar hoặc chọn lệnh File/Save Project, • VB sẽ lần lượt nhắc đặt tên cho các form. Hộp thoại đặt tên form có dạng hình 1.17 Hình 1.17: Hộp thoại đặt tên form khi ghi • Nhập tên form vào hộp File name, • Bấm nút Save và lặp lại bước này cho tất cả các form trong chương trình, • Sau khi ghi tất cả các form. Xuất hiện hộp thoại đặt tên Project. Tập tin Project có phần mở rộng VBP. Hình 1.18: Hộp thoại đặt tên chương trình Nguyễn Đăng Quang
  23. 14 Giáo trình Visual Basic 6.0 Lưu ý: VB chỉ nhắc đặt tên khi ghi Project lần đầu tiên 4. Nạp Project từ dĩa • Bấm nút Open trên Toolbar hoặc chọn lệnh File/Open Project. Hộp thoại Open project xuất hiện, • Nhấp đúp tên project cần mở để nạp vào màn hình VB. Hình 1.19: Nạp Project từ dĩa 5. Tạo Project mới • Chọn lệnh File/New Project. Hộp thoại New project xuất hiện, • Nhấp đúp biểu tượng Stanđar EXE để tạo project mới. Hình 1.20: Tạo một Project mới
  24. Giáo trình Visual Basic 6.0 15 VI. MỘT CHƯƠNG TRÌNH VÍ DỤ Thiết kế chương trình nhập hai số, tính tổng và in kết quả Giao diện chương trinh có dạng như sau: Hình 1.21: Giao diện của chương trình ví dụ • Nhập số thứ nhất vào Textbox phía trên. • Nhập số thứ hai vào Textbox phía dưới. • Bấm nút “Tính”. Kết quả phép cộng 2 số xuất hiện trong ô dưới cùng Các bước thực hiện như sau: 1. Khởi động Visual Basic , chọn New/ Standard EXE 2. Điều chỉnh các thuộc tính của form1 theo như bảng sau: Thuộc tính (Property) Giá trị (Value) Name frmTinh Caption Cong hai so Height 2500 Width 2800 3. Nhấp đúp Label trên Toolbox để đặt Label lên giữa form. Di chuyển và đặt các thuộc tính theo như bảng sau: Thuộc tính (Property) Giá trị (Value) Name Label1 Caption Nhap so thu 1 4. Làm tương tự như bước 3 với các thuộc tính theo như bảng sau: Thuộc tính (Property) Giá trị (Value) Name Label2 Caption Nhap so thu 2 5. Nhấp đúp Textbox trên Toolbox. Textbox thứ nhất sẽ xuất hiện chính giữa form. Di chuyển và điều chỉnh các thuộc tính theo bảng sau: Thuộc tính (Property) Giá trị (Value) Alignment 1 - Right justify Name txtSo1 Height 315 Width 735 Nguyễn Đăng Quang
  25. 16 Giáo trình Visual Basic 6.0 6. Nhấp đúp Textbox trên Toolbox. Textbox thứ hai sẽ xuất hiện chính giữa form. Di chuyển và điều chỉnh các thuộc tính theo bảng sau: Thuộc tính (Property) Giá trị (Value) Alignment 1 - Right justify Name txtSo2 Height 315 Width 735 7. Nhấp đúp Textbox trên Toolbox. Textbox thứ ba sẽ xuất hiện chính giữa form. Di chuyển và điều chỉnh các thuộc tính theo bảng sau: Thuộc tính (Property) Giá trị (Value) Alignment 1 - Right justify Name txtTong Locked True Height 315 Width 735 8. Nhấp đúp CommandButton trên Toolbox. Button sẽ xuất hiện chính giữa form. Di chuyển và điều chỉnh các thuộc tính theo bảng sau: Thuộc tính (Property) Giá trị (Value) Name CmdTinh Caption Tinh Height 330 Width 1335 9. Nhấp đúp CommandButton để viết mã lệnh cho chức năng tính toán khi người dùng bấm vào nút này. Cửa sổ mã lệnh sẽ xuất hiện với phần khai báo thủ tục khi bấm nút được định nghĩa sẵn: Private Sub CmdTinh_Click() End Sub Nhập lệnh để cuối cùng ta có Private Sub CmdTinh_Click() txtTong.Text = Val(txtSo1.Text) + Val(txtSo2.Text) End Sub 10. Bấm nút Run trên Toolbar hoặc F5 để chạy chương trình. Nhập 2 số vào 2 text box. Bấm nút tính. Kết quả cộng 2 số xuất hiện trong ô thứ 3. 11. Chọn File/Save Project để save các tập tin của Project như sau: FrmTinh.FRM :Tập tin định nghĩa form frmTinh Vd1.VBP :Tập tin định nghĩa Project
  26. Giáo trình Visual Basic 6.0 17 Chương 2 Đối Tượng và cách sử dụng Đối Tượng I. ĐỐI TƯỢNG 1. Khái niệm Visual Basic là ngôn ngữ lập trình kiểu đối tượng, chương trình Basic gồm các đối tượng. Làm việc với VB chính là làm việc với các đối tượng. 2. Các đặc điểm của đối tượng a. Tên Mỗi đối tượng được đặt tên. Tên đối tượng được viết theo qui tắc sau: • Có chiều dài tối đa 40 ký tự • Không được bắt đầu bằng số • Không có khoảng trắng Để phân biệt đối tượng này với đối tượng khác, tên đối tượng được viết kèm với tiền tố (prefix) chỉ loại đối tượng. Các tiền tố được qui định như sau: Loại đối tượng Tiền tố Loại đối tượng Tiền tố CheckBox chk Horizontal ScrollBar hsb ComboBox cbo Image img Command Button cmd Label lbl Common Dialog cdl Line lin Data Control dat ListBox lst Data Bounddbc Menu mnu ComboBox Data Bound Grid dbg OLE Container ole Data Bound ListBox dbl Option Button opt Directory ListBox dir Picture Box pic Drive ListBox drv Shape shp File ListBox fil TextBox txt Form frm Timer tmr b. Thuộc tính (property) Mỗi đối tượng có một số thuộc tính dùng mô tả đối tượng như vị trí, kích thước, trạng thái Các thuộc tính của đối tượng trình bày trong cửa sổ thuộc tính. c. Phương thức (method) Là các hành vi của mỗi đối tượng như di chuyển (move), phóng lớn cửa sổ (maximize), thu nhỏ cửa sổ (minimize) Nguyễn Đăng Quang
  27. 18 Giáo trình Visual Basic 6.0 d. Sự kiện (Event) Là các tác động lên đối tượng, mỗi đối tượng sẽ phản ứng lại theo cách của nó tùy theo biến cố tác động vào. Người lập trình sẽ định nghĩa các lệnh để chương trình đáp ứng lại các biến cố tác động lên các đối tượng Khi người lập trình tạo ra một đối tượng, cần: • Đặt tên (điều chỉnh thuộc tính Name) • Qui định thuộc tính (trong cửa sổ thuộc tính) • Định nghĩa các hoạt động của đối tượng tùy theo biến cố tác động vào (chọn loại biến cố trong code view window) 3. Truy xuất đối tượng Truy xuất đối tượng bao gồm: • Đọc hoặc đặt giá trị cho một thuộc tính • Gọi một phương thức Để truy xuất một đối tượng, sử dụng cách viết . Ví dụ: adoRS.MoveNext CmdPrint.Enabled = True 4. Các thuộc tính chung - Left, Top: Tọa độ góc trên bên trái. - Height, Weight: Chiều cao, độ rộng đối tượng. - ForeColor, BackColor: Màu chữ, màu nền đối tượng. Có thể chọn màu theo bộ màu chuẩn của windows hoặc chọn màu tùy ý trên các thẻ tương ứng tại thuộc tính này trong cửa sổ thuộc tính (Hình 2.1). Hình 2.1: Các thẻ chọn màu
  28. Giáo trình Visual Basic 6.0 19 Bảng sau trình bày một số hằng khai báo giá trị màu hệ thống Hằng Giá trị (Hex) Ý nghĩa vbActiveBorder &H8000000A Màu viền cửa sổ hoạt động vbActiveTitleBar &H80000002 Màu thanh tiêu đề cửa sổ hoạt động vbActiveTitleBarText &H80000009 Màu chữ tiêu đề cửa sổ hoạt động vbApplicationWorkspace &H8000000C Màu nền cửa sổ ứng dụng giao diện đa tài liệu (MDI) vbButtonFace &H8000000F Màu nút lệnh vbButtonShadow &H80000010 Màu bóng viền nút lệnh vbButtonText &H80000012 Màu chữ trên nút vbDesktop &H80000001 Màu desktop vbGrayText &H80000011 Màu chữ trên đối tượng không hoạt động vbHighlight &H8000000D Màu nền phần được chọn vbHighlightText &H8000000E Màu chữ phần được chọn vbInactiveBorder &H8000000B Màu viền cửa sổ không hoạt động vbInactiveCaptionText &H80000013 Màu chữ tiêu đề cửa sổ không hoạt động vbInactiveTitleBar &H80000003 Màu thanh tiêu đề cửa sổ không hoạt động vbInactiveTitleBarText &H80000013 Màu chữ tiêu đề cửa sổ không hoạt động vbInfoBackground &H80000018 Màu nền lời nhắc (ToolTips) vbInfoText &H80000017 Màu chữ lời nhắc vbMenuBar &H80000004 Màu nền menu vbMenuText &H80000007 Màu chữ menu vbScrollBars &H80000000 Màu thanh cuộn vbWindowBackground &H80000005 Màu nền cửa sổ vbWindowFrame &H80000006 Màu khung cửa sổ vbWindowText &H80000008 Màu chữ trong cửa sổ Enabled: Thuộc tính cho phép đối tượng hoạt động (True, False). Font: Thuộc tính chọn Font chữ. Visible: Thuộc tính cho phép xuất hiện đối tượng (True, False). Index: Chỉ số mảng (mảng đối tượng). ToolTipText: Chuỗi lời nhắc khi trỏ chuột trên đối tượng. 5. Các sự kiện chung Sự kiện Xảy ra khi Click Người dùng click trên đối tượng DblClick Người dùng nhấp đúp trên đối tượng DragDrop Người dùng kéo nhả một đối tượng DragOver Người dùng kéo một đối tượng qua một đối tượng khác Gotfocus Đối tượng nhận focus Nguyễn Đăng Quang
  29. 20 Giáo trình Visual Basic 6.0 KeyDown Người dùng nhấn một phím trong khi đối tượng đang nhận focus KeyPress Người dùng nhấn và nhả một phím trong khi đối tượng đang nhận focus KeyUp Người dùng nhả phím trong khi đối tượng đang nhận focus LostFocus Đối tượng không nhận focus nữa MouseDown Người dùng bấm một phím bất kỳ trên mouse trong khi mouse pointer đang ở vị trí đối tượng MouseMove Người dùng di chuyển mouse trên đối tượng MouseUp Người dùng nhả phím mouse trong khi mouse pointer đang ở vị trí đối tượng II. ĐỐI TƯỢNG FORM 1. Thuộc tính Thuộc tính Ý nghĩa Caption Đặt tiêu đề cho form. Giá trị mặc định là tên form BorderStyle Quy định kiểu khung cho form Appearance Qui định cách thể hiện form (Flat/ 3D) ControlBox Có hoặc không có Control Menu Box (True/False) MaxButton Làm mờ nút phóng lớn (True/False) MinButton Làm mờ nút thu nhỏ (True/False) Icon Qui định Icon đại diện cho form Picture Đặt hình làm nền cho form Moveable Di chuyển/ Không di chuyển được (True/False) ShownInTaskbar Có nút đại diện chương trình trên taskbar (True/False) WindowState Trạng thái form (Normal/Minimized/Maximized) 2. Phuơng thức Show Xuất hiện form Hide Che dấu form Ví dụ: frmMain.Show ‘ Làm xuất hiện form Hoặc FrmMain.Hide ‘ Che dấu form Lưu ý: Phương thức Show nạp form vào bộ nhớ và làm xuất hiện nó trên màn hình. Nếu form đã được nạp vào trước đó thì nó chỉ làm xuất hiện form trên . Phương thức Hide làm form không xuất hiện trên màn hình, nó vẫn còn được nạp vào bộ nhớ, để giải phóng form khỏi bộ nhớ, sử dụng phương thức Unload 3. Xử lý sự kiện (Handling Event) Sau đây là một số sự kiện quan trọng đối với một form
  30. Giáo trình Visual Basic 6.0 21 Sự kiện Xảy ra khi Load Form được nạp vào bộ nhớ Activate Form xuất hiện lần đầu tiên hoặc khi chuyển trở lại form từ một form khác Deactivate Người dùng chuyển sang form khác hoặc form thực hiện phương thức hide Unload Form được giải phóng khỏi bộ nhớ Initialize Form được tạo ra ban đầu trong bộ nhớ Ví dụ 1 - Kiểm tra các sự kiện Initialize, Load, Unload: 1. Khởi động Visual Basic/Standard EXE 2. Nhấp đúp vào form1 để mở cửa sổ mã lệnh (code window), viết lệnh cho sự kiện Load như sau: Private Sub Form_Load() MsgBox "Form Load Event" End Sub 3. Lặp lại bước 3 để định nghĩa mã lệnh cho các sự kiện Initialize và Unload Private Sub Form_Initialize() MsgBox "Form Initialization Event" End Sub Private Sub Form_Unload(Cancel As Integer) MsgBox "Form Unload Event" End Sub 4. Bấm F5 để chạy chương trình, để ý các Message Box sẽ xuất hiện theo thứ tự do trình tự Initialize Æ Load Æ Unload Hình 2.2: Kiểm tra các sự kiện Load, Unload, Initialize Nguyễn Đăng Quang
  31. 22 Giáo trình Visual Basic 6.0 Ví dụ 2 - Kiểm tra các phương thức Show, Hide, Unload Chương trình khi chạy sẽ xuất hiện 1 form như hình. Bấm nút “Show second form”, form thứ 2 sẽ xuất hiện. Bấm nút “Close this form” , form thứ 2 sẽ đóng lại. Các bước thiết kế như sau: 1. New/Standard EXE 2. Đặt thuộc tính Caption của Form 1 thành Vi du 2 - Form 1 3. Nhấp đúp CommandButton trên ToolBox, Button xuất hiện trên Form1. Điều chỉnh thuộc tính Caption thành “Show second form” 4. Bấm nút Add form/form để thêm form2. 5. Đặt thuộc tính Caption của Form 2 thành Vi du 2 - Form 2 6. Nhấp đúp CommandButton trên ToolBox, Button xuất hiện trên Form2. Điều chỉnh thuộc tính Caption thành “Close this form” 7. Nhấp đúp Button trên form 2 , định nghĩa mã lệnh như sau: Private Sub Command1_Click() Unload Me End Sub 8. Nhấp đúp Button trên form 1 , định nghĩa mã lệnh như sau: Private Sub Command1_Click() Form2.Show End Sub Bấm F5 chạy chương trình để kiểm tra kết qủa III. LABEL Trình bày một nội dung trên form 1. Thuộc tính Thuộc tính Ý nghĩa Caption Qui định nội dung trình bày Alignment Quy định kiểu canh lề trong Label (0-Left 1- Right 2- Center) BackStyle Kiểu nền Label (0 - Transparent 1 - Opaque) AutoSize Tự động co giãn kích thước Label để thể hiện đầy đủ nội dung (True/False) Wordwrap Tự động cuộn chữ (True/False) Và các thuộc tính chung 2. Xử lý sự kiện Gồm các sự kiện chung IV. TEXTBOX Cho phép người dùng nhập một nội dung
  32. Giáo trình Visual Basic 6.0 23 1. Thuộc tính Thuộc tính Ý nghĩa Text Chứa nội dung nhập vào Alignment Quy định kiểu canh lề trong TextBox (0-Left 1- Right 2- Center) Locked Cho phép thay đổi nội dung textbox (True/False) MaxLength Qui định chiều dài tối đa cho phép nhập Multiline Cho phép nhập nội dung nhiều dòng (True/False) Và các thuộc tính chung 2. Xử lý sự kiện Gồm các sự kiện chung V. COMMANDBUTTON Đối tượng được sử dụng để ra lệnh 1. Thuộc tính Caption Nội dung thể hiện trên nút bấm Và các thuộc tính chung. 2. Xử lý sự kiện Gồm các sự kiện chung VI. FOCUS VÀ THỨ TỰ TAB 1. Focus Trên màn hình Windows, mỗi một đối tượng điều khiển khi được chọn để hoạt động (Active) sẽ nhận focus. Khi một cửa sổ hoặc form đang nhận focus thanh tiêu đề (Title Bar) sẽ có màu đậm. Khi một đối tượng điều khiển trên form nhận focus sẽ có đường viền bao quanh đối tượng hoặc cursor xuất hiện bên trong đối tượng (Textbox). Người dùng có thể thay đổi focus của đối tượng trên form bằng cách sử dụng phím Tab hoặc Shift+Tab. Đối tượng nhận focus sẽ phản ứng với các sự kiện bấm phím Nút chọn đang Nút bấm đang nhận Focus nhận Focus Hình 2.3: Đối tượng nhận Focus Nguyễn Đăng Quang
  33. 24 Giáo trình Visual Basic 6.0 2. Thứ tự Tab (Tab Order) Người dùng có thể chọn đối tượng nhận focus trên form bằng cách bấm phím Tab hoặc Shift+Tab theo thứ tự các đối tượng được đặt lên form. Có thể qui định thứ tự này trong lúc thiết kê giao diện chương trình bằng cách điều chỉnh thuộc tính TabIndex. Đối tượng nhận focus đầu tiên trên form sẽ có TabIndex = 0. Để chọn đối tượng nhận focus trên form bằng chương trình, sử dụng phương thức SetFocus. 3. Phím nóng (HotKey) Là tổ hợp phím kết hợp giữa phím Alt và một phím khác. Hotkey được sử dụng để chọn nhanh một đối tượng trên form bằng bàn phím mà không cần bấm phím TAB để chọn đối tượng theo thứ tự Tab . Hotkey được định nghĩa trên thuộc tính Caption của đối tượng bằng cách nhập ký tự “&” phía trước ký tự muốn định nghĩa Hotkey Ví dụ: Muốn Đối tượng có Giá trị HotKey Giá trị của thuộc tính Hotkey Caption Alt+C &Close Alt+S In &Sync Alt+S &Nam Riêng TextBox thì Hotkey được định nghĩa trên thuộc tính Caption của Label đi kèm với TextBox. Label được gọi là đi kèm với TextBox nếu TabIndex của nó có giá trị kế trước (nhỏ hơn 1 đơn vị) giá trị TabIndex của TextBox 4. Ví dụ Phần sau trình bày ví dụ về các định nghĩa Hotkey và thứ tự nhận focus cho chương trình ví dụ đã trình bày ở chương 1 Mở lại project vd1.prj đã làm ở chương 1, điều chỉnh lại thuộc tính của các đối tượng theo như bảng sau: Form1 TextBox1 Thuộc tính (Property) Giá trị (Value) Thuộc tính (Property) Giá trị (Value) Name FrmTinh Name txtSo1 Caption Cong hai so Height 315 Height 2500 Width 735 Width 2800 TabIndex 1 Label1 Label2 Thuộc tính (Property) Giá trị (Value) Thuộc tính (Property) Giá trị (Value) Name Label1 Name Label2 Caption Nhap so thu &1 Caption Nhap so thu &2 TabIndex 0 TabIndex 2
  34. Giáo trình Visual Basic 6.0 25 TextBox2 Width 1335 Thuộc tính (Property) Giá trị (Value) TabIndex 4 Name txtSo2 TextBox3 Height 315 Thuộc tính (Property) Giá trị (Value) Width 735 Name txtTong TabIndex 3 Locked True CommandButton Height 315 Thuộc tính (Property) Giá trị (Value) Width 735 Name CmdTinh TabIndex 5 Caption &Tinh Height 330 Bấm F5 chạy chương trình. Để ý thứ tự nhận focus là TextBox1, TextBox2 và CommandButton. Các Hotkey Alt+1, Alt+2, Alt+T cũng có tác dụng tương tự. Muốn con trỏ tự động chuyển sang TextBox dưới để nhập số thứ hai sau khi nhập số thư nhất và bấm Enter, viết lệnh cho sự kiện bấm phím trên có TextBox như sau:thêm khả năng chuyển focus bằng cách bấm Enter sau khi nhập số tại các Textbox, có thể định nghĩa thêm các thủ tục xử lý sự kiện bấm phím Enter cho các Textbox1 và 2 như sau: Private Sub txtSo1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 then txtSo2.Setfocus End Sub Private Sub txtSo2_KeyPress(KeyAscii As Integer) If KeyAscii = 13 then CmdTinh.Setfocus End Sub Nguyễn Đăng Quang
  35. Giáo trình Visual Basic 6.0 27 Chương 3 Kiểu dữ liệu – Hằng – Biến I. BIẾN (Variable) 1. Định nghĩa Biến là ô nhớ chứa dữ liệu, giá trị của biến có thể thay đổi trong chương trình. 2. Khai báo Dạng Dim As [, As ] Hoặc Dim Trường hợp đầu, kiểu biến được khai báo rõ ràng, trường hợp sau kiểu của biến sẽ được xác định khi có lệnh gán giá trị cho biến. Ví dụ: Dim X As Integer Dim Ht As String 3. Qui tắc đặt tên biến − Có chiều dài tối đa 255 − Không được bắt đầu bằng số − Không sử dụng khoảng trắng − Không dùng các ký hiệu toán tử − Không trùng từ khoá − Không phân biệt chữ thường và chữ in Ví dụ Các biến đặt tên đúng MyNum& i% iNumOne strInputValue Các biến đặt tên sai 1Week Ho ten Giai.thua 4. Truy xuất biến Biến được truy xuất bằng cách viết tên. Ví dụ Dim X As Integer Nguyễn Đăng Quang
  36. 28 Giáo trình Visual Basic 6.0 Dim Y As Integer X = 5 Y = 7 X = Y+2 ‘ Trị của biến X được gán bằng trị của biến Y cộng thêm 2 X = X+1 ‘ Tăng giá trị của biến X Lưu ý Biến sử dụng có thể không cần khai báo. Điều này có thể gây ra lỗi , ví dụ: Dim Songay Dim X Songay = 1 X = 5 SoNgau = X+1 ‘ Visual Basic xem Songau là biến mới Để buộc Visual Basic không tự động tạo biến khi chưa khai báo có thể thực hiện 1 trong 2 cách sau: ƒ Viết phát biểu Option Explicit trong phần General của cửa sổ lệnh. ƒ Qui định bằng tuỳ chọn Require variable Declaration trong Tools/Options/Editor Giá trị ban đầu của các loại biến sau khi khai báo như sau: Kiểu dữ liệu Giá trị đầu Integer 0 Long 0 Single 0 Double 0 String "" (blank) Boolean False Variant EMPTY Date 0 Currency 0 5. Phạm vi sử dụng biến Một biến được khai báo chỉ tồn tại trong phạm vi khai báo, ngoài phạm vi đó mà sử dụng lại Visual Basic sẽ xem như biến mới. • Biến khai báo trong chương trình con chỉ có ý nghĩa trong chương trình con đó. Trong ví dụ sau, các biến X, Y, Z chỉ có ý nghĩa trong thủ tục xử lý sự kiện cmdTinh. Private sub cmdTinh() Dim X As Integer Dim Y As Integer Dim Z As Integer
  37. Giáo trình Visual Basic 6.0 29 X = CInt(txtSo1.Text) Y = CInt(txtSo2.Text) TxtTong.Text = X+Y End sub • Biến khai báo với từ khoá Dim trong phần General của form có ý nghĩa tòan cục trong form, tất cả các chương trình con định nghĩa trong form đều có thể sử dụng biến này. Dim a As Integer Form1 Dimb As Integer Form2 ‰ Biến a chỉ có ý nghĩa trong form1 ‰ Biến b chỉ có ý nghĩa trong form2 • Biến khai báo với từ khoá Public trong phần General của form có ý nghĩa trong tất cả các chương trình con định nghĩa trong form đó và có thể sử dụng trong form khác bằng cách viết . Publica As Integer Form1 Dim b As Integer Form2 Private sub xxx() ‰ Biến a có thể sử dụng Form1.a trong form khác ‰ Biến b chỉ có ý nghĩa End sub trong form2 • Biến khai báo với từ khoá Public trong Module có ý nghĩa trong toàn bộ chương trình. Private sub XXX() Form1 m Form2 Module End sub Private sub xxx()Public m As Integer m ‰ Biến m có thể sử dụng trong toàn bộ chương End sub trình Nguyễn Đăng Quang
  38. 30 Giáo trình Visual Basic 6.0 6. Biến tĩnh Là biến được khai báo với từ khoá static trong 1 chương trình con. Giá trị của biến tĩnh được sử dụng lại cho các lần gọi sau của chương trình con Ví dụ: Thông báo số lần bấm nút, biến iNumOfClicks được khai báo tĩnh. Private Sub MyButton_Click() Static iNumOfClicks as Integer iNumOfClicks = iNumOfClicks + 1 MsgBox "Number of Clicks: " & CStr(iNumOfClicks) End Sub II. KIỂU DỮ LIỆU Kiểu Kích thước Phạm vi chứa Byte 1 byte 0 255 Integer 2 bytes -32,768 32,767 Long 4 bytes Khoảng +/- 2.1E9 Single 4 bytes -3.402823E38 -1.401298E-45 (giá trị âm) 1.401298E-45 3.402823E38 (Giá trị dương) Double 8 bytes -1.79769313486232E308 -4.94065645841247E-324 (giá trị âm) 4.94065645841247E-324 1.79769313486232E308 (giá trị dương) Currency 8 bytes 922,337,203,685,477.5808 922,337,203,685,477.5807 String 1 byte cho mỗi 65,000 đối với chuỗi có kích thước cố định ký tự 2 tỷ đối với chuỗi động Boolean 2 bytes True , False Date 8 bytes Jan 1st 100 December 31st 9999 Variant 16 bytes + 1 byte cho mỗi ký tự III. HẰNG Hằng là đại lượng có giá trị không thay đổi trong chương trình. Hằng được khai báo trong phần General. Qui tắc đặt tên hằng cũng như biến. Hằng thường được khai báo bằng ký tự chữ in hoa. Khai báo hằng được viết như sau: Const [ As ] = Ví dụ: Const METER_TO_FEET = 3.3
  39. Giáo trình Visual Basic 6.0 31 IV. TOÁN TỬ Toán tử Ý nghĩa ^ Mũ - Đảo dấu *, / Nhân chia \ Chia nguyên Mod Lấy phần dư phép chia số nguyên +, - Cộng, trừ & Ghép chuỗi =, , = Not, And, Or Luận lý V. MỘT SỐ HÀM CHUẨN 1. Hàm đại số Hàm Ý nghĩa Ví dụ Abs(n) ⏐x⏐ Abs(-5) = 5 Sqr(x) Căn bậc 2 Sqr(4)=2 Exp(x) ex Exp(1)= 2.718282 Log(x) Logx Tính logn(x)=Log(x)/log(n) Int(x) Số nguyên ≤ x Int(8.9) = 8, Int(-8.9)= -9 Fix(x) Số nguyên ≤ x Fix(8.4) = 8, Fix(-8.9)= -8 Round(x[,n]) Làm tròn đến n chữ số phần thập Round(4.5)=6, phân Round(34.673,2)=34.67 Sin(x) sinx Sin(pi/2)=1 Cos(x) cosx Cos(pi/3)=0.5 Tan(x) tgx Atn(x) arctgx 2. Hàm thời gian Hàm Ý nghĩa Ví dụ Date Ngày hệ thống Dim dt As Date Dt = Date Day(d) Ngày trong tháng (1-31) Day(#12/2/00#)=2 Month(d) Tháng (1-12) Month(#12/2/00#)=12 Year(d) Năm Year((#12/2/00#)=2000 Weekday(d) Ngày trong tuần (1-Chủ nhật, 2-Thứ Weekday(Date) hai, 7-Thứ bảy) Nguyễn Đăng Quang
  40. 32 Giáo trình Visual Basic 6.0 3. Hàm chuyển đổi Hàm Ý nghĩa Ví dụ Asc(n) Mã Ascii của ký tự n Asc(‘a’)=97, asc(‘A’)=65 Chr(n) Ký tự có mã n Chr(65)=’A’ Ucase(s) Đổi chuỗi chữ thường thành chữ in Ucase(“abcd”)=”ABCD” Val(s) Đổi chuỗi thành số Val(“1234”)=1234 Str(n) Đổi số thành chuỗi Str(12.45)=” 12.45” Str(-4.56) = “-4.56” 4. Hàm kiểm tra kiểu dữ liệu Hàm Ý nghĩa IsNumeric(n) Kiểm tra n có phải là số hợp lệ IsDate(n) Kiểm tra n có phải là giá trị ngày hợp lệ VI. HỘP THÔNG BÁO (MESSAGE BOX) Là một lớp cửa sổ windows đã định nghĩa sẵn. Hộp thông báo được để trình bày các thông điệp nhắc nhở người dùng từ chuơng trình hoặc yêu cầu người dùng xác nhận một điều gì đó. Hộp thông báo thực chất là một form với các thành phần sau: • Nội dung thông báo • Icon bên trái dùng mô tả tính chất loại thông báo • Nút bấm để trả lời, gồm các loại OK, Cancel, Yes, No, Abort, Retry, Ignore Dạng hàm MsgBox( , , ) Trong đó: Chuỗi ký tự thông báo. Thông báo có chiều dài tối đa 1024 ký tự. Muốn thông báo hiện trên nhiều dòng, sử dụng ký tự chr(13) Qui định loại nút bấm và icon được sử dụng trong hộp thông báo, gồm các hằng sau: Hằng Giá Ý nghĩa trị vbOKOnly 0 Chỉ có nút OK vbOKCancel 1 Nút OK và Cancel vbAbortRetryIgnore 2 Nút Abort, Retry và Ignore vbYesNoCancel 3 Nút Yes, No, Cancel Button vbYesNo 4 Nút Yes, No vbRetryCancel 5 Nút Retry và Cancel vbCritical 16 Icon Icon vbQuestion 32 Icon
  41. Giáo trình Visual Basic 6.0 33 vbExclamation 48 Icon vbInformation 64 Icon vbDefaultButton1 0 Nút đầu tiên mặc định có focus vbDefaultButton2 256 Nút thứ hai mặc định có focus Focus Focus vbDefaultButton3 512 Nút thứ ba mặc định có focus vbApplicationModal 0 Người dùng phải trả lời rồi mới có thể tiếp tục sử dụng chương trình, có thể chuyển sang các chương trình khác vbSystemModal 4096 Người dùng phải trả lời rồi mới có Modal thể tiếp tục sử dụng chương trình, không thể chuyển sang các chương trình khác Tham số được lấy giá trị bằng tổng các hằng trong mỗi nhóm trên. Ví dụ Giá trị vbYesNo+vbQuestion+vbDefaultButton1 làm cho hộp thông báo có 2 nút Yes-No, Icon hiển thị là Question, nút đầu tiên có focus. Nếu bỏ qua tham số này, hộp thông báo chỉ có nút OK Qui định tiêu đề hộp thông báo, nếu không có tham số này, tiêu đề sẽ là tên của chương trình. • Khi muốn sử dụng MsgBox với mục đích thông báo, thường chỉ cần ghi tham số thứ nhất. Ví dụ: If Not IsNumeric(Text1.Text) then MsgBox “Dữ liệu nhập không hợp lệ” End if • Khi chương trình muốn người sử dụng xác nhận một điều gì đó thì phải sử dụng MsgBox dưới dạng hàm. Hàm MsgBox khi đó sẽ trả về giá trị tùy theo nút mà người sử dụng bấm, các giá trị trả về có thể là: Hằng Giá trị Nút đã bấm vbOK 1 OK vbCancel 2 Cancel vbAbort 3 Abort vbRetry 4 Retry vbIgnore 5 Ignore VbYes 6 Yes VbNo 7 No Ví dụ: Ans = MsgBox(“Do you want to save ?”, _ vbYesNoCancel + vbApplicationModal, “Warning”) Nguyễn Đăng Quang
  42. 34 Giáo trình Visual Basic 6.0 if Ans = vbYes then SaveDocument elseif Ans = vbNo then Quit else Continue End if
  43. Giáo trình Visual Basic 6.0 35 Chương 4 Các cấu trúc điều khiển I. LỆNH ĐIỀU KIỆN IF Dạng 1: If then Chỉ có một viết sau then Ví dụ: Max = a If Max then end if Dạng này được sử dụng thay cho dạng 1 khi có nhiều lệnh sau then Dạng 3: If then elseif then elseif then else end if Ví dụ: If a > b then Max = a Else Max = b End if II. LỆNH CHỌN LỰA CASE Chọn lựa lệnh thực hiện theo giá trị Select Case Case Nguyễn Đăng Quang
  44. 36 Giáo trình Visual Basic 6.0 Case else End select Ví dụ Select Case Round(Diem) Case 0 to 4 Label1.Caption = “Kem” Case 5,6 Label1.Caption = “Trung binh” Case 7,8 Label1.Caption = “Khá” Case 9,10 Label1.Caption = “Giỏi” Case else Label1.Caption = “Không hợp lệ” End select III. LỆNH LẶP FOR NEXT Dạng For = to [ Step ] Next được thực hiện từ đến , giá trị của được thay đổi theo Ví dụ Tính tổng các số nguyên từ 1 đến 10 Tính tổng các số chắn S = 0 For i = 0 to 10 step 2 For i = 1 to 10 s = s + i s = s + i Next i Next i Tạo ra một chuỗi có 10 chữ a strS = “” For i = 1 to 10 strS = strS & “a” Next i Ví dụ:Vòng lặp sau tạo ra 10 chuỗi với cùng nội dung Dim Words, Chars, MyString For Words = 10 To 1 Step -1 For Chars = 0 To 9 MyString = MyString & Chars Next Chars
  45. Giáo trình Visual Basic 6.0 37 MyString = MyString & " " Next Words IV. LỆNH LẶP DO LOOP Dạng 1 Do while Loop Các lệnh trong vòng lặp bắt đầu được thực hiện nếu điều kiện đúng và lặp lại cho đến khi nào điều kiện sai Ví dụ Dim I As Integer Dim strS As String i = 1 Do while i Loop Until Các lệnh trong vòng lặp được thực hiện cho đến khi nào điều kiện đúng Ví dụ Dim I As Integer Dim strS As String i = 1 Do StrS = strS & “a” i = i +1 Loop Until I > 10 Ví dụ: Ví dụ: Đếm số chữ số của 1 số nguyên dương Tìm ước số chung lớn nhất của 2 số Dim Dem, So As Integer nguyên dương x,y So = Text1.Text Dim x,y As Integer Dem = 0 x = Text1.Text Do y = Text2.Text So = So \ 10 Do while x y then Loop Until So = 0 x = x-y else Nguyễn Đăng Quang
  46. 38 Giáo trình Visual Basic 6.0 y = y-x Loop end if Ví dụ: Nhập tuổi từ bàn phím, giá trị tuổi nhập phải trong phạm vi từ 10 đến 99 Dim strAge As String Dim intAge As Integer Dim intPress As Integer Do strAge = InputBox("How old are you?", "Age Ask") ‘ Check for the Cancel command button If (strAge = "") Then End ` Terminate program End If intAge = Val(strAge) If ((intAge 99)) Then ‘ The user's age is out of range intPress = MsgBox("Your age must be between 10 and 99", vbExclamation, "Error!") End If Loop While ((intAge 99)) V. CHƯƠNG TRÌNH CON Khi viết một chương trình lớn, để tránh viết lại nhiều lần các đoạn chương trình giống nhau, người ta định nghĩa các đoạn chương trình giống nhau, được dùng nhiều lần trong chương trình thành các module chương trình , còn được gọi là chương trình con. Các chương trình con này sẽ được định nghĩa ở một nơi nào đó trong chương trình bằng 1 tên, mỗi khi có yêu cầu sử dụng, nó sẽ được gọi bằng tên đã định nghĩa. Ví dụ: Private Sub ChangeSignal() If imgGreen.Visible = True Then imgGreen.Visible = False imgYellow.Visible = True ElseIf imgYellow.Visible = True Then imgYellow.Visible = False imgRed.Visible = True Else imgRed.Visible = False imgGreen.Visible = True End If End Sub Private Sub cmdChange_Click()
  47. Giáo trình Visual Basic 6.0 39 ChangeSignal ' Gọi thủ tục ChangeSignal. End Sub Private Sub imgGreen_Click() ChangeSignal ' Gọi thủ tục ChangeSignal End Sub Private Sub imgRed_Click() ChangeSignal ' Gọi thủ tục ChangeSignal End Sub Private Sub imgYellow_Click() ChangeSignal ' Gọi thủ tục ChangeSignal End Sub Có 2 loại chương trình con là thủ tục (Sub) và hàm (Function) 1. Sub Loại chương trình con thực hiện một tác vụ nào đó khi được gọi. Có 2 loại thủ tục là thủ tục tổng quát (General procedure) và thủ tục xử lý sự kiện (Event procedure). • Thủ tục tổng quát được kích hoạt bằng lệnh gọi trong chương trình. • Thủ tục xử lý sự kiện được kích hoạt khi có một sự kiện tác động lên form hoặc đối tượng điều khiển trên form. Thủ tục xử lý sự kiện thường có tên là _ . Ví dụ Form_Load hoặc Commad1_Click Khai báo thủ tục: Private/Public Sub [( )] End sub Thủ tục được khai báo với từ khoá Private chỉ được sử dụng trong form chứa nó (Form level). Thủ tục được khai báo với từ khoá Public có thể sử dụng trong các form khác. 2. Hàm Loại chương trình con luôn luôn trả về giá trị thông qua tên hàm Khai báo hàm: Private/Public Function [( )] [As ] End sub Ví dụ: Định nghĩa hàm tính chiều dài cạnh huyền của tam giác vuông Function Hypotenuse (A As Integer, B As Integer) As double Hypotenuse = Sqr(A ^ 2 + B ^ 2) End Function Gọi hàm Nguyễn Đăng Quang
  48. 40 Giáo trình Visual Basic 6.0 Dim x As double x = Hypotenuse(Text1.Text, Text2.Text) TxtTinh.text = str(x,2) Ví dụ: Tính ngày việt nam: Hàm Weekday cho giá trị là số thứ tự chỉ ngày trong tuần. Định nghĩa hàm vnDay cho giá trị là chuỗi ngày Việt nam Public Function vnDay(nDay As Date) As String Select Case Weekday(nDay) Case 1 VnDay = “Chủ nhật” Case 2 VnDay = “Thứ hai” Case 3 VnDay = “Thứ ba” Case 4 VnDay = “Thứ tư” Case 5 VnDay = “Thứ năm” Case 6 VnDay = “Thứ sáu” Case 7 VnDay = “Thứ bảy” End select End function Private Sub Command1_Click() Text1.text = “Hôm nay là “ & vnDay(Date) End sub 3. Khai báo − Chương trình con khai báo với từ khoá Private chỉ có ý nghĩa trong phạm vi khai báo − Chương trình con khai báo với từ khoá Public trong form có thể sử dụng trong form đó và trong các form khác − Chương trình con khai báo với từ khoá Public trong module có thể sử dụng trong toàn bộ chương trình
  49. Giáo trình Visual Basic 6.0 41 Chương 5 Mảng – Chuỗi – Collection I. MẢNG 1. Định nghĩa: Mảng là tập hợp các phần tử cùng kiểu dữ liệu được đánh thứ tự. Số thứ tự của mỗi phần tử được gọi là chỉ số. 2. Khai báo: Dim/Public/Static ( ) As Ví dụ: Dim A(10) As Integer ‘ Mảng 10 số nguyên Dim Hoten(50) As String ‘ Mảng 50 chuỗi Chỉ số đầu tiên mặc định là 0. Có 2 cách để khai báo một mảng bắt đầu từ chỉ số tuỳ ý: • Sử dụng phát biểu Option Base trong phần General Ví dụ: Option Base 1 ‘Khai báo mảng bắt đầu từ 1 • Khai báo phạm vi chỉ số: Dim/Public/Static ( to ) As Ví dụ: Dim A(1 to 10) As Integer Mảng được truy xuất bằng cách viết (chỉ số) Ví dụ: Đổi năm dương lịch sang năm âm lịch: Dim Can(10) As String Dim Chi(12) As String Can(0)=”Canh” Can(1)=”Tân” Can(2)=”Nhâm” Can(3)=”Quí” Can(4)=”Giáp” Can(5)=”Ất” Can(6)=”Bính” Can(7)=”Đinh” Can(8)=”Mậu” Can(9)=”Kỷ” Chi(0)=”Thân” Chi(1)=”Dậu” Nguyễn Đăng Quang
  50. 42 Giáo trình Visual Basic 6.0 Chi(2)=”Tuất” Chi(3)=”Hợi” Chi(4)=”Tý” Chi(5)=”Sửu” Chi(6)=”Dần” Chi(7)=”Mão” Chi(8)=”Thìn” Chi(9)=”Tỵ” Chi(10)=”Ngọ” Chi(11)=”Mùi” NDL = CInt(txtNDL.Text) LblNAL.Caption = Can(NDL mod 10) & “ “ & Chi(NDL mod 12) Mảng trong ví dụ trên có thể vừa khai báo vừa gán giá trị ban đầu như sau: Can = Array(“Giáp”,”Ất”,”Bính”, “Đinh”, “Mậu”, “Kỷ”, “Canh”, “Tân”, “Nhâm”, “Quí”) Chi=Array(“Thân”, ”Dậu”, ”Tuất”, ”Hợi”, ”Tý”, ”Sửu”, ”Dần”, ”Mão”, ”Thìn”, ”Tỵ”, ”Ngọ”,”Mùi”) 3. Mảng đối tượng điều khiển Với các đối tượng điều khiển cùng loại, có thể sử dụng mảng để không phải đặt quá nhiều tên và định nghĩa nhiều thủ tục xử lý sự kiện a. Định nghĩa mảng đối tượng điều khiển - Đặt 1 đối tượng trong nhóm muốn định nghĩa mảng lên form, đặt tên (sẽ dùng làm tên mảng) và qui định giá trị các thuộc tính cần thiết (thuộc tính về kích thước và màu sắc của các phần tử của mảng thường giống nhau, trừ thuộc tính caption), - Right-Click trên đối tượng, chọn lệnh Copy, - Right-Click trên form, chọn lệnh Paste. VB sẽ yêu cầu xác nhận muốn định nghĩa mảng vì nhận thấy đối tượng mới được sao chép có cùng tên với đối tượng trước đó trên form, Hình 5.1: Hộp thông báo xác nhận có định nghĩa mảng đối tượng - Trả lời Yes để định nghĩa mảng và lặp lại thao tác Paste cho các phần tử kế tiếp. Để ý là thuộc tính Index của các phần tử mảng có thứ tự tăng dần theo
  51. Giáo trình Visual Basic 6.0 43 đúng thứ tự được sao chép trên form. Đó cũng chính là chỉ số của đối tượng trong mảng. b.Viết lệnh cho mảng đối tượng điều khiển - Nhấp đúp lên một trong các đối tượng thuộc mảng. Thủ tục xử lý sự kiện có dạng: Private sub _ (Index As Integer) End sub Thay vì Private sub _ () End sub - Thủ tục xử lý sự kiện được viết chung cho nhóm đối tượng định nghĩa là mảng, tham số Index được dùng để phân biệt phần tử nhận sự kiện đó. c. Duyệt mảng đối tượng điều khiển Để duyệt mảng đối tượng điều khiển trên form, có thể sử dụng vòng lặp như ví dụ sau: For i = txtFields.LBound To txtFields.UBound txtFields(i).Text = "" Next Tuy nhiên nếu các phần tử mảng được tạo ra không liên tiếp do có một đối tượng thuộc mảng đã bị xóa thì hệ thống sẽ thông báo lỗi. Vì vậy cách tốt hơn là sử dụng lệnh lặp For Each như sau: Dim txt As TextBox For Each txt In txtFields txt.Text = "" Next 4. Ví dụ Thiết kế form chọn màu tô (FillColor), mẫu tô (FillStyle) và loại hình vẽ của đối tượng Shape. Form thiết kế có dạng sau: Bước 1 Thiết kế giao diện (Hình 5.2) - Định nghĩa mảng các OptionButton cho nhóm Shape với tên opShape - Định nghĩa mảng các OptionButton cho nhóm FillStyle với tên opFillStyle - Định nghĩa mảng các OptionButton cho nhóm Color với tên opColor. Nguyễn Đăng Quang
  52. 44 Giáo trình Visual Basic 6.0 Hình 5.2: Giao diện chưong trình ví dụ Bước 2 Viết lệnh - Double-Click OptionButton trong nhóm Shape, viết lệnh : Private Sub opShape_Click(Index As Integer) Shape1.Shape = Index End Sub - Double-Click OptionButton trong nhóm FillStyle, viết lệnh : Private Sub opFillStyle_Click(Index As Integer) Shape1.FillStyle = Index End Sub - Double-Click OptionButton trong nhóm Color, viết lệnh : Private Sub opColor_Click(Index As Integer) Select Case Index Case 0 Shape1.FillColor = vbRed Case 1 Shape1.FillColor = vbBlue Case 2 Shape1.FillColor = vbMagenta Case 3 Shape1.FillColor = vbYellow End Select End Sub 5. Mảng động và mảng tĩnh a. Mảng tĩnh Là mảng được khai báo với từ khóa Dim như đã trình bày ở các phần trên. Mảng tĩnh luôn được khai báo với số phần tử xác định trước để chương trình dịch có thể dành vùng nhớ phù hợp.
  53. Giáo trình Visual Basic 6.0 45 b.Mảng động Là mảng có số phần tử có thể thay đổi tùy ý trong lúc chạy chương trình. Điều này phù hợp hơn vì trong thực tế người lập trình không thể tiên liệu trước số phần tử thực tế. Sử dụng mảng động gồm 2 bước: - Khai báo hiện diện với từ khóa Dim nhưng số phần tử để rỗng. - Tạo mảng thực sự khi cần thiết bằng phát biểu ReDim. Ví dụ: Dim Customers() As String Sub Main() ReDim Customers(1000) As String End Sub Mảng động có thể được tạo lại nhiều lần khi cần thiết: Sub Printeport() ReDim Customers(100) As String ReDim Customers(500) As String End Sub Tuy nhiên lệnh cấp phát mới sẽ xóa rỗng nội dung (chuỗi) hoặc gán bằng 0 (số) mọi phần tử đã có giá trị trước đó. Để bào toàn giá trị các phần tử, sử dụng phát biểu ReDim Preserve. Ví dụ: ReDim Preserve Customers(500) As String Lệnh cấp phát động cũng có thể áp dụng cho mảng nhiều chiều, tuy nhiên chỉ có thể làm thay đổi chiều cuối cùng. Ví dụ: ReDim Cells(1 To 100, 10) As Integer ReDim Preserve Cells(1 To 100, 20) As Integer ' Đúng ReDim Preserve Cells(1 To 200, 20) As Integer ' Sai Nguyễn Đăng Quang
  54. 46 Giáo trình Visual Basic 6.0 Có thể hủy một mảng bằng lệnh Erase. Đối với mảng động, Visual Basic giải phóng vùng nhớ đã cấp phát cho mảng; đối với mảng tĩnh, mọi phần tử được gán giá trị rỗng (chuỗi) hoặc có giá trị 0 (số). c. Các hàm Lbound, Ubound Hàm được dùng để xác định chỉ số thấp nhất và cao nhất của một mảng. Nếu mảng có nhiều chiều, phải sử dụng thêm tham số thứ hai khi sử dụng hàm. Ví dụ đối với mảng Cells đã khai báo ở ví dụ trên, để lấy chỉ số thấp nhất, cao nhất của mỗi chiều, có thể thực hiện như sau: Print LBound(Cells, 1) ' In chỉ số thấp nhất của chiều đầu tiên Print LBound(Cells) ' Giống như trên Print UBound(Cells, 2) ' In chỉ số cao nhất của chiều thứ hai ' Tính số phần tử mảng Num = (UBound(Cells) - LBound(Cells) + 1) * _ (UBound(Cells, 2 )- LBound(Cells, 2) + 1) 6. Một số vấn đề khác a. Mảng và biến variant Visual Basic cho phép chứa mảng trong các biến variant rồi truy xuất các phần tử mảng thông qua biến này. Ví dụ: ReDim Names(100) As String, var As Variant ‘Khởi động giá trị cho mảng Names var = Names() ' Sao chép mảng vào biến variant Print var(1) ' Truy xuất mảng qua biến variant Một cách tương tự, có thể truyền một mảng cho chương trình con với tham số hình thức khai báo là variant rồi truy xuất các phần tử mảng trong chương trình con thông qua tham số đó. Ví dụ: Hàm tính tổng các phần tử mảng Function ArraySum(arr As Variant) As Variant Dim i As Long, result As Variant For i = LBound(arr) To UBound(arr) result = result + arr(i) Next ArraySum = result End Function Cũng có thể áp dụng cách trên để truyền mảng 2 chiều thông qua tham số hình thức có kiểu variant. Ví dụ: Private Sub Form_Load()
  55. Giáo trình Visual Basic 6.0 47 Dim Fact(4, 4) As Integer abc Fact End Sub Private Sub abc(x As Variant) For i = 0 To 4 For j = 0 To 4 s = s + x(i, j) Next Next End Sub Để xác định kiểu của mảng khi truyền cho tham số variant, sử dụng hàm VarType để xác định kiểu như ví dụ sau: If VarType(arr) = (vbArray + vbInteger) Then ' Mảng số nguyên ElseIf VarType(arr) = (vbArray + vbLong) Then ' Mảng kiểu long End if b. Gán mảng và trả về giá trị kiểu mảng Điểm mới của mảng trong Visual Basic 6.0 so với các phiên bản trước đó là gán mảng và viết chương trình con trả về giá trị kiểu mảng. Ví dụ: Gán mảng ReDim a(10, 10) As Integer Dim b() As Integer b() = a() Ví dụ: Hàm trả về giá trị kiểu mảng Function InitArray(first As Long, Last As Long) As Long() ReDim result(first To Last) As Long Dim i As Long For i = first To Last result(i) = i Next InitArray = result End Function c. Mảng Byte Trong Visual Basic, mảng kiểu byte có tính chất đặc biệt, đó là có thể gán trực tiếp chuỗi cho một mảng byte. Khi đó, mảng được gán được cấp phát động để chứa đủ các ký tự được gán. Vì mỗi ký tự trong chuỗi của Visual Basic 5.0 và 6.0 có chiều dài 2 byte (unicode) nên số phần tử mảng được cấp phát sẽ gấp đôi số ký tự trong chuỗi. Nguyễn Đăng Quang
  56. 48 Giáo trình Visual Basic 6.0 Ví dụ: Dim b() As Byte, Text As String Text = "123" b() = Text For i = LBound(b) To UBound(b) Debug.Print b(i) ‘Giá trị in ra sẽ là 49 0 50 0 51 0 Next II. CHUỖI KÝ TỰ 1. Khai báo: Dim As String Hoặc Dim As String* Chiều dài - Khai báo String: Khai báo chuỗi động có chiều dài tối đa 2 tỷ ký tự. - Khai báo String* Chiều dài: Khai báo chuỗi có chiêu dài cố định , chiều dài tối đa 65535. 2. Các hám xử lý chuỗi Len(s): Lấy chiều dài chuỗi Ví dụ: Len(“abcd”)=4 Ucase(s): Đổi chuỗi chữ thường thành chuỗi chữ in Ví dụ: Ucase(“abcd”)=”ABCD” Lcase(s): Đổi chuỗi chữ in thành chuỗi chữ thường Ví dụ: Lcase(“ABCD”)=”abcd” Ltrim(s): Cắt khoảng trắng bên trái chuỗi Ví dụ: Ltrim(“ Anh”)=”Anh” Rtrim(s): Cắt khoảng trắng bên phải chuỗi Ví dụ: Rtrim(“Anh ”)=”Anh” Trim(s): Cắt khoảng trắng 2 bên chuỗi Ví dụ: Trim(“ Anh ”)=”Anh” Left(s,n): Trả về n ký tự đầu tiên bên trái chuỗi Ví dụ: Left(“Visual Basic”,6)=”Visual” Right(s,n): Trả về n ký tự đầu tiên bên phải chuỗi Ví dụ: Right(“Visual Basic”,5)=”Basic” Mid(s,i,n): Trả về n ký tự trong chuỗi bắt đầu từ vị trí i. Ví dụ: Mid(“Visual Basic”,8,3)=”Bas” Space(n): Trả về chuỗi có n khoảng trắng. Ví dụ: Space(5)=” “ String(n,c): Trả về chuỗi có n ký tự c. Ví dụ: String(4,”x”)=”xxxx”
  57. Giáo trình Visual Basic 6.0 49 Instr([i,]s1,s2[,n]): Cho vị trí xuất hiện của chuỗi s2 trong s1. Trong đó: i Vị trí bắt đầu xét (tuỳ chọn) S1: Chuỗi cần dò tìm s2: Chuỗi tìm n : Cách so sánh (0- So từng ký tự, 1-Không phân biệt chữ thường, chữ hoa) St = “Visual Basic” Ví dụ: Instr(St,”a”)=5 Instr(6,St,”a”)=9 Instr(10,St,”a”)=0 Replace(s,s1,s2[, i[, n]]): Tìm và thay thế s1 trong s bởi s2. Trong đó: i: vị trí bắt đầu thay thế, giá trị mặc định là 1 (thay thế từ đầu) n : số lần thay thế, giá trị mặc định là 1 (thay thế tất cả) Ví dụ: St = “tôi đi học với bạn tôi” Replace(St,”tôi”,”anh”) = ”anh đi học với bạn anh” Format(s,format):Định dạng chuỗi s theo chuỗi định dạng format. Ký tự thường sử dụng trong chuỗi định dạng: @ : Thay thế cho một ký tự hoặc khoảng trắng &: Thay thế cho một ký tự hoặc không có ký tự nào Mặc định chuỗi kết quả sẽ được điền đầy theo chuỗi định dạng từ phải sang trái. Ký tự ! phía trước chuỗi định dạng có ý nghĩa điền kết quả từ trái sang phải. Ký tự > ( & & & & &) = "A B C D E" Format("6152127865", "&&&-&&&-&&&&") = "615-212-7865" III. COLLECTION 1. Giới thiệu Là danh sách nhóm phần tử có quan hệ vơi nhau. Đối tượng Collection khác với mảng ở những điểm sau: - Không cần khai báo trước số phần tử, có thể thêm, bớt phần tử bất kỳ lúc nào. - Việc thêm bớt phần tử được thực hiện một cách tự động, người lập trình không phải quan tâm đến việc cấp phát vùng nhớ cho phần tử muốn thêm hoặc giải phòng vùng nhớ của phần tử bị xóa. Nguyễn Đăng Quang
  58. 50 Giáo trình Visual Basic 6.0 - Dữ liệu của mỗi phần tử chứa trong đối tượng Collection có thể tùy ý trong khi mảng chỉ có thể chứa các phần tử cùng kiểu dữ liệu. - Ngoài giá trị chứa trong Collection, mỗi phần tử còn chứa kèm một giá trị khóa giúp truy tìm phần tử nhanh chóng ngoài chỉ số và tên. - Khi một phần tử được thêm vào collection, người lập trình chỉ có thể đọc chứ không thể thay đổi giá trị của phần tử. Muốn thay đổi giá trị phần tử, phải xóa giá trị cũ rồi thêm giá trị mới. Những đặc điểm trên cho thấy Collection có nhiều ưu điểm hơn so với mảng, tuy nhiên nó vẫn không thể thay thế được mảng trong Visual Basic vì tốc độ truy xuất trên Collection chậm hơn so với mảng. Một ví dụ điển hình như điền một mảng 10000 số nguyên kiểu long nhanh hơn 100 lần so với collection. Vì vậy việc lựa chọn mảng hay collection tùy thuộc vào yêu cầu của chương trình. 2. Các thao tác trên Collection a. Tạo Collection Collection là một đối tượng. Khai báo collection như sau: Dim As Collection Set = New Collection Hoặc Dim As New Collection Ví dụ: Dim EmployeeNames As Collection Set EmployeeNames = New Collection Hoặc Dim EmployeeNames As New Collection b. Thêm giá trị vào Collection Để thêm một giá trị, sử dụng phương thức Add, dạng như sau: Add Item [, key][, before][, after] Trong đó Item Giá trị thêm. key Chuỗi duy nhất đi kèm với mỗi giá trị. Before, after Vị trí mốc thêm. Lưu ý: - Thứ tự các phần tử trong Collection đánh bắt đầu từ 1, - Khi mốc thêm là số, vị trí thêm được xác định theo chỉ số, - Khi mốc thêm là chuỗi, vị trí thêm được xác định dựa theo thuộc tính key, - Các tham số Before và After là tùy chọn nhưng không thể xuất hiện đồng thời. Ví dụ 1: Thêm liên tiếp 2 giá trị vào danh sách nhân viên Dim EmployeeNames As New Collection EmployeeNames.Add “John Smith”, “Marketing”
  59. Giáo trình Visual Basic 6.0 51 EmployeeNames.Add “Anne Lipton”,”Sales” Ví dụ 2: Thêm giá trị vào trước Anne Lipton trong danh sách trên EmployeeNames.Add “Aves Lipton”, “Excecutive”,”Sales” c. Truy xuất giá trị trong Collection Giá trị phần tử trong Collection được truy xuất thông qua thuộc tính Item bằng chỉ số hoặc key của phần tử. Ví dụ: Truy xuất phần tử đầu tiên trong danh sách trên Debug.Print EmployeeNames.Item(“Sales”) Debug.Print EmployeeNames.Item(1) Hàm ItemExists sau đây có thể được dùng để kiểm tra một giá trị có tồn tạo trong collection hay không dựa theo khóa. Function ItemExists(col As Collection, Key As String) As Boolean Dim dummy As Variant On Error Resume Next dummy = col.Item(Key) ItemExists = (Err Trong đó Index là vị trí xóa, có thể là giá trị số hoặc chuỗi Ví dụ 1: Xóa phần tử đầu tiên EmployeeNames.Remove 1 Ví dụ 2: Xóa phần tử có key là Sales EmployeeNames.Remove “Sales” Ví dụ 3: Xóa toàn bộ danh sách Sub RemoveAllItems(col As Collection) Do While col.Count col.Remove 1 Loop End Sub Lưu ý: Có thể xóa nhanh một danh sách bằng cách thực hiện như sau: Set EmployeeNames = Nothing Hoặc Set EmployeeNames = New Collection Nguyễn Đăng Quang
  60. 52 Giáo trình Visual Basic 6.0 e. Thay đổi giá trị một phần tử trong Collection Không thể thay đổi giá trị phần tử trong collection, cách duy nhất có thể thực hiện là xóa nó rồi thêm giá trị cần sửa đổi. Chương trình con ReplaceItem sau cho phép thực hiện điều này. ' INDEX có thẻ có giá trị số hoặc chuỗi. Sub ReplaceItem(col As Collection, index As Variant, newValue As Variant) ' Xóa phần tử col.Remove index ' Rồi thêm mới If VarType(index) = vbString Then col.Add newValue, index Else col.Add newValue, , index End If End Sub f. Lặp trên Collection • Lặp thông qua chỉ số phần tử: Ví dụ: Nạp danh sách giá trị trong Collection vào ListBox Dim i As Long For i = 1 To EmployeeNames.Count List1.AddItem EmployeeNames(i) Next • Lặp bằng phát biểu For Each Next Ví dụ: In danh sách giá trị trong Collection Dim var As Variant For Each var in EmployeeNames List1.AddItem var Next Hoặc Dim cust As Customer For Each cust In Customers List1.AddItem cust.Name Next Mảng đối tượng trên form thực chất được quản lý trong một Collection. Có thể sử dụng lệnh lặp For Each trên để thao tác nhanh trên mảng đối tượng. Ví dụ: Làm cho tất cả các TextBox (mảng txtFlds) trên Form ở trạng thái disable Sub Full_Disable() Dim oText as TextBox
  61. Giáo trình Visual Basic 6.0 53 For Each oText in txtFlds oText.Enabled = False Next End Sub 3. Ví dụ khác Giá trị chứa trong Collection có thể có độ phức tạp bất kỳ chứ không chỉ đơn giản là chứa giá trị như các ví dụ trên. Ví dụ : Tạo danh sách Collection trong đó mỗi phần tử chứa bao gồm Tên, Đơn vị và mức lương Dim Employees As New Collection ' Mỗi phần tử gồm tên, đơn vị và mức lương Employees.Add Array("John", "Marketing", 80000), "John" Employees.Add Array("Anne", "Sales", 75000), "Anne" Employees.Add Array("Robert", "Administration", 70000), "Robert" Để in danh sách nhân viên, có thể viết như sau: Dim var As Variant For Each var in Employees Debug.Print var(0) Next In đơn vị của Anne Debug.Print Employees(“Anne”)(1) In mức lương của Robert Debug.Print Employees(“Robert”)(2) Nguyễn Đăng Quang
  62. Giáo trình Visual Basic 6.0 55 Chương 6 TextBox - ListBox-ComboBox I. TEXTBOX Là đối tượng điều khiển dùng nhập một nội dung dạng text. Nội dung nhập có thể một dòng hoặc nhiều dòng. 1. Các thuộc tính bổ sung Scrollbars Qui định các loại thanh cuộn được sử dụng trong textbox, chỉ dùng khi Multiline=True , có các giá trị: 0 - None. Không có thanh cuộn 1 - Horizontal. Chỉ có thanh cuộn ngang 2 - Vertical. Chỉ có thanh cuộn dọc 3 - Both. Có cả hai loại thanh cuộn SelStart Đọc hoặc đặt vị trí con trỏ (hoặc vị trí bắt đầu chọn) trong textbox SelLength Đọc hoặc đặt số ký tự được chọn trong textbox. Khi không chọn, Sellength=0 SelText Lấy nội dung đang được chọn. Nếu không chọn, Seltext=””. Gán Seltext sẽ chèn chuỗi mới vào textbox tại con trỏ Nếu có chọn. Gán Seltext sẽ thay thế chuỗi chọn bởi nội dung mới HideSelection = False : Phần nội dung chọn vẫn được highlight khi textbox mất focus = True: Phần nội dung chọn không được highlight khi textbox mất focus PasswordChar Được sử dụng khi nhập mật khẩu. Các ký tự nhập vào luôn được trình bày bằng ký tự định nghĩa trong thuộc tính này. 2. Sự kiện Sự kiện thường hay sử dụng đối với textbox là Change, sự kiện này xảy ra mỗi khi nội dung textbox thay đổi do người dùng nhập hay hiệu chỉnh thuộc tính Text 3. Ví dụ Thiết kế chương trình có dạng một Editor (trình soạn thảo văn bản) đơn giản. Định nghĩa chức năng tìm kiếm một nội dung trên Editor. Form chính gồm 1 textbox làm editor và nút bấm Find để thực hiện chức năng tìm kiếm (Hình 6.1) Nguyễn Đăng Quang
  63. 56 Giáo trình Visual Basic 6.0 Hình 6.1: Các Form của chương trình sọan thảo văn bản Trên form chính (đặt tên frmMain), có Trên form tìm kiếm (đặt tên frmFind), các đối tượng sau: có các đối tượng sau: TextBox Label Thuộc tính Giá trị Thuộc tính Giá trị Name TxtEditor Name Label1 Multiline True Caption Find text Scrollbar None CommandButton CommandButton Thuộc tính Giá trị Thuộc tính Giá trị Name CmdFind Name CmdFind Caption &Find Caption &Find CommandButton Enabled False Thuộc tính Giá trị Name CmdCancel Caption &Cancel Người chạy chương trình sẽ nhập nội dung vào textbox như một Editor. Khi chưa có nội dung, chức năng tìm kiếm sẽ không có tác dụng. Vì vậy định nghĩa thủ tục xử lý sự kiện Change: Khi textbox có thay đổi và nội dung khác rỗng thì nút lệnh sẽ được kích hoạt (Enabled) Private Sub txtEditor_Change() If txtEditor.Text <> "" Then cmdFind.Enabled = True Else cmdFind.Enabled = False End If
  64. Giáo trình Visual Basic 6.0 57 End Sub Khi bấm nút Find, form thứ hai sẽ xuất hiện. Định nghĩa sự kiện Click cho nút bấm này: Private Sub cmdFind_Click() frmFind.Show End Sub Trên form tìm kiếm, nếu người dùng nhập một nội dung tìm kiếm và bấm nút Find, chương trình sẽ thực hiện chức năng tìm kiếm. Vì vậy định nghĩa lệnh cho sự kiện Click Private Sub cmdFind_Click() Dim p As Integer If txtFind.Text 0 Then frmMain.txtEditor.SelStart = p- 1 ‘Giữ vị trí đầu tiên frmMain.txtEditor.SelLength = Len(txtFind.Text) Else MsgBox "Search text not found" End If End If End Sub Vì chuỗi cần tìm có thể xuất hiện nhiều lần trong editor. Định nghĩa lại Caption của Nút Find thành Find Next để mỗi lần bấm nút này thì chương trình sẽ tìm tiếp từ sau vị trí vừa tìm thấy và viết lại lệnh như sau: Private Sub cmdFind_Click() Static p As Integer If txtFind.Text 0 Then frmMain.txtEditor.SelStart = p - 1 ‘Giữ vị trí đầu tiên frmMain.txtEditor.SelLength = Len(txtFind.Text) ‘Highlightchuỗi tìm thấy Else MsgBox "Search text not found" End If End If End Sub Biến p được định nghĩa lại thành biến static để giữ lại vị trí vừa tìm thấy và chương trình sẽ tiếp tục tìm từ vị trí kế sau đó. II. LISTBOX Dùng liệt kê danh sách nhiều đối tượng và cho phép người dùng chọn lựa. Nguyễn Đăng Quang
  65. 58 Giáo trình Visual Basic 6.0 1. Các thuộc tính Columns Số cột được dùng để thể hiện nội dung của listbox, mặc định =0 (Hình 6.2). Hình 6.2: ListBox với thuộc tính Columns IntegralHeight Listbox tự động điều chỉnh kích thước sao cho luôn thể hiện đầy đủ nội dung, có giá trị True/False. ListCount Thuộc tính này đọc - Số phần tử có trong listbox. List Danh sách nội dung (chuỗi) trình bày trong listbox ItemData Danh sách chứa nội dung đi kèm với các phần tử chứa trong thuộc tính List. Danh sách này không được trình bày , chỉ phục vụ cho chương trình. ListIndex Chỉ số của phần tử được chọn trong listbox - Phần tử đầu tiên có chỉ số 0. Khi không có phần tử nào được chọn , thuộc tính này có giá trị -1. Text Chuỗi chứa nội dung mục được chọn trong danh sách. Tương đương với cách viết List(Listindex) Multiselect Qui định chế độ chọn các phần tử trong Listbox 0 - None: Mỗi lúc chỉ chọn được một phần tử. 1 - Simple: Cho phép chọn nhiều phần tử bằng cách click. 2 - Extended: Chọn nhiều phần tử theo kiểu chọn trong Windows Explorer. SelCount Cho biết số phần tử đang được chọn trong danh sách List Selected Mảng tương ứng với danh sách list, xác định phần tử có được chọn trong listbox (True/False) Topindex Chỉ số phần tử xuất hiện đầu tiên trong Listbox.
  66. Giáo trình Visual Basic 6.0 59 Sorted Qui định các phần tử trong danh sách được sắp thứ tự (True/false) NewIndex Chỉ số phần tử vừa mới được thêm vào Listbox. Lưu ý: • Có thể nhập trực tiếp nội dung danh sách trong lúc thiết kế tại cửa sổ thuộc tính, xuống dòng bằng Ctrl+Enter (Hình 6.2) Hình 6.2: Nhập giá trị cho thuộc tính List trong cửa sổ thuộc tính • Để lấy nội dung của đối tượng đang được chọn. Sử dụng cách viết Dim St As String St = Listbox.List(ListBox.ListIndex) Hoặc St = Listbox.Text • Để duyệt danh sách chứa trong danh sách list, sử dụng vòng lặp for For i = 0 to ListBox.ListCount - 1 Debug.Print ListBox.List(i) Next i 2. Các phương thức AddItem [, ]: thêm một phần tử vào danh sách Thêm phần tử Item vào danh sách tại vị trí Index. Nếu không có tham số index, phần tử sẽ được thêm vào cuối danh sách. Ví dụ 1: ListBox.AddItem “Hoa” ListBox.AddItem “Ngoc” ListBox.AddItem “Hai” ListBox.AddItem “Tuan” Nguyễn Đăng Quang
  67. 60 Giáo trình Visual Basic 6.0 Thêm 4 phần tử vào cuối danh sách . Ví dụ 2: Thêm 100 phần tử vào danh sách For i = 0 to 99 ListBox.AddItem “Item “ & i Next i Phương thức AddItem thường được viết trong form_load để khởi động giá trị cho ListBox. Dữ liệu khởi động có thể chứa trong một mảng như ví dụ sau: For i = LBound(MyData) To UBound(MyData) List1.AddItem MyData(i) Next Hoặc có thể khởi động một danh sách nhưng không cần định nghĩa mảng bằng cách sử dụng hàm choose như sau: For i = 1 To 5 List1.AddItem Choose(i, "America", "Europe", "Asia", "Africa", "Australia")" Next RemoveItem : xóa một phần tử khỏi danh sách với Index là số thứ tự của phần tử cần xoá. Ví dụ : Xoá 50 phần tử đầu tiên của danh sách For i = 0 to 49 ListBox.RemoveItem i Next i Clear: Xóa toàn bộ danh sách List Ví dụ : Xoá tất cả các phần tử trong danh sách ListBox.Clear 3. Sự kiện Sự kiện thường hay sử dụng đối với Listbox là Click, sự kiện này xảy ra mỗi khi click một phần tử trên Listbox hoặc thay đổi phần tử chọn bằng bàn phím (di chuyển vệt sáng).
  68. Giáo trình Visual Basic 6.0 61 Một sự kiện cũng đôi khi được sử dụng đó là sự kiện scroll, sự kiện này xảy ra khi nội dung listbox cuộn. Ví dụ sau minh họa cách sử dụng sự kiện scroll kết hợp với thuộc tính TopIndex để đồng bộ hoạt động cuộn của 2 listbox. Hình 6.3: Đồng bộ hoạt động của 2 listbox Lệnh viết trên các Listbox như sau: Private Sub lstN_Click() lstSquare.TopIndex = lstN.TopIndex lstSquare.ListIndex = lstN.ListIndex End Sub Private Sub lstSquare_Click() lstN.TopIndex = lstSquare.TopIndex lstN.ListIndex = lstSquare.ListIndex End Sub Private Sub lstN_MouseDown(Button As Integer, Shift As Integer, _ X As Single, Y As Single) Call lstN_Click End Sub Private Sub lstSquare_MouseDown(Button As Integer, _ Shift As Integer, X As Single, Y As Single) Call lstSquare_Click End Sub Private Sub lstN_MouseMove(Button As Integer, Shift As Integer, _ X As Single, Y As Single) Call lstN_Click End Sub Private Sub lstSquare_MouseMove(Button As Integer, _ Shift As Integer, X As Single, Y As Single) Call lstSquare_Click End Sub Private Sub lstN_Scroll() lstSquare.TopIndex = lstN.TopIndex End Sub Private Sub lstSquare_Scroll() lstN.TopIndex = lstSquare.TopIndex End Sub Nguyễn Đăng Quang
  69. 62 Giáo trình Visual Basic 6.0 4. Một số ví dụ Ví du 1: Sử dụng thuộc tính ItemData . Thiết kế chương trình với Form gồm Listbox, 2 Textbox trình bày phần tử được chọn và Itemdata của phần tử được chọn (Hình 6.4). Hình 6.4: Form chương trình của ví dụ 1 - Tại thuộc tính List của listbox, nhập các nội dung “Muc 1”, “Muc 2” ”Muc 7” . Sử dụng Ctrl+Enter để xuống dòng. - Tại thuộc tính ItemData của listbox, nhập các nội dung 100, 200 700 . Sử dụng Ctrl+Enter để xuống dòng. Mỗi khi người dùng click một phần tử trên listbox. Nội dung của phần tử tương ứng xuất hiện trong textbox. Định nghĩa lệnh xử lý sự kiện Click như sau: Private Sub List1_Click() Dim p As Integer Text1.Text = List1.Text p = List1.ListIndex Text2.Text = List1.ItemData(p) End Sub Nội dung listbox được khởi động trong formLoad như sau: Private Sub Form_Load() For i = 0 To 99 List1.AddItem "Muc " & i List1.ItemData(i) = (i + 1) * 100 Next End Sub Ví dụ 2: Sử dụng thuộc tính TopIndex để tự động cuộn ListBox. Sử dụng form của ví dụ 1, thêm nút “Auto Scroll” và viết lệnh như sau: Private Sub Command1_Click() For i = 0 To 99 List1.TopIndex = i Next End Sub
  70. Giáo trình Visual Basic 6.0 63 Hình 6.5: Form chương trình của ví dụ 2 Ví dụ 3: Sử dụng thuộc tính Selected để tự động chọn xen kẽ các phần tử trong listbox. (Hình 6.6). Sử dụng form của ví dụ 2, thêm nút “Select” và viết lệnh như sau: Private Sub Command2_Click() For i = 0 To 99 If i Mod 2 = 0 Then List1.Selected(i) = True Next End Sub Hình 6.6: Form của chương trình ví dụ 3 Ví dụ 4: Thiết kế form gồm 2 ListBox, dữ liệu được khởi động trước cho một listbox, viết lệnh trên các nút để di chuyển các phần tử chọn (có thể chọn nhiều) từ listbox này sang listbox khác. Việc di chuyển cũng có thể thực hiện khi nhấp đúp trong listbox. Giao diện của chương trình như hình 6.7. Hình 6.7: Form chương trình ví dụ 4 Nguyễn Đăng Quang
  71. 64 Giáo trình Visual Basic 6.0 Lệnh cho các nút viết như sau: Private Sub cmdMove_Click() ' Di chuyển phần tử đang chọn từ listbox trái sang listbox phải If lstLeft.ListIndex >= 0 Then lstRight.AddItem lstLeft.Text lstLeft.RemoveItem lstLeft.ListIndex End If End Sub Private Sub cmdMoveAll_Click() ' Di chuyển mọi phần tử từ listbox trái sang listbox phải Do While lstLeft.ListCount lstRight.AddItem lstLeft.List(0) lstLeft.RemoveItem 0 Loop End Sub Private Sub cmdBack_Click() ' Di chuyển phần tử đang chọn từ listbox phải sang listbox trái If lstRight.ListIndex >= 0 Then lstLeft.AddItem lstRight.Text lstRight.RemoveItem lstRight.ListIndex End If End Sub Private Sub cmdBackAll_Click() ' Di chuyển mọi phần tử từ listbox phải sang listbox trái Do While lstRight.ListCount lstLeft.AddItem lstRight.List(0) lstRight.RemoveItem 0 Loop End Sub Private Sub lstLeft_DblClick() ' Mô phỏng tác động bấm phím cmdMove.Value = True End Sub Private Sub lstRight_DblClick() ' Mô phỏng tác động bấm phím cmdBack.Value = True End Sub
  72. Giáo trình Visual Basic 6.0 65 III. COMBOBOX Là đối tượng điều khiển kết hợp giữa textbox và listbox. Trong combobox, người dùng có thể chọn một đối tượng có trước hoặc nhập mới một nội dung trong textbox phía trên. Combo box cũng có các thuộc tính của ListBox (trừ MultiSelect, Selected) , ngoài ra còn có thêm thuộc tính Style để qui định kiểu của combobox 0 - Dropdown Combo Combo chuẩn. Chỉ trình bày listbox khi click nút mũi tên bên phải. 1 - Simple Luôn thể hiện listbox bên dưới textbox. Khi nội dung nhập trong textbox giống với một nội dung trong listbox, nó sẽ tự động cuộn để thể hiện đầy đủ phần tử đó 2 - Dropdown List Không có Textbox. Chỉ trình bày listbox khi click nút mũi tên bên phải Hình 6.8 trình bày các dạng ComboBox với các giá trị của thuộc tính Style. Hình 6.8: Các dạng ComboBox ComboBox cũng có các sự kiện giống như ListBox. Sự kiện thuờng viết lệnh là sự kiện Click. Nguyễn Đăng Quang
  73. 66 Giáo trình Visual Basic 6.0 IV. DRIVELISTBOX, DIRLISTBOX VÀ FILELISTBOX Là các đối tượng điều khiển được xây dựng dựa trên ListBox và ComboBox, thường sử dụng kết hợp với nhau cho phép người sử dụng dễ dàng chọn lựa một ổ dĩa, một thư mục hoặc một tập tin trong máy. 1. DriveListBox ComboBox cho phép chọn một ổ dĩa trong các ổ dĩa của máy. Thuộc tính thường sử dụng là thuộc tính Drive cho biết ổ dĩa đang được chọn. Khi chọn một ổ dĩa mới, sự kiện Change xảy ra trên DriveListBox. 2. DirListBox Đối tượng trình bày cây thư mục của một ổ dĩa và cho phép người sử dụng chọn lựa. Thuộc tính thường sử dụng là Path cho biết đường dẫn thư mục đang chọn. Khi chọn một thư mục mới, sự kiện Change xảy ra trên DirListBox. 3. FileListBox Đối tượng trình bày các tập tin trong một thư mục và cho phép người sử dụng chọn lựa. Các thuộc tính thường sử dụng là : Path Đường dẫn thư mục FileName Tên đầy đủ tập tin đang chọn trong FileListBox Pattern Loại tập tin được xuất hiện trong FileListBox *.* - Mọi tập tin chứa trong thư mục *.txt; *.doc; *.rtf – 3 loại tập tin được xuất hiện Khi chọn một tập tin, sự kiện Click xảy ra trên FileListBox. DriveListBox, DirListBox và FileListBox thường sử dụng chung với nhau để chọn một tập tin trên dĩa. Khi đặt chúng lên form cần viết lệnh để đồng bộ hoạt động như sau: Lệnh viết trên DriveListBox Private Sub Drive1_Change() ' Khi chọn ổ dĩa trên DriveListBox, gán cho thuộc tính Path ' của DirListBox để làm thay đổi cây thư mục Dir1.Path = Left$(Drive1.Drive, 1) & ":\" End Sub Lệnh viết trên DirListBox Private Sub Dir1_Change() ‘ Gán đường dẫn chọn cho đối tượng FileListBox để làm thay ‘ Đổi nội dung FileListBox File1.Path = Dir1.Path End Sub Cuối cùng khi người sử dụng click tại tên một tập tin trong FileListBox, tên tập tin sẽ được xử lý được xác định như sau:
  74. Giáo trình Visual Basic 6.0 67 Filename = File1.Path If Right$(Filename, 1) <> "\" Then Filename = Filename & "\" Filename = Filename & File1.Filename Nguyễn Đăng Quang
  75. Giáo trình Visual Basic 6.0 69 Chương 7 Scrollbar – Image – Timer I. SCROLLBAR Là một đối tượng điều khiển dùng chọn một giá trị trong một khoảng cố định cho trước một cách trực quan. Có hai loại thanh cuộn: thanh cuộn dọc (VScrollbar) và thanh cuộn ngang (HScrollbar) 1. Các thuộc tính Min Qui định giá trị cực tiểu của thanh cuộn Max Qui định giá trị cực đại của thanh cuộn Value Giá trị đang được chọn của thanh cuộn, phụ thuộc vào vị trí của con chạy trên thanh cuộn. Giá trị này có thể đọc từ vị trí của con chạy hoặc gán trong chương trinh. SmallChange Qui định khoảng tăng/giảm của giá trị chọn trên thanh cuộn mỗi khi bấm nút mũi tên ở hai đầu (default=1) LargeChange Qui định khoảng tăng/giảm của giá trị chọn trên thanh cuộn mỗi khi click trên vùng chạy của con chạy (default=1) Khi một thanh cuộn được tạo ra trên form, luôn luôn cần định nghĩa các giá trị min và max 2. Sự kiện Change Sự kiện xảy ra sau khi con chạy thay đổi vị trí hoặc thuộc tính value thay đổi Scroll Sự kiện xảy ra khi con chạy thay đổi vị trí hoặc thuộc tính value thay đổi 3. Ví dụ: Thiết kế form chọn màu bằng cách phối hợp 3 màu cơ bản RGB. Giá trị của các thành phần màu sẽ được chọn bằng thanh cuộn. Màu chọn được thể hiện bằng đối tượng Shape. Hình 7.1: Thiết kế form chọn màu Các đối tượng trên form được chọn như sau: Nguyễn Đăng Quang
  76. 70 Giáo trình Visual Basic 6.0 Đối tượng Shape Các Textbox (Mảng) Thuộc tính Giá trị Thuộc tính Giá trị Name Shape1 Name txtColor FillStyle 0 - Solid Đối tượng Hscrollbar (mảng) Shape 0 - Rectangle Thuộc tính Value Name hsbColor Min 0 Max 255 Value 100 Viết lệnh cho sự kiện Form_Load như sau: Private Sub Form_Load() Shape1.FillColor = RGB(hsbColor(0).Value, hsbColor(1).Value, hsbColor(2).Value) End sub Viết lệnh cho sự kiện Change của các thanh cuộn như sau: Private Sub hsbColor_Change(Index As Integer) TxtColor(Index).Text = hsbColor(Index).Value ChangeFillColor End Sub Định nghĩa sub ChangeFillColor trong phần General như sau: Sub ChangeFillColor() Shape1.FillColor = RGB(hsbColor(0).Value, hsbColor(1).Value, hsbColor(2).Value) End sub Sửa định nghĩa Form_Load thành Private Sub Form_Load() ChangeFillColor End sub II. IMAGE Sử dụng để đặt một hình ảnh lên form. Các thuộc tính Picture Giữ hình cần trinh bày, thường nhận giá trị trả về từ hàm LoadPicture BorderStyle Kiểu khung (0-None, 1-Fixed Single) Stretch Hình tự động co giãn để nằm gọn trong khung đã qui định (True/False) Hàm LoadPicture(PathName) nạp các tập tin ảnh và chứa vào thuộc tính Picture của đối tượng Image. Các loại tập tin ảnh có thể nạp là : .BMP, .GIF, .JPG, .WMF, .CUR, .ICO Ví dụ: Nạp tập tin ảnh từ dĩa Image1.Picture = LoadPicture(“C:\WINDOWS\SETUP.BMP”)
  77. Giáo trình Visual Basic 6.0 71 III. TIMER Đối tượng dùng xử lý các sự kiện thời gian. Lệnh viết trong đối tượng timer sẽ tự động thực hiện sau một khoảng thời gian xác định. 1. Thuộc tính Interval Qui định khoảng thời gian xảy ra sự kiện. Tính bằng ms. Giá trị 0 làm Timer ngưng hoạt động) 2. Sự kiện Sự kiện được dùng để định nghĩa mã lệnh là sự kiện Timer. Sự kiện này xảy ra mỗi khi timer đếm đủ khoảng thời gian qui định trong thuộc tính Interval 3. Ví dụ Sử dụng đối tượng Image và Timer để tạo đối tượng hoạt động trong chương trình Hình 7.1: Form chương trình tạo đối tượng chuyển động Image1 Image3 Thuộc tính Giá trị Thuộc tính Giá trị Name Image1 Name Image3 Picture Buttfly1 Timer1 Visible False Thuộc tính Giá trị Image2 Name Timer1 Thuộc tính Giá trị Interval 150 Name Image2 Enabled False Picture Buttfly2 CommandButton Visible False Thuộc tính Giá trị Name CmdSw Caption Start Viết lệnh cho sự kiện form_load như sau: Private Sub Form_Load() Image3.Picture = Image1.Picture End Sub Viết lệnh cho sự kiện thời gian của Timer: Nguyễn Đăng Quang
  78. 72 Giáo trình Visual Basic 6.0 Private Sub Timer1_Timer() Static T As Integer If T = 0 Then Image3.Picture = Image1.Picture T = 1 Else Image3.Picture = Image2.Picture T = 0 End If End Sub Viếtî lệnh cho CommandButton: Private Sub CmdSw_Click() If CmdSw.Caption=”Start” Then Timer1.Interval=150 CmdSw.Caption = "Stop" Else Timer1.Interval=0 CmdSw.Caption = "Start" End If End Sub
  79. Giáo trình Visual Basic 6.0 73 Chương 8 Truy xuất dữ liệu I. TRUY XUẤT DỮ LIỆU BẰNG ĐỐI TƯỢNG ĐK CÓ KẾT NỐI CSDL 1. DataControl Data control là đối tượng điều khiển cho phép tự động hoá quá trình kết nối và truy xuất dữ liệu từ các tập tin cơ sở dữ liệu Access, Foxpro, Excel, Text Data control cho phép duyệt, thao tác trên các vùng của cơ sở dữ liệu thông qua các đối tượng điều khiển kết nối cơ sở dữ liệu (Bound-controls) mà không cần viết lệnh. 2. Các thuộc tính Connect Loại cơ sở dữ liệu kết nối (Access, Dbase,Excel). DatabaseName Chuỗi đường dẫn tên tập tin cơ sở dữ liệu. Recordsource Tên tập tin dữ liệu (Tên bảng nếu là cơ sở dữ liệu Access). Recordset Thuộc tính dùng truy xuất các mẫu tin trong cơ sở dữ liệu đã được kết nối bằng Datacontrol. Recordsettype Loại recordset, có các giá trị sau: − dbOpenTable: Sử dụng khi mở 1 table. Có thể thêm, xoá, cập nhật các mẫu tin. − dbOpenDynaset: Sử dụng khi mở 1 table hay 1 query, có thể gồm nhiều vùng từ nhiều tập tin. Cho phép thể thêm, xoá, cập nhật các mẫu tin. − DbOpenSnapshot: Sử dụng khi mở 1 table hay 1 query, có thể gồm nhiều vùng từ nhiều tập tin, được dùng để duyệt hay tạo report, không thể thay đổi. ReadOnly (True/False) Cơ sở dữ liệu có thể cập nhật được hay không BOFAction Thuộc tính định nghĩa hoạt động của Datacontrol khi di chuyển đến mẫu tin đầu tiên, có các giá trị sau: - 0: MoveFirst - Di chuyển về mẫu tin đầu tiên, - 1: BOF - Ở vị trí đầu tiên EOFAction Thuộc tính định nghĩa hoạt động của Datacontrol khi di chuyển đến mẫu tin cuối cùng, có các giá trị sau: - vbEOFActionMoveLast = 0: Khi di chuyển đến hết tập tin trên recordset tự động nhảy đến phần tử cuối cùng, - vbEOFActionEOF = 1: Khi di chuyển đến hết tập tin trên recordset, disable nút MoveNext trên Datacontrol, - vbEOFActionAddnew = 2: Khi di chuyển đến hết tập tin trên recordset, tự động kiểm tra dữ liệu (Validate) và thêm mẫu tin mới vào Recordset 3. Các đối tượng điều khiển có kết nối cơ sở dữ liệu (Bound-controls) Nguyễn Đăng Quang
  80. 74 Giáo trình Visual Basic 6.0 Đối tượng điều khiển có kết nối cơ sở dữ liệu là các đối tượng điều khiển có thêm các thuộc tính (Datasource, DataField) cho phép kết nối với một field của bảng dữ liệu để trình bày hoặc cập nhật nội dung của field. Trong Visual Basic, các đối tượng điều khiển có kết nối cơ sở dữ liệu gồm: Các đối tượng chuẩn (Intrinsic) • Check box • Image • Label • Picture box • Text box • List box • Combo box Các đối tượng mở rộng (Extended) • Data-bound list box • Data-bound combo box • Data-Bound Grid (DBGrid) Các thuộc tính được sử dụng khi truy xuất cơ sở dữ liệu Thuộc tính Ý nghĩa DataChanged True/False: Cho biết nội dung field có thay đổi hay không DataField Tên vùng dữ liệu. Datasource Tên nguồn dữ liệu, thường là tên của Datacontrol. Ví dụ: Thiết kế form duyệt bảng Employee chứa trong cơ sở dữ liệu Access NWIND.mdb. Các Field muốn trình bày dữ liệu gồm: Họ tên : FirstName + LastName Ngày sinh: Birth Date Mã số nhân viên: Employee ID Hình 8.1: Duyệt bảng Employees trong cơ sở dữ liệu NWIND.MDB
  81. Giáo trình Visual Basic 6.0 75 Đối tượng, thuộc tính và giá trị thuộc tính của các đối tượng được tóm tắt trong bảng sau Đối tượng Thuộc tính Giá trị Ý nghĩa Form Name FrmData Caption Bound Browser Data Name datEmployees Tên DataControl Caption Employees DatabaseNameC:\Program Cơ sở dữ liệu NWIND.MDB Files\VB6\NWIND.MDB RecordSource Employees Bảng Employees TextBox Name TxtLastName DataField LastName Vùng họ (LastName) DataSource DatEmployees TextBox Name TxtFirstName DataField FirstName Vùng tên (FirstName) DataSource DatEmployees TextBox Name TxtBirthDate DataField BirthDate Vùng ngày sinh (BirthDate) DataSource DatEmployees TextBox Name TxtEmployeeId DataField EmployeeID Vùng mã nhân viên DataSource DatEmployees Enabled False Label Name Label1 Caption Employee: Label Name Label2 Caption Birth Date: Label Name Label3 Caption Employee ID: Bấm phím F5 để chạy chương trình, sử dụng các phím mũi tên trên DataControl để duyệt xem các mẫu tin. 4. Sử dụng data-bound listbox (DBList) và combobox (DBCombo) Giả sử có 2 bảng dữ liệu cho như sau: Nguyễn Đăng Quang
  82. 76 Giáo trình Visual Basic 6.0 - Publishers chứa thông tin về các nhà xuất bản sách, thông tin chứa trong bảng gồm các field PubID (Mã NXB) và Name (Tên NXB), - Titles chứa thông tin về mỗi quyền sách , thông tin chứa trong bảng gồm các field PubID (Mã NXB), AU_ID (Mã tác giả), Title (Tựa sách), Year_Published (Năm XB) và ISBN. Hình 8.2: Quan hệ giữa các bảng Publishers và Titles Người ta muốn xem các thông tin về một quyển sách gồm tựa (Title), năm XB (Year_Published), ISBN và tên NXB (Name) với vùng Name có thể chọn để cập nhật từ danh sách các nhà xuất bản. Form dữ liệu có dạng như hình 8.3. Hình 8.3: Xem thông tin sách có thể điều chỉnh tên nhà xuất bản Databound ListBox (DBList) và Databound ComboBox (DBCombo) là các đối tượng được thiết kế để thực hiện chức năng này, chúng là các Listbox và ComboBox có thêm một số thuộc tính đặc biệt để kết nối với cơ sở dữ liệu. Hai đối tượng điều khiển này chứa trong Microsoft Databound List Control. Để sử dụng, nạp lên ToolBox bằng cách bấm tổ hợp phím CTRL+T và chọn trong hộp thoại Components. Các thuộc tinh kết nối cơ sở dữ liệu của DBList và DBCombo Datasource Tên nguồn dữ liệu, thường là tên của Datacontrol DataField Tên vùng dữ liệu chứa trong Recordset đã mở bằng Datacontrol. Khi giá trị mới được chọn, nội dung vùng tương ứng trong CSDL sẽ được tự động cập nhật khi di chuyển sang mẫu tin mới.
  83. Giáo trình Visual Basic 6.0 77 Rowsource Tên Datacontrol kết nối với table có nội dung được sử dụng để điền vào DBList/DBCombo BoundColumn Tên vùng thuộc recordset được chỉ định bởi Rowsource được sử dụng để cập nhật Recordset trong Datasource ListField Tên vùng thuộc Recordset trong Rowsource được sử dụng để điền vào DBList/DBCombo Lưu ý: • Tên các vùng DataField và BoundColumn nên giống nhau trong 2 cơ sở dữ liệu. Thường đó là các vùng có thiết lập quan hệ (Relationship). • Trong trường hợp chỉ sử dụng 1 Datacontrol các thuộc tính Datasource và Rowsource sẽ có cùng giá trị. Khi đó BoundColumn và DataField cùng có giá trị là tên vùng cần cập nhật trong cơ sở dữ liệu. Ví dụ Muốn tạo form duyệt bảng Titles với mã NXB (PubID) và Name được lấy từ bảng Publishers. Giá trị các vùng gán được tóm tắt theo hình 8.4 . Hình 8.4: Sử dụng DBCombo và DBList để duyệt bảng Titles và Publishers Các đối tượng điều khiển sử dụng và giá trị thuộc tính đuợc tóm tắt theo bảng sau: Ðối tượng Thuộc tính Giá trị Data1 Connect Access DatabaseName Biblio.mdb Recordsettype 0-dbOpenTable RecordSource Titles Data2 Connect Access DatabaseName Biblio.mdb Recordsettype 2-dbOpenSnapshot RecordSource SELECT PubID, Name FROM Publishers ORDER BY PubID TextBox Name TxtTitle Datasource Data1 DataField Title TextBox Name TxtYear Datasource Data1 Nguyễn Đăng Quang
  84. 78 Giáo trình Visual Basic 6.0 DataField Year Published TextBox Name TxtISBN Datasource Data1 DBCombo Name DBCombo1 Datasource Data1 DataField PubID Rowsource Data2 BoundColumn PubID ListField Name 5. Sử dụng Databound Grid Control (DBGrid) Databound Grid control là đối tượng điều khiển giúp trình bày nội dung bảng dữ liệu dưới dạng bảng (dòng, cột), nó có các thuộc tính kiểm soát thao tác trên bảng dữ liệu như sửa chữa (edit), thêm mới (addnew) hoặc xóa một mẫu tin trong bảng. Hình dưới trình bày một form sử dụng DBGrid để thao tác trên bảng Pulishers (Nhà xuất bản) của cơ sở dữ liệu BIBLIO.MDB. Hình 8.5: Trình bày dữ liệu bằng DBGrid Phần này trình bày các bước sử dụng DBGrid để thao tác trên bảng dữ liệu kết hợp với Data control mà không cần viết lệnh. Bước 1: Đặt Datacontrol lên form, điều chỉnh các thuộc tính: Database Name: Tên cơ sở dữ liệu, Recordsource: Tên bảng dữ liệu , Bước 2: Nạp đối DBGrid lên ToolBox Bấm tổ hợp phím Ctrl+T để mở hộp thoại Components, Check tại đối tượng Microsoft Databound Grid Control 5.0 Bấm nút OK Biểu tương DBGrid xuất hiện trên Toolbox. Bước 3: Đặt DBGrid lên form Click tại biểu tượng DBGrid trên ToolBox, Click , kéo để xác định kích thước DBGrid trên form.
  85. Giáo trình Visual Basic 6.0 79 Bước 4: Liên kết DBGrid với DataControl Điều chỉnh thuộc tính Datasource của DBGrid thành tên của Datacontrol, Bấm phím phải trên DBGrid rồi chọn Retrieve fields Tên các vùng của bảng dữ liệu sẽ xuất hiện trên dòng tiêu đề của DbGrid. Hình 8.6: DBGrid sau khi nạp các vùng của bảng dữ liệu Bước 5: Điều chỉnh các thuộc tính của DBGrid Bấm phím phải trên DBGrid, chọn properties để mở Property Pages, Hình 8.7: Thẻ General Thẻ General Ý nghĩa các tùy chọn được tóm tắt trong bảng sau: AllowAddnew Cho phép nhập thêm mẫu tin mới trên DBGrid AllowDelete Cho phép xóa mẫu tin ngay trên DBGrid bằng cách chọn mẫu tin rồi bấm phím Delete AllowUpdate Cho phép thay đổi nội dung các mẫu tin ngay trên DBGrid ColumnHeaders Có tiêu đề hay không Headlines Kích thước dòng tiêu đề tính theo dòng Nguyễn Đăng Quang
  86. 80 Giáo trình Visual Basic 6.0 RowHeight Chiều cao dòng RowdividerStyle Kiểu đường phân cách các mẫu tin trong DBGrid Datamode DBGrid có kết nối với bảng dữ liệu hay không Thẻ Keyboard Định nghĩa cách sử dụng phím Tab trong DBGrid Hình 8.8: thẻ Keyboard Thẻ Columns Thứ tự trình bày các Field trên các cột của DBGrid và định dạng giá trị trên mỗi cột. Hình 8.9: Thẻ Columns Thẻ Layout Độ rộng cột và chế độ căn nội dung trong cột của DBGrid, kiểu của vạch phân cách cột Hình 8.10: Thẻ Layout
  87. Giáo trình Visual Basic 6.0 81 Thẻ Color Chọn màu chữ, màu nền trong DBGrid Hình 8.11: Thẻ Color Thẻ Font Chọn kiểu chữ tiêu đề và nội dung DBGrid Hình 8.12: Thẻ Font Ví dụ : Sử dụng DBGrid để duyệt bảng Title trong cơ sở dữ liệu Biblio.mdb. Các bước thực hiện như sau: Bước 1: Đặt DataControl lên form, điều chỉnh các thuộc tính theo bảng sau: Thuộc tính Giá trị Name Data1 Connect Access DatabaseName Biblio.mdb Recordsettype 1-dbOpenDynaset RecordSource Titles Bước 2: Đặt DBGrid lên form, điều chỉnh các thuộc tính theo bảng sau: Thuộc tính Giá trị DataSource Data1 Nguyễn Đăng Quang
  88. 82 Giáo trình Visual Basic 6.0 AllowAddNew False AllowDelete False AllowUpdate False Bước 3: Nạp các vùng của bảng dữ liệu Title lên DBGrid Right-Click, chọn Retrieve Fields để lấy thông tin của và vùng thành các cột trong DBGrid. Bấm F5 chạy chương trình. Di chuyển qua các mẫu tin trong DBGrid bằng các phím mũi tên hoặc sử dụng Datacontrol để di chuyển. Chương trình có dạng như hình 8.12. Hình 8.13: Sử dụng DBGrid duyệt bảng Title Thêm DBCombo chọn nhà xuất bản (Publisher) để người dùng có thể chọn chỉ xem các tựa sách theo một nhà xuất bản . Thêm TextBox chọn năm xuất bản để người dùng có thể chọn xem các tựa sách xuất bản trong một năm nào đó. Đặt thêm các đối tượng lên form và qui định các thuộc tính như cho trong bảng sau: Đối tượng Thuộc tinh Giá trị Data2 Connect Access DatabaseName Biblio.mdb Recordsettype 2-dbOpenSnapshot RecordSource SELECT PubID, Name FROM Publishers ORDER BY PubID TextBox Name TxtFlt ComboBox Name cbFlt List Year Published Publisher DBCombo Name cbPublisher Datasource Data2 DataField PubID Rowsource Data2 BoundColumn PubID
  89. Giáo trình Visual Basic 6.0 83 ListField Name Button Name CmdApply Caption Apply Hình 8.14: Thêm đối tượng để thực hiện chức năng lọc Viết lệnh cho sự kiện click trên ComboBox Private Sub CbFlt_Click() Select Case CbFlt.ListIndex Case 0 FltMode = 0 txtFlt.Visible = True cbPublisher.Visible = False Case 1 FltMode = 1 txtFlt.Visible = False cbPublisher.Visible = True End Select End Sub Trong đó biến FltMode là biến chung được dùng để chọn chế độ xem theo năm xuất bản hay nhà xuất bản Viết lệnh cho nút lệnh Apply Private Sub CmdApply_Click() QryStr = "SELECT * FROM Titles WHERE " Select Case FltMode Case 0 QryStr = QryStr & "[Year Published]= " & txtFlt.Text Case 1 Nguyễn Đăng Quang
  90. 84 Giáo trình Visual Basic 6.0 QryStr = QryStr & "PubID= " & cbPublisher.BoundText End Select Data1.RecordSource = QryStr Data1.Refresh End Sub Viết lệnh cho form_load qui định phần tử đầu tiên được chọn trong ComboBox Private Sub Form_Load() CbFlt.ListIndex = 0 End Sub Bấm F5 chạy chương trình, thay đối giá trị chọn năm xuất bản rồi bấm nút Apply để xem tác dụng. II. TRUY XUẤT DỮ LIỆU THÔNG QUA DATA ACCESS OBJECT Một cách khác để truy xuất dữ liệu là sử dụng Data Access Object (DAO). Đối tượng này phép truy xuất dữ liệu bằng chương trình. 1. Các thao tác cơ bản a. Mở Cơ sở dữ liệu Lệnh Set Db = OpenDatabase(DbName, Options, read-only) Trong đó Db Biến kiểu Database đại điện cho cơ sở dữ liệu cần truy xuất DbName Chuỗi tên tập tin dữ liệu Options Tuỳ chọn khi mở cơ sở dữ liệu. Có giá trị True khi mở ở chế độ Exclusive (chỉ có một người truy xuất), có giá trị False khi mở ở chế độ Shared (nhiều người truy xuất) read-only (True/False) Chế độ mở cơ sở dữ liệu Ví dụ: Mở cơ sở dữ liệu BIBLIO.MDB Private Sub Form_Load() AppFolder = App.Path Dim db As Database Set db = OpenDatabase(AppFolder & "\BIBLIO.MDB") End sub b. Mở Recordset Lệnh Set rs = db.OpenRecordset(Source) Trong đó rs Biến kiểu Recordset Source Tên bảng dữ liệu hoặc chuỗi câu lệnh SQL Ví dụ: Dim Db As Database, rs As Recordset Set Db = OpenDatabase("BIBLIO.MDB") Set rs = Db.OpenRecordset("AUTHORS")
  91. Giáo trình Visual Basic 6.0 85 Hoặc mở Recordset từ chuỗi SQL Set Db = OpenDatabase("BIBLIO.MDB") Set Rs = Db.OpenRecordset("SELECT * FROM AUTHORS") Có thể liên kết một recordset đã mở với Datacontrol như sau: Set Data1.Recordset = Rs 2. Các thuộc tính của Recordset AbsolutePosition Vị trí tuyệt đối của mẫu tin trong Recordset, mẫu tin đầu tiên có thứ tự 0 Bookmark Vị trí của mẫu tin hiện thời (kiểu Variant) EOF Thuộc tính cho biết mẫu tin hiện hành có ở sau mẫu tin cuối (True/False) cùng hay không , cho giá trị True khi không có mẫu tin nào. BOF Thuộc tính cho biết mẫu tin hiện hành có ở trước mẫu tin đầu (True/False) tiên không, cho giá trị True khi không có mẫu tin nào. NoMatch Cho kết quả tìm kiếm sau lệnh Seek hoặc Find (True/False) RecordCount Số mẫu tin trong Recordset Fields Mảng các vùng trong Recordset Index Chọn tên vùng Index Sort Chọn tên vùng sort 3. Các thao tác trên Recordset a. Lấy giá trị của 1 vùng : Có 3 cách viết Cách 1: Recordset.Fields( ) Ví dụ: mYear = rs.Fields(5) Cách 2: Recordset.Fields( ) Ví dụ: mYear = rs.Fields(“Year Published”) Cách 3: Recordset![Chuỗi tên vùng] Ví dụ: mYear = rs![Year Published] b. Duyệt Phuơng thức Công dụng Ví dụ MoveNext Chuyển sang mẫu tin kế tiếp rs.MoveNext MoveLast Chuyển đến mẫu tin cuối cùng rs.MoveLast MovePrevious Chuyển về mẫu tin trước rs.MovePrevious MoveFirst Chuyển về mẫu tin đầu tiên rs.MoveFirst Nguyễn Đăng Quang
  92. 86 Giáo trình Visual Basic 6.0 Ví dụ: Thiết kế form duyệt bảng Titles của cở sở dữ liệu BIBLIO.MDB không sử dụng DataControl. Giao diện chương trình có dạng như hình dưới 8.14 Hình 8.14: Truy xuất dữ liệu bằng DAO Khai báo biến toàn cục như sau: Dim myDb As Database Dim myRS As Recordset Mở cơ sở dữ liệu khi nạp form và làm xuất hiện mẫu tin đầu tiên Private Sub Form_Load() AppFolder = App.Path ' Lấy đường dẫn hương trình If Right(AppFolder, 1) 0 Then myRS.MoveFirst 'di chuyển về mẫu tin đầu tiên Displayrecord ' Hiện nội dung mẫu tin End If End Sub Private Sub Displayrecord() ' Làm xuất hiện nội dung mẫu tin bằng cách gán giá trị vào các textbox With myRS txtTitle.Text = .Fields("Title") txtYearPublished.Text = .Fields("[Year Published]") txtISBN.Text = .Fields("ISBN") txtPubID.Text = .Fields("PubID") End With End Sub
  93. Giáo trình Visual Basic 6.0 87 Viết lệnh cho các nút di chuyển Private Sub CmdNext_Click() myRS.MoveNext ' Di chuyển sang mẫu tin kế tiếp If Not myRS.EOF Then Displayrecord Else myRS.MoveLast End If End Sub Private Sub CmdPrevious_Click() myRS.MovePrevious ' Di chuyển về mẫu tin trước đó If Not myRS.BOF Then Displayrecord Else myRS.MoveFirst End If End Sub Private Sub CmdFirst_Click() myRS.MoveFirst ' Di chuyển về mẫu tin đầu tiên Displayrecord End Sub Private Sub CmdLast_Click() myRS.MoveLast ' Di chuyển về mẫu tin cuối cùng Displayrecord End Sub c. Di chuyển nhanh bằng Bookmark Dim Lastmark As Variant Lastmark = rs.Bookmark ‘ Đánh dấu trước khi di chuyển rs.MoveLast ‘ Di chuyển đến mẫu tin cuối rs.Bookmark =Lastmark ‘Quay trở lại mẫu tin trước khi dc c. Tìm kiếm bằng Find Phương thức Hoạt động Ví dụ FindNext Tìm mẫu tin kế tiếp thỏa mãn điều kiện rs.FindNext “PubID=5” FindLast Tìm mẫu tin cuối cùng thỏa mãn điều kiện rs.FindLast “PubID=5” Nguyễn Đăng Quang