Tài liệu hướng dẫn thực tập tốt nghiệp công nghệ thông tin
Trang 1Khoa Công nghệ Thông tin
Tài liệu hướng dẫn Thực tập tốt nghiệp
(ngành Tin học Xây dựng) (ver 0.3 – 11/2/2006)
Trang 2CÁC NỘI DUNG TRÌNH BÀY
CHƯƠNG I Công cụ lập trình 8
I.1 Làm quen với giao diện Visual Basic 8
I.2 Ngôn ngữ Visual Basic 27
I.3 Kỹ năng gỡ rối chương trình (debug) 51
I.4 Sử dụng ActiveX trong Visual Basic 54
I.5 Kết nối cơ sở dữ liệu với ADO 61
I.6 Các hàm API cơ bản 68
CHƯƠNG II Thiết kế phần mềm 73
II.1 Khái quát về UML 73
II.2 Rational Rose 77
II.3 Use case diagram 78
II.4 Biểu đồ tương tác (Interaction diagram) 81
II.5 Class diagram 83
II.6 Biểu đồ thành phần (Component diagram) 87
II.7 Ví dụ áp dụng 88
CHƯƠNG III Đồ họa 106
III.1 Mục đích 106
III.2 Các chức năng chính của 1 hệ đồ họa 106
III.3 Sử dụng VDraw Component 106
CHƯƠNG IV Trợ giúp và đóng gói 115
IV.1 Lập trợ giúp với RoboHelp 115
IV.2 Đóng gói với InstallSheld 115
IV.3 Tạo film demo với WinCam 115
Tài liệu tham khảo 116
Trang 3MỤC LỤC
CHƯƠNG I Công cụ lập trình 8
I.1 Làm quen với giao diện Visual Basic 8
I.1.1 Cài đặt 9
I.1.2 Giao diện (IDE) 10
I.1.2.1 Menu Bar 11
I.1.2.2 Toolbars (Debug, Edit, form Editor, Standard) 11
I.1.2.3 Toolbox 12
I.1.2.4 Project Explorer 12
I.1.2.5 Properties window 13
I.1.2.6 Form Layout 13
I.1.2.7 Form Designer 13
I.1.2.8 Immediate Window 14
I.1.2.9 View Code button 14
I.1.2.10 View form button 14
I.1.3 Chương trình đầu tiên “Hello World” 14
I.1.3.1 Sắp đặt các vật dụng lên Form 15
I.1.3.2 Viết code 16
I.1.3.3 Chạy chương trình 16
I.1.4 Form & Controls 17
I.1.4.1 Sắp đặt controls lên Form 17
I.1.4.2 Resize và di chuyển control 18
I.1.4.3 Alignment Grid 18
I.1.4.4 Control Locking 19
I.1.5 Thuộc tính & Sự kiện 20
I.1.5.1 Thuộc tính 20
I.1.5.2 Sự kiện 20
I.1.6 Các control thông dụng 21
I.1.6.1 TextBox 21
I.1.6.2 CommandButton 22
I.1.6.3 Label 22
I.1.6.4 CheckBox 23
I.1.6.5 OptionButton 23
I.1.6.6 ComboBox 24
I.1.7 Menu 25
I.2 Ngôn ngữ Visual Basic 27
I.2.1 Kiểu, biến & biểu thức 27
I.2.1.1 Biến 27
I.2.1.2 Kiểu biến 27
Trang 4I.2.1.3 Toán tử 31
I.2.1.4 Biểu thức 32
I.2.1.5 Phép gán 32
I.2.1.6 Toán tử điều kiện 32
I.2.1.7 Toán tử logic 33
I.2.2 Các cấu trúc điều khiển 33
I.2.2.1 Cấu trúc If Then End If 33
I.2.2.2 Cấu trúc If Then Else End If 33
I.2.2.3 Select Case 34
I.2.2.4 Vòng lặp Do While Loop 34
I.2.2.5 Vòng lặp Do Loop While 34
I.2.2.6 Vòng lặp For Next 35
I.2.2.7 Vòng lặp For Each Next 35
I.2.3 Chương trình con 36
I.2.3.1 Sub 36
I.2.3.2 Function 36
I.2.3.3 Tham biến & tham trị 36
I.2.4 Form 37
I.2.4.1 Các thuộc tính của Form 38
I.2.4.2 Các sự kiện của Form 38
I.2.4.3 MDI Form 39
I.2.5 Module 40
I.2.6 Cách thức tổ chức dữ liệu trong VB project 40
I.2.7 Class module 40
I.2.7.1 Khái niệm Object & Class 40
I.2.7.2 Lập trình OOP trong VB 41
I.2.7.3 Ví dụ - Xây dựng lớp clsBox 42
I.2.8 Làm việc với file 48
I.2.8.1 Mở file 48
I.2.8.2 Đọc file 49
I.2.8.3 Ghi file 49
I.2.8.4 Một số kỹ thuật sử dụng để đọc file text 50
I.3 Kỹ năng gỡ rối chương trình (debug) 51
I.3.1 Sử dụng MsgBox 52
I.3.2 Sử dụng cửa sổ Watch 52
I.3.3 Đặt điểm dừng & chạy từng dòng lệnh 54
I.4 Sử dụng ActiveX trong Visual Basic 54
I.4.1 Các ActiveX thông dụng 54
I.4.1.1 CommonDialog 54
I.4.1.2 VSFlexGrid 55
Trang 5I.4.1.3 MenuXP 57
I.4.1.4 MaXC 59
I.4.1.5 VDraw 60
I.4.2 Đăng ký & tìm hiểu ActiveX 60
I.4.2.1 Đăng ký ActiveX 60
I.4.2.2 Tìm hiểu cách sử dụng ActiveX bằng VB 60
I.5 Kết nối cơ sở dữ liệu với ADO 61
I.5.1 Thiết lập Connection String 62
I.5.2 Thiết lập RecordSource 64
I.5.3 Bind control với ADO Data 65
I.5.4 Làm việc với Database bằng code 66
I.6 Các hàm API cơ bản 68
I.6.1 Khai báo API 69
I.6.2 Các hàm API trên DC (Device Context) 70
CHƯƠNG II Thiết kế phần mềm 73
II.1 Khái quát về UML 73
II.1.1 Giới thiệu UML 73
II.1.2 Các khái niệm của UML 73
II.1.2.1 Phần tử mô hình 73
II.1.2.2 Quan hệ 74
II.1.2.3 Biểu đồ 74
II.1.3 Kiến trúc hệ thống 75
II.1.3.1 Khung nhìn UC (Use case view) 76
II.1.3.2 Khung nhìn thiết kế (Design view) 76
II.1.3.3 Khung nhìn cài đặt (Implementation view) 76
II.1.3.4 Khung nhìn triển khai (Deployment view) 77
II.1.3.5 Khung nhìn tiến trình (Process view) 77
II.2 Rational Rose 77
II.2.1 Rational Rose là gì 77
II.2.2 Giao diện của Rational Rose 78
II.3 Use case diagram 78
II.3.1 Phân tích UC 78
II.3.1.1 UC là gì? 78
II.3.1.2 Tìm kiếm Actor 79
II.3.1.3 Tìm kiếm UC 79
II.3.2 UC Diagram 79
II.3.2.1 Tài liệu mô tả UC 80
II.3.3 Tổng kết 80
II.4 Biểu đồ tương tác (Interaction diagram) 81
Trang 6II.4.1 Đối tượng là gì? 81
II.4.2 Tìm đối tượng 81
II.4.3 Biểu đồ trình tự (Sequence Diagram) 82
II.4.4 Biểu đồ cộng tác (Collaboration Diagram) 82
II.5 Class diagram 83
II.5.1 Class là gì? 83
II.5.2 Tìm kiếm class 83
II.5.3 Phân loại class (stereotype) 84
II.5.4 Class Diagram 84
II.5.4.1 Quan hệ giữa các class (relationship) 84
II.5.4.2 Tính nhiều (multiplicity) của quan hệ 86
II.5.5 Cập nhật sequence diagram 87
II.6 Biểu đồ thành phần (Component diagram) 87
II.6.1 Tổng kết 87
II.7 Ví dụ áp dụng 88
II.7.1 Mô tả bài toán 88
II.7.2 Biểu đồ UseCase 89
II.7.2.1 Tìm kiếm Actor 89
II.7.2.2 Tìm UseCase 89
II.7.2.3 Biểu đồ UseCase 90
II.7.2.4 Mô tả UseCase 90
II.7.3 Biểu đồ tương tác 95
II.7.3.1 Tìm đối tượng 95
II.7.3.2 Biểu đồ tuần tự (sequence diagram) 96
II.7.4 Biểu đồ lớp 103
II.7.4.1 Tìm kiếm lớp 103
II.7.4.2 Biểu đồ lớp 104
II.7.5 Cập nhật biểu đồ tương tác 104
CHƯƠNG III Đồ họa 106
III.1 Mục đích 106
III.2 Các chức năng chính của 1 hệ đồ họa 106
III.3 Sử dụng VDraw Component 106
III.3.1 Cài đăt VDraw 106
III.3.2 Kiến trúc VDraw 107
III.3.3 Vẽ đối tượng 108
III.3.4 Thay đổi vùng nhìn, điểm nhìn 109
III.3.5 Lựa chọn đối tượng 110
III.3.6 Người dùng chọn đối tượng 111
III.3.7 Đọc và lưu bản vẽ 113
Trang 7III.3.8 Một số mẹo vặt với VDraw 114
CHƯƠNG IV Trợ giúp và đóng gói 115
IV.1 Lập trợ giúp với RoboHelp 115
IV.2 Đóng gói với InstallSheld 115
IV.3 Tạo film demo với WinCam 115
Tài liệu tham khảo 116
Trang 8CHƯƠNG I Công cụ lập trình
Phần này xin giới thiệu về công cụ lập trình Visual Basic (VB), đây là môi trường phát triển thường được các sinh viên chuyên ngành Tin h ọc Xây d ựng s ử d ụng trong các đồ án t ốt nghiệp Sau khi đọc phần này, bạn có thể:
- Có được những kiến thức cơ bản về ngôn ngữ cũng như môi trường phát triển VB
- Sử dụng các hàm API trong Visual Basic
- Tận dụng các ActiveX để bổ sung chức năng cho ứng dụng
- Kết nối cơ sở dữ liệu trong Visual Basic
I.1 Làm quen với giao diện Visual Basic
Dùng VB6 là cách nhanh và t ốt nh ất để l ập trình cho Microsoft Windows VB6 cung c ấp cho bạn một bộ công cụ hoàn ch ỉnh để đơn giản hóa vi ệc triển khai l ập trình ứng dụng cho MSWindows
Visual Basic là gì?
- Phần "Visual" đề cập đến phương pháp được sử dụng để tạo giao diện đồ họa người
dùng (Graphical User Interface hay viết tắc là GUI) Có sẵn những bộ phận hình ảnh,
gọi là controls, bạn có th ể sắp đặt vị trí và xác l ập các đặc tính c ủa chúng trên m ột khung màn hình, gọi là form Nếu b ạn đã từng sử dụng chương trình v ẽ chẳng h ạn
như Paint, bạn đã có sẵn các kỹ năng cần thiết để tạo một GUI cho VB6
- Phần "Basic" đề c ập đến ngôn ng ữ BASIC (Beginners All-Purpose Symbolic
Instruction Code), một ngôn ngữ lập trình đơn giản, dễ học, dễ dùng
Visual Basic b ắt ngu ồn t ừ MSBasic, do Bill Gates vi ết t ừ th ời dùng cho máy tính 8 bits
8080 Khả năng của ngôn ngữ này cho phép những người chuyên nghiệp hoàn thành b ất kỳ điều gì nhờ sử dụng ngôn ngữ lập trình MSWindows nào khác
Người mang l ại phần "Visual" cho VB là Alan Cooper, ông đã gói môi tr ường ho ạt động của Basic trong m ột ph ạm vi d ễ hiểu, d ễ dùng, không c ần ph ải chú ý đến sự tinh x ảo của MSWindows, nhưng vẫn dùng các chức năng của MSWindows một cách hiệu quả
Trang 9Visual Basic còn có hai d ạng khác: Visual Basic for Application (VBA) và VBScript VBA
là ngôn ng ữ nằm phía sau các ch ương trình Word, Excel, MSAccess, MSProject, v.v còn gọi là Macros Dùng VBA trong MSOffice, AutoCAD , ta có th ể làm tăng chức năng bằng cách tự động hóa các chương trình
Dù cho m ục đích của bạn là t ạo một tiện ích nh ỏ cho riêng b ạn, trong m ột nhóm làm vi ệc của b ạn, trong m ột công ty l ớn, hay c ần phân b ố ch ương trình ứng d ụng r ộng rãi trên th ế giới qua Internet, VB6 cũng sẽ có các công cụ lập trình mà bạn cần thiết
Ngoài ra, bạn có thể chạy Setup khi nào cần thiết Ví dụ, bạn có thể chạy Setup để cài đặt lại Visual Basic trong folder khác, hoặc để cài đặt thêm bớt các phần của VB6
Nếu vì lý do gì hệ thống không install các đĩa compact MSDN (bạn sẽ khám phá ra điều này khi thấy Help không có m ặt lúc ch ạy VB6), b ạn có th ể cài đặt chúng tr ực tiếp từ đĩa số 1 của bộ MSDN
Để bổ sung và xóa các thành phần VB:
- Bỏ đĩa CD vào ổ đĩa
- Nếu menu không t ự động hi ện lên thì ch ạy chương trình Setup có s ẵn trong folder gốc trên đĩa CD
- Chọn nút Custom trong hộp thoại Microsoft Visual Basic 6.0 Setup
- Chọn hay xóa các thành ph ần b ằng cách check hay uncheck các h ộp danh sách Options của dialog Custom
- Thực hiện các chỉ dẫn Setup trên màn hình
Ghi chú: Trong lúc cài VB6, nh ớ chọn Graphics n ếu không b ạn s ẽ thiếu m ột số hình ảnh như icons, bitmaps v.v Đáng l ẽ Microsoft cho t ự động cài đặt Graphics, t ức là Default (không có nói gì) thì cài đặt Graphics
Trang 10I.1.2 Giao diện (IDE)
Khi khởi động VB6 bạn sẽ thấy mở ra hộp thoại New Project Ở đây VB6 cho bạn chọn một trong nhi ều lo ại ch ương trình, hãy ch ọn Standard EXE ( để t ạo ch ương trình là file EXE, chạy độc lập)
Sau khi l ựa chọn lo ại chương trình, giao di ện của môi tr ường phát tri ển (IDE - Integrated Development Environment) của VB hiện ra
Trang 11IDE là môi tr ường cho phép b ạn lập trình, thi ết kế giao di ện, gỡ rối Các thành ph ần của IDE gồm Menu bar, Toolbar, Toolbox, Project Explorer, Properties Windows
I.1.2.1 Menu Bar
Giống như tất cả các phần mềm khác, menu bar của VB chứa tất cả các chức năng (được bố trí một cách hệ thống) mà bạn sử dụng để làm việc với VB6, kể cả các menu để truy cập các chức năng đặc biệt dành cho việc lập trình chẳng hạn như Project, Format, hoặc Debug
I.1.2.2 Toolbars (Debug, Edit, form Editor, Standard)
Các toolbars có hình các icons cho phép b ạn click để thực hiện công việc tương đương với
dùng một menu, nhưng nhanh và tiện hơn Bạn dùng menu View | Toolbars để làm cho các
toolbars hiện ra hay bi ến mất đi Bạn có th ể thay đổi vị trí m ột toolbar b ằng cách n ắm vào hai gạch dọc nằm bên trái toolbar rồi dời toolbar đi chỗ khác (nắm ở đây nghĩa là để con trỏ chuột lên ch ỗ hai g ạch dọc rồi bấm xuống và gi ữ nút bên trái c ủa chuột, trong khi kéo con trỏ chuột đi nơi khác)
Trang 12I.1.2.3 Toolbox
Đây là h ộp đồ nghề với các công c ụ, gọi là controls, mà b ạn có th ể đặt lên các
form trong lúc thiết kế (design) Nếu Toolbox biến mất, bạn có thể display nó trở
lại b ằng cách dùng menu command View | Toolbox B ạn có th ể khi ến toolbox
hiển thị nhiều controls h ơn bằng cách ch ọn Components t ừ popup menu (ch ọn
Toolbox r ồi b ấm nút ph ải c ủa mouse để hi ện popup menu) hay dùng menu
Project | Components Ngoài vi ệc trình bày Toolbox m ặc định, bạn có th ể tạo
cách trình bày khác b ằng cách ch ọn Add Tab t ừ popup menu và b ổ sung các
control cho tab từ kết quả
I.1.2.4 Project Explorer
Sử dụng để liệt kê các form và các module
trong project (d ự án) hi ện hành c ủa b ạn
Trên Pascal, bạn chỉ làm việc với từng file
riêng l ẻ, còn trong VB, m ỗi khi vi ết m ột
chương trình là b ạn làm vi ệc v ới m ột
project Project là s ự tập hợp các files mà
bạn s ử d ụng để t ạo m ột trình ứng d ụng
Chia ứng d ụng thành nhiều module nh ỏ
cho phép bạn lập trình hiệu quả hơn
Trang 13I.1.2.5 Properties window
Liệt kê các đặc tính c ủa các form ho ặc control
được chọn M ột property là m ột đặc tính c ủa m ột
object chẳng hạn như size, caption, hoặc color Khi
bạn sửa đổi một property bạn sẽ thấy hiệu quả ngay
lập tức, thí dụ thay đổi property Font của một Label
sẽ thấy Label ấy được hiển th ị b ằng Font ch ữ mới
Khi b ạn ch ọn m ột Property c ủa control hay form
trong Properties window, phía bên ph ải ở chỗ value
của property có th ể display ba ch ấm ( ) m ũi tên
hướng xu ống d ưới B ấm vào đó để hi ển h ộp tho ại
để thiết lập các thông số cho property này
I.1.2.6 Form Layout
Bạn dùng Form Layout để chỉnh vị trí của các forms
khi form hi ện ra l ần đầu lúc ch ương trình ch ạy Click
phải chuột trên c ửa sổ, chọn Resolution Guides trên
popup menu để th ấy n ếu dùng m ột màn ảnh v ới độ
mịn (resolution) t ệ hơn, thí d ụ như 640 X 480, thì nó
sẽ nhỏ như thế nào
I.1.2.7 Form Designer
Dùng để thiết kế giao diện lập trình Bạn
có th ể bổ sung các controls, các đồ họa
(graphics), các hình ảnh và m ột form
Mỗi form trong trình ứng d ụng c ủa b ạn
có designer form riêng của nó
Trang 14I.1.2.8 Immediate Window
Dùng để g ỡ r ối (debug) trình ứng d ụng
của b ạn B ạn có th ể hi ển th ị d ữ ki ện
trong khi ch ạy ch ương trình ứng d ụng
Khi chương trình đang tạm ngừng ở một
break point, b ạn có th ể thay đổi giá tr ị
các bi ến (variables) hay ch ạy một dòng
chương trình Phím t ắt để bật / tắt cửa sổ
Immediate là tổ hợp Ctrl+G
I.1.2.9 View Code button
Click lên nút này trên Project Explorer
để xem code c ủa m ột form mà b ạn đã
chọn Cửa sổ code giống như hình bên
I.1.2.10 View form button
Click lên nút này để xem form designer của một form mà bạn đã chọn
Ghi chú: Nhi ều cửa trong IDE nh ư Toolbars, Toolbox, Project Explorer v.v có th ể ở trạng thái trôi (floating) hay dính (docked) B ạn có th ể thay đổi vị trí chúng b ằng cách n ắm vào Title Bar của cửa sổ rồi dời đi Dĩ nhiên bạn cũng có thể mở rộng hay làm nhỏ một cửa bằng cách dời một cạnh dọc hay ngang c ủa nó Khi để một cửa sổ này lên trên m ột cửa sổ khác chúng có thể tìm cách dính nhau
Một chương trình Visual Basic g ồm có ph ần mã l ập trình và các hình ảnh (visual) B ạn có thể thiết kế phần hình ảnh bằng cách dùng những đồ nghề (Controls hay Objects) t ừ Túi đồ nghề (Toolbox) n ằm bên trái N ếu b ạn không th ấy cái Túi đồ ngh ề thì dùng m ệnh l ệnh
Menu View | Toolbox để bắt nó hiện ra
Khi bạn bắt đầu thiết kế một chương trình b ằng cách ch ọn Standard EXE, môi tr ường triển khai l ập trình (IDE) cho b ạn s ẵn m ột Form tên là Form1 B ạn hãy s ửa đề t ựa (Title) c ủa
Trang 15form ra cái gì có ý ngh ĩa h ơn b ằng cách đổi thu ộc tính Caption c ủa form trong c ửa s ổ Propeties (trong hình dưới đây ta sửa thuộc tính Caption của form thành ra "Chuong trinh dau tien")
I.1.3.1 Sắp đặt các vật dụng lên Form
Muốn đặt một Control lên Form, click hình cái Control trong Toolbox r ồi Drag (b ấm nút trái c ủa con chu ột rồi kéo cho thành hình ch ữ nh ật trước khi buông nút trái ra) con chu ột trên Form vẽ thành cỡ của Control Những Controls bạn sẽ dùng thường nhất từ Toolbox là
Label (nhãn), Textbox (hộp để đánh chữ vào) và CommandButton (nút bấm mệnh lệnh)
Trong hình trên ta có 1 Label, 1 Textbox và 1 CommandButton Mu ốn sửa chữ Label1 ra
"Loi chao" thì s ửa thu ộc tính Caption Còn Textbox không dùng thu ộc tính Caption mà dùng thuộc tính Text Ta cũng có thể thay đổi các thuộc tính Caption và Text trong khi chạy
chương trình (at run-time) Trong lúc thi ết kế (design time) bạn có thể sửa đổi kiểu chữ của
những Controls bằng cách đổi thuộc tính Font của chúng trong cửa sổ Properties (click bên
Trang 16phải của thuộc tính Font trong Properties Window, IDE s ẽ hi ển th ị hộp tho ại Font để b ạn lựa chọn những đặc tính của Font như trong hình dưới đây)
Nếu bạn thấy bực mình tại sao chữ mặc định (default size) c ủa các Control h ơi nhỏ, bạn có thể giải quyết b ằng cách s ửa cỡ ch ữ của chính Form cho nó l ớn hơn Vì khi m ột Control được đặt lên một Form, nó thừa kế cỡ chữ của Form
I.1.3.2 Viết code
Nháy đúp vào Button, VB b ật lên cửa sổ Code cùng với một thủ tục Command1_Click mà
nội dung chưa có gì, bạn hãy bổ sung nội dung để có thủ tục Command1_Click như sau
Private Sub Command1_Click()
MsgBox "Xin chao " & Text1.Text
End Sub
Trong đoạn ch ương trình trên, Command1 là tên c ủa Command button trên form
Command1_Click là hàm được g ọi khi ng ười dùng nh ấn nút Đoạn l ệnh MsgBox th ực
chất là l ời gọi hàm Hàm MsgBox hi ển th ị một hộp tho ại v ới n ội dung trên h ộp tho ại là tham số đầu tiên của hàm Text1 là tên của hộp nhập liệu TextBox trên form, Text1.Text là
nộp dung c ủa h ộp nh ập li ệu Trong đoạn ch ương trình này, chúng ta s ẽ hi ển th ị một h ộp thoại với lời nhắc trong hộp thoại là Xin chao + nội dung của hộp nhập liệu Text1
I.1.3.3 Chạy chương trình
Để chạy chương trình vừa lập được, bạn nhấn F5 hoặc biểu tượng Run trên Toolbar Sau khi ch ạy, một h ộp tho ại gi ống v ới form mà chúng ta v ừa v ẽ s ẽ hi ện ra Click chu ột vào TextBox để ghi tên c ủa bạn vào, ví d ụ: sửa nội dung TextBox thành “Tin hoc Xay dung” Nhấn vào nút Command1, chương trình sẽ hiển thị một hộp thoại khác với lời nhắc trên hộp thoại giống như hình sau
Trang 17Hộp thoại MsgBox được sử dụng rất nhiều trong VB để hiển thị các thông báo, và th ường được dùng để hiển th ị giá tr ị của các bi ến trong quá trình ch ạy chương trình Khi ch ương trình của bạn chạy lỗi mà không phát hi ện ra, MsgBox là m ột công cụ hữu hiệu để bạn theo dõi sự thay đổi của các biến trong quá trình chạy chương trình MsgBox là công cụ đơn giản nhất để b ạn th ực hi ện m ột quá trình g ọi là Debug (g ỡ l ỗi ch ương trình), đây là k ỹ thu ật không thể thiếu đối với các lập trình viên, trong các ph ần sau chúng ta s ẽ đi vào nghiên cứu chi tiết về kỹ thuật này
Hầu hết các chương trình VB6 đều có ít nhất một Form Khi ta chạy chương trình, Form này
sẽ hiện ra tr ước hết để ta ra l ệnh nó làm chuy ện gì Form tr ống không làm được gì nhi ều, nên ta đặt lên Form nh ững controls nh ư Textbox (h ộp nh ập li ệu để gõ ch ữ vào), Label (nhãn), CommandButton (nút l ệnh), v.v Các controls cho phép ng ười dùng nh ập các d ữ kiện để chương trình x ử lý, và các controls c ũng hi ển th ị k ết qu ả và th ực hiện cách m ệnh lệnh của người dùng
I.1.4.1 Sắp đặt controls lên Form
Ta hãy bắt đầu thiết kế một chương trình mới (New Project) bằng cách chọn Standard EXE, môi tr ường tri ển khai l ập trình (IDE) cho b ạn s ẵn một Form tên là Form1 Mu ốn đặt một
Control lên Form, click hình Control tương ứng trong Toolbox rồi Drag (bấm nút trái của
con chuột rồi kéo cho thành hình ch ữ nhật trước khi buông nút trái ra) con chu ột trên Form
vẽ thành c ỡ c ủa Control M ột cách khác để đặt m ột control lên Form là nháy đúp
(doubleClick) control trong Toolbox, m ột hình control s ẽ hi ện ra trên Form K ế đó b ạn chuyển control đi đến chỗ mình muốn và thay đổi kích thước của nó Nếu bất cứ lúc nào bạn
không thấy Túi đồ nghề (Toolbox) n ằm bên trái, b ạn có th ể dùng m ệnh lệnh Menu View | Toolbox để b ắt nó hi ện ra Có m ột cách khác là click lên bi ểu t ượng toolbox trên toolbar
chính của VB6
Trang 18I.1.4.2 Resize và di chuyển control
Khi bạn chọn một control (click lên nó), quanh control s ẽ hiện ra resize handle, 8 nút đen
dọc theo chu vi của control, dùng để thay đổi vị trí và kích thước control
Click lên các nút đen của resize handle, bạn có thể thay đổi kích thước control Có một cách khác để resize control là dùng Shift + phím m ũi tên (lên, xu ống, phải, trái) B ấm nút Shift trong khi bấm một arrow key, control sẽ lớn ra hay thu hẹp theo chiều của ArrowKey Tương t ự nh ư th ế, b ấm nút Ctrl trong khi b ấm m ột arrow key, control s ẽ di chuy ển theo chiều của ArrowKey
Các thao tác v ẽ và thay đổi kích th ước control v ừa minh h ọa là khi b ạn thi ết k ế form (design-time) Trong lúc ch ương trình ch ạy (run-time), trong code ta có th ể thay đổi kích thước và v ị trí các controls d ễ dàng, th ậm chí có th ể làm cho chúng hi ện ra hay bi ến m ất
bằng cách sửa đổi giá trị các thuộc tính left, top, width, height và visible của các control
I.1.4.3 Alignment Grid
Để giúp b ạn sắp đặt ngay ngắn các controls trên m ột form, VB6 cho b ạn Alignment Grid
Nó là những chấm đen của các hàng dọc và xuôi trên form Bạn có thể làm cho các dấu đen
của grid trên form bi ến m ất b ằng cách dùng menu Tools | Options để hi ện th ị h ộp tho ại Option, tiếp đó chọn Tab General và bỏ checkbox "Show Grid"
Trang 19Bạn c ũng có th ể nhân d ịp này thay đổi kho ảng cách chi ều r ộng (Width) và chi ều cao (Height) của các chấm đen của grid Kích th ước nhỏ nhất của Width hay Height là 24 Hãy
so sánh hai trường hợp form có và không có Show Grid như dưới đây
I.1.4.4 Control Locking
Một khi b ạn đã sắp đặt kích thước và vị trí của các control trên form
rồi, r ất d ễ ta tình c ờ thay đổi các đặc tính ấy vì vô ý click lên m ột
control Do đó VB6 cho ta Menu command Format | Lock Controls
để khóa chúng l ại Sau khi khóa, hình chi ếc khóa trên menu b ị chìm
xuống
Nếu sau này b ạn muốn thay đổi kích th ước hoặc vị trí của chúng thì
nhớ dùng Menu command Format | Lock Controls lại Sau khi m ở
khóa, cái hình chiếc khóa trên menu hiện ra bình thường
VB cung c ấp r ất nhiều control chu ẩn, t ạo điều kiện cho b ạn có th ể dễ dàng phát tri ển ứng dụng của mình Sau đây chúng ta cùng tìm hiểu các control thông dụng
TextBox Nhập dữ liệu từ phía người dùng (người dùng gõ các thông tin
vào hộp TextBox, chương trình có th ể đọc và thay đổi thông
tin của TextBox thông qua thuộc tính Text)
CommandButton Nút lệnh, thực hiện một công việc gì đó khi người dùng nhấn
chuột, gõ phím nóng tác động lên nút lệnh Khi bị tác động,
nút lệnh sẽ gọi đến hàm tương ứng với sự kiện Click
Label Hiển thị thông tin để nhắc người dùng Thường được sử dụng
kết h ợp với m ột TextBox để nêu ý ngh ĩa của d ữ li ệu trong TextBox đó
CheckBox Cho phép người dùng nhập dữ liệu theo kiểu có / không
OptionButton Cho phép ng ười dùng nh ập d ữ li ệu theo ki ểu một l ựa chọn
trong nhiều lựa chọn khác nhau Nếu như CheckBox cho phép chọn nhiều l ựa chọn trong 1 nhóm thì OptionButton ch ỉ cho
Trang 20phép chọn 1 lựa chọn trong cùng 1 nhóm
Frame Dùng để nhóm nhiều CheckBox và OptionButton vào với nhau
thành cùng một nhóm
ComboBox Cho phép người dùng lựa chọn 1 giá tr ị từ nhiều giá trị khác
nhau ComboBox được hiển thị dưới dạng xổ xuống, khi click chuột vào Combo thì danh sách các giá trị mới hiện ra ComboBox có 2 lo ại: Một loại chỉ cho phép ch ọn giá trị, một loại vừa cho phép chọn giá trị vừa cho phép nhập giá trị mới
Timer Phát sinh sự kiện Timer sau m ột khoảng thời gian (Xác định
bởi thuộc tính Interval) S ử dụng để tạo chuyển động, hoạt hình
Chúng ta đã làm vi ệc v ới form và control (v ẽ các đối t ượng), thay đổi các thu ộc tính c ủa form, control qua bảng thuộc tính (properties) Phần này sẽ trình bày m ột cách hệ thống các thuộc tính và sự kiện phổ biến
I.1.5.1 Thuộc tính
Mỗi đối tượng có các thu ộc tính mô t ả vị trí, kích th ước, tính ch ất khác nhau, thay đổi các giá trị của thuộc tính thì tính chất của đối tượng thay đổi Bảng dưới đây liệt kê những thuộc tính thông dụng của hầu hết tất cả các control
Tên thuộc tính Mô tả
Left Vị trí bên trái của control
Top Vị trí bên trên của control
Height Chiều cao của control
Width Chiều rộng của control
Name Tên control (tên này sẽ được sử dụng như là tên biến của đối tượng)
Enabled (True/False) Người dùng có thể tác động đến control hay không?
Visible (True/False) Control có được nhìn thấy hay không?
Trang 21- Khi người dùng nh ấn phím A, ô TextBox phát sinh s ự kiện KeyDown (gọi tới hàm txtDuLieu_KeyDown)
- Nếu người dùng gi ữ phím A trong 1 kho ảng thời gian đủ dài, ô TextBox s ẽ liên t ục
phát ra các s ự kiện KeyPress (g ọi tới hàm txtDuLieu_KeyPress) và đưa các ký t ự
'A' vào ô nhập liệu
- Khi ng ười dùng th ả phím A ra, ô TextBox phát sinh s ự kiện KeyUp (g ọi t ới hàm txtDuLieu_KeyUp)
Tên sự kiên Mô tả
Change Người dùng sửa nội dung của combo box hoặc text box
Click Người dùng click trái chuột trên button hoặc control
DblClick Người dùng click đúp trái chuột trên control
DragDrop Người dùng kéo control đến một vị trí khác
DragOver Người dùng kéo control lên trên một control khác
GotFocus Control nhận focus (tức là mọi thao tác phím được gửi đến control)
KeyDown Người dùng nhấn phím khi control đang focus (chỉ phát sinh 1 l ần khi người dùng
nhấn phím)
KeyPress Người dùng nhấn phím khi control đang focus (phát sinh nhiều lần, khi người dùng
giữ phím thì sẽ phát sinh nhiều sự kiện KeyPress – hiện tượng giữ và lặp phím)
KeyUp Người dùng thả phím khi control đang focus
LostFocus Control mất focus
MouseDown Người dùng nh ấn phím chu ột (c ả trái và ph ải) khi con tr ỏ chu ột đang ở trên
control
MouseUp Người dùng thả phím chuột (cả trái và phải) khi con trỏ chuột đang ở trên control
MouseMove Người dùng di chuyển con trỏ chuột trên control
I.1.6.1 TextBox
TextBox là control đuợc dùng nhiều nhất để hiển
thị văn bản và nhập dữ liệu Thuộc tính chính của
Textbox là Text Ta có th ể disable (khi ến nó b ất
lực, không phản ứng gì hết và không cho sửa đổi)
một TextBox bằng cách đặt thuộc tính Enable là
False (chữ sẽ bị mờ đi), hay Lock (không cho sửa
đổi) m ột text box b ằng cách đặt thu ộc tính
Locked là True (chữ không bị mờ)
Trang 22Text có thể được căn lề (thuộc tính Alignment) để căn chữ bên trái, chính giữa hay bên phải
của hộp nó (như hình bên)
I.1.6.2 CommandButton
CommandButton rất tiện cho ta dùng vào vi ệc xử lý m ột chuyện gì khi ng ười dùng Click (chuột hoặc phím) lên button Event ta dùng th ường nhất cho CommanButton là Click Nội dung hiển th ị trên Button được xác định thông qua thu ộc tính Caption Để người dùng có
thể sử dụng phím nóng (ví d ụ: Phím Exit – ALT+E – đè nút Atl trong lúc b ấm nút E), b ạn
đặt ký t ự "&" trước chữ E trong Caption c ủa button ( &Exit) Button s ẽ hiển thị với chữ E
được gạch chân (Exit)
Ngoài ra ta c ũng có th ể cho thêm m ột cái hình vào CommandButton bằng cách ch ọn một icon cho thuộc tính Picture và đặt thuộc tính Style là Graphical (thay vì Standard)
Lúc run-time bạn có thể thay đổi hình hay Caption c ủa CommandButton Trong thí dụ dưới đây, Caption của CommandButton CmdOperation biến đổi giữa hai values Stop và Start:
Private Sub CmdOperation_Click()
If CmdOperation.Caption = "&Stop" Then
Trang 23I.1.6.4 CheckBox
CheckBox được dùng để người dùng xác nh ận có đặc tính nào m ột cách nhanh chóng (giá
trị có hoặc không) Thuộc tính Value của CheckBox có thể là Checked (làm cho hộp vuông
có dấu, bằng 1), Unchecked (làm cho hộp vuông trống không, bằng 0) hay Grayed (làm cho
hộp vuông có d ấu màu nh ạt, b ằng 2) B ạn có th ể dùng thu ộc tính Alignment để làm cho
Caption đứng bên phải (Left Justify) hay bên trái (Right Justify) của hộp vuông
I.1.6.5 OptionButton
OptionButton (còn g ọi là RadioButton) có hình tròn v ới một ch ấm ở giữa, thay gì hình
vuông với một gạch ở giữa như CheckBox OptionButton luôn luôn được qui tụ thành một nhóm, chứa trong m ột container Container là m ột Control có kh ả n ăng ch ứa các controls khác (Frame, PictureBox, hay chính Form đều là Container) Sau khi đặt một Container lên Form, nếu muốn để một OptionButton lên Container, trước hết ta phải chọn container, rồi kế
đó chọn OptionButton S ở dĩ, tất cả OptionButtons ph ải nằm trong m ột container là vì b ất
cứ lúc nào, nhi ều nh ất là m ột OptionButton trong container có value True (vòng tròn có chấm ở giữa)
Muốn biết một OptionButton có thật sự nằm trong một container, bạn thử kéo container đi chỗ khác N ếu OptionButton b ị d ời theo container thì nó n ằm trong container M ột cách
khác là th ử kéo OptionButton ra kh ỏi container N ếu kéo ra được thì nó không n ằm trong container
Muốn di chuy ển m ột OptionButton t ừ container này sang container khác, b ạn Cut OptionButton rồi Paste nó vào container kia
Trang 24I.1.6.6 ComboBox
ComboBox là control cho phép b ạn ch ọn m ột giá tr ị t ừ nhi ều l ựa ch ọn trong danh sách
ComboBox là danh sách kiểu sổ xuống nên chiếm rất ít diện tích và rất được ưa dùng
Để tạo danh sách các giá tr ị lựa chọn lúc design-time, trên c ửa sổ Properties, click đúp vào
thuộc tính List, trong danh sách gõ các giá tr ị, m ỗi giá tr ị 1 dòng Chú ý: Để xuống dòng trong khi gõ danh sách, b ạn phải dùng tổ hợp phím Ctrl+Enter thay vì phím Enter (dùng
để xác nhận giá trị cuối cùng)
Để tạo danh sách các giá tr ị lựa chọn lúc run-time, ta s ử dụng phương thức AddItem của
Combo Ví dụ sau minh họa cách tạo danh sách các giá trị của control có tên là Combo1
Private Sub Form_Load()
Chú ý: Để ng ười dùng không th ể nh ập thông tin vào Combo nh ư TextBox, hãy thi ết l ập
thuộc tính Style là Dropdown List Giá trị mặc định của Style là Dropdown Combo, ở kiểu
này, Combo ho ạt động nh ư 1 TextBox nh ưng l ại cho phép ng ười dùng nh ập nhanh b ằng cách lựa chọn các giá trị từ danh sách
Trang 25I.1.7 Menu
Ta dùng Menu Editor để tạo ho ặc sửa một Menu cho program Menu thu ộc về một Form
Do đó, trước hết ta chọn một Form để làm vi ệc với Form Designer Ti ếp đó ta dùng menu
Tools | Menu Editor hay click lên icon của Menu Editor trên Toolbar để làm cho Menu Editor hiện ra
Đầu tiên có m ột v ệt màu xanh n ằm trong khung tr ắng c ủa Menu Editor, n ơi s ẽ hi ển th ị Caption c ủa Menu Command đầu tiên c ủa Form Khi ta đánh ch ữ &File vào Textbox Caption, nó c ũng hi ện ra trên v ệt xanh nói trên K ế đó, b ạn có th ể đánh tên c ủa Menu Command vào Textbox Name Dù ta cho Menu Command m ột tên nhưng ta ít khi dùng nó, trừ tr ường h ợp mu ốn nó visible/invisible (hi ện ra/bi ến m ất) Bình th ường ta dùng tên c ủa MenuItems nhiều hơn
Để có m ột Menu như trong hình d ưới đây ta còn ph ải edit thêm vào các MenuItems Open, Save, Close và Exit
Hình dưới đây cho th ấy tất cả các MenuItems c ủa Menu Command File đều n ằm thụt qua bên phải với bốn dấu chấm ( ) ở phía trước Khi ta click dấu tên chỉ qua phải thì MenuItem
ta đang Edit sẽ có thêm bốn dấu chấm, tức là thụt một bậc trong Menu (Nested)
Trang 26Tương t ự như v ậy, khi ta click d ấu tên ch ỉ qua trái thì MenuItem ta đang Edit s ẽ mất bốn dấu chấm, tức là trồi một bậc trong Menu
Nếu muốn cho User dùng Alt key để xử dụng Menu, b ạn đánh thêm d ấu & trước character bạn muốn trong menu Caption Thí dụ Alt-F sẽ thả xuống Menu của Menu Command File Nếu b ạn đặt cho MenuItem &Open tên mnuOpen, thì khi b ạn Click lên Caption nó trên Form trong lúc thi ết kế, VB6 IDE s ẽ hiển thị cái v ỏ của Sub mnuOpen_Click(), gi ống như Sub cmdButton_Click() của một CommandButton
Private Sub mnuOpen_Click()
MsgBox "You clicked mnuOpen"
End Sub
Trong thí d ụ trên ta đánh thêm m ột Statement để hi ển th ị m ột message đơn gi ản "You clicked mnuOpen" B ạn có th ể đặt cho m ột MenuItem tên gì c ũng được, nh ưng ng ười ta
thường dùng ti ền t ố mnu để d ễ phân bi ệt một menuItem Event v ới một CommandButton
Event Do đó, ta có những tên mnuFile, mnuOpen, mnuSave, mnuClose, mnuExit
Cái gạch ngang giữa MenuItems Close và Exit được gọi là Menu Separator Bạn có thể nhét một Menu Separator bằng cách cho Caption nó bằng dấu trừ ( - )
Ngoài phím Alt ta còn có thể cho User dùng Shortcut của menuItem Để cho MenuItem một Shortcut, bạn chọn cho nó một Shortcut từ ComboBox Shortcut trong Menu Editor
Trong hình dưới đây ta chọn Ctrl+O cho mnuOpen
Bình thường menuItem được Enabled và Visible Lúc thi ết kế bạn có thể cho MenuItem giá trị khởi đầu của Enabled và Visible bằng cách dùng Checkboxes Enabled và Visible
Trong khi ch ạy program (at runtime), b ạn c ũng có th ể thay đổi các values Enabled và Visible như sau:
mnuSave.Enabled = False
mnuOpen.Visible = False
Trang 27Khi một MenuItem có Enabled=False thì nó bị mờ và người dùng sẽ không dùng được Bạn dùng các dấu mũi tên chỉ lên và xuống để di chuyển MenuItem đã được selected lên và xuống trong danh sách các MenuItems B ạn dùng button Delete để h ủy bỏ MenuItem đã được selected, Insert để nhét m ột MenuItem m ới ngay trên MenuItem đã được selected và Next để chọn MenuItem ngay dưới MenuItem đã được selected
I.2 Ngôn ngữ Visual Basic
I.2.1.1 Biến
VB không b ắt buộc bạn phải khai báo biến, tuy nhiên một lời khuyên là bạn hãy đặt chế độ
bắt buộc khai báo bi ến Để thi ết l ập ch ế độ này, b ạn vào menu Tools | Options , trên tab Editor, đánh d ấu vào “Require Variable Declaration ” Sau đó, b ất k ỳ m ột Form hay
Module nào được tạo mới đều có khai báo sau đây ở đầu tiên
Option Explicit
Với khai báo này, tất cả các biến trước khi sử dụng đều phải có khai báo với cú pháp sau
Dim <Tên bi ến> As <Ki ểu biến>
Ví dụ
Dim i As Integer ' Bi ến kiểu số nguyên
Dim s As String ' Bi ến kiểu xâu ký tự
Dim a As Double ' Bi ến kiểu số thực kép
Dim c, d, e As Double ' Khai báo th ế này là sai, chỉ có e là Double ' Còn c, d là ki ểu Variant (biến tùy ý)
Dim c As Double , d As Double , e As Double
' Khai báo th ế này mới đúng
Quy ước đặt tên biến
- Bắt đầu bằng chữ cái, không bắt đầu bằng chữ số
- Tên bi ến có th ể chứa chữ cái, ch ữ s ố, ký t ự “_”, nh ưng không ch ứa các ký t ự đặc biệt
- Độ dài tối đa của tên biến là 255 ký tự
I.2.1.2 Kiểu biến
Biến được s ử dụng để lưu các giá tr ị, giá tr ị có th ể là s ố (số thứ tự, số người ), có th ể là dạng văn bản (xâu ký t ự) Ngoài ra bi ến có th ể ở dạng phức tạp, ví dụ mảng: chuỗi các giá trị cùng kiểu sắp xếp liên tiếp, hoặc kiểu dữ liệu do người dùng định nghĩa
Trang 28Khi bạn đã biết lập trình trên m ột ngôn ngữ, việc hiểu kiểu biến của một ngôn ng ữ khác là tương đối đơn giản Các kiểu biến trong VB được chia thành các loại sau
Dim Result As Long
Result = 30345 * 100 ' s ẽ bị overflow error
' Hãy vi ết như sau:
Dim Result As Long
Result = 30345
Result = Result * 100 ' không b ị overflow error
Biến kiểu xâu ký tự
Mỗi ký tự trong máy tính tương ứng với một số hiệu (mã ASCII) Một chuỗi các ký tự ghép với nhau t ạo ra một xâu ký t ự (String) String trong VB được ký hi ện trong c ặp ngoặc kép,
ví dụ:
Dim FirstWord As String
Dim SecondWord As String * 20 ' Xâu ký t ự có độ dài tối đa 20 ký tự
Dim Greeting As String
FirstWord = "Hello"
SecondWord = "World"
Greeting = FirstWord & SecondWord ' Greeting bây gi ờ là "HelloWorld"
Greeting = FirstWord & " " & SecondWord
Biến kiểu logic
Kiểu logic là kiểu biến cơ bản, có mặt trong hầu hết các ngôn ngữ Biến logic (Boolean) chỉ mang hai giá trị là True (đúng) và False (sai)
Biến kiểu Boolean thường được sử dụng với các toán tử logic (And, Or, Xor, Not) Các biểu thức điều kiện trả về giá trị kiểu Boolean
Biến kiểu mảng
Trang 29Mảng là kiểu dữ liệu phức gồm nhiều giá trị cùng kiểu sắp xếp liên tiếp nhau Các ph ần
tử này được truy xu ất qua ch ỉ số M ảng trong VB g ồm mảng tĩnh và mảng động, m ảng
tĩnh là m ảng được xác định kích th ước ngay t ừ khi d ịch chương trình, m ảng động có kích thước chưa xác định và chỉ được cấp phát khi run-time
Tốc độ truy xuất dữ liệu của mảng tĩnh và mảng động của VB là như nhau
Dim N(3) As Long ' Không nên khai báo ki ểu này, gây mập mờ
Dim M(1 To 3) As Long ' Khai báo v ới cả chỉ số đầu và cuối cho tường minh
Ki ểu do người dùng định nghĩa
Ngoài các ki ểu dữ liệu chu ẩn của VB, ng ười dùng còn có th ể tự định ngh ĩa kiểu bi ến của riêng mình (giống với kiểu bản ghi – Record của Pascal)
Private Type TDam
Private Sub Form_Load()
Dim dam As TDam ' Bi ến [dam] thuộc kiểu TDam do người dùng đnghĩa
dam.dai = 500 ' Truy xu ất các trường bằng dấu chấm sau tên biến
dam.rong = 22
dam.cao = 40
dam.ten = "D1"
With dam ' Truy xu ất nhanh các trường bằng câu lệnh With
MsgBox ten & " " & rong & "x" & cao & "x" & dai
End With ' Các tr ường trong With truy xuất không cần tên biến
End Sub
Các bạn lưu ý phân biệt kiểu và biến (rất nhiều người nhầm lẫn 2 khái niệm này với nhau) Trong ví dụ nêu trên TDam là kiểu (giống như kiểu Integer, kiểu String) chứ không phải là một biến để gán giá trị
Trong Sub Form_Load, dam là một biết kiểu TDam Theo khai báo đã có, biến dam sẽ có các trường (fields) là dai, rong, cao, ten Để truy nh ập các tr ường của biến dam, sử dụng
dấu chấm (ví dụ dam.dai hay dam.rong hoặc dam.cao)
Trang 30Kiểu liệt kê (Enum)
Kiểu li ệt kê là ki ểu do ng ười dùng định ngh ĩa, bi ến thuộc kiểu này có giá tr ị là m ột trong các giá tr ị được li ệt kê trong ki ểu S ử d ụng ki ểu li ệt kê v ừa đơn gi ản v ừa có t ốc độ cao (nhanh hơn rất nhiều so với thói quen sử dụng String để phân biệt các trường hợp) Để nắm
rõ cách sử dụng kiểu Enum, hãy quan sát hình minh họa bên dưới
Kiểu Variant
Kiểu Variant là m ột kiểu dữ liệu khác l ạ đối với những người mới chuyển từ Pascal sang
VB Kiểu Variant chấp nhận mọi giá trị có thể: số nguyên, số thực, xâu ký tự, mảng, kiểu dữ liệu người dùng định nghĩa
Sử dụng Variant cho phép ng ười lập chình uy ển chuyển, m ềm dẻo hơn trong quá trình l ập
trình Tuy nhiên, Variant có nh ược điểm là rất chậm, do đó b ạn nên h ạn ch ế dùng trong
trường h ợp s ử d ụng tính toán nhi ều (nh ất là đối v ới các ứng d ụng tính toán k ết cấu trong ngành Tin học Xây dựng)
Kiểu Collection
Sử dụng mảng với chỉ số tuần tự cho tốc độ làm việc nhanh nhưng không thật sự mềm dẻo Nếu chúng ta mu ốn truy c ập một phần tử theo tên thành viên thì vi ệc sử dụng cấu trúc d ữ liệu kiểu mảng là không hiệu quả do thời gian tìm kiếm lâu
Trong SAP2000, tên ph ần tử được đặt tùy ý (s ố hoặc chữ), nếu là số thì thường không theo thứ tự hoặc không liên tiếp Do đó sử dụng mảng để lưu các phần tử đọc được từ file kết quả của SAP là không khả thi
VB hỗ trợ kiểu dữ liệu tập hợp (Collection) cho phép truy c ập phần tử theo tên (cấu trúc
dữ liệu này được tối ưu hóa nên tốc độ tìm kiếm rất nhanh)
Dim Ten As New Collection ' T ạo mới một Collection
Ten.Add "Cong nghe Thong tin" ' Thêm 1 ph ần tử vào Collection
Ten.Add "Tin hoc Xay dung"
Ten.Add "Cong nghe phan mem"
Ten.Add "Ky thuat He thong"
Trang 31MsgBox Ten(1) ' S ử dụng tập hợp như mảng
MsgBox Ten(3) ' Truy c ập theo chỉ số
Dim TuDien As New Collection
TuDien.Add "Cong nghe Thong tin", "CNTT" ' Thêm 1 ph ần tử gồm giá trị, tên
TuDien.Add "Tin hoc Xay dung", "THXD" ' Tên ph ần tử phải là duy nhất
TuDien.Add "Cong nghe phan mem", "CNPM"
TuDien.Add "Ky thuat He thong", "KTHT"
MsgBox TuDien("CNTT") ' Truy c ập phần tử theo tên
MsgBox TuDien("CNPM")
Quy ước đặt tên biến theo kiểu
Bảng dưới đây liệt kê các kiểu biến thường sử dụng, để việc lập trình được thuận tiện, người
ta thường đặt kiểu biến là ti ếp đầu ngữ - prefix (v ới 3 ký t ự) Việc đặt tên bi ến như vậy sẽ giúp cho người lập trình không bị nhầm lẫn về kiểu biến, tránh được những sai sót đáng tiếc
về sau
Trang 32s1 = s1 & " " & There ' s1 = "Hello, There"
I.2.1.6 Toán tử điều kiện
Các toán tử điều kiện dùng để so sánh các giá tr ị (biểu thức) với nhau, giá tr ị trả về là kiểu Boolean (True – đúng hoặc False – sai)
> Lớn hơn 6 > 3 True
< Nhỏ hơn 5 < 11 True
Trang 33>= Lớn hơn hay bằng 23 >= 23 True
<= Nhỏ hơn hay bằng 4 <= 21 True
<> Khác 3 <> 3 False
I.2.1.7 Toán tử logic
Các điều kiện logic có thể được kết hợp với nhau bằng các toán tử logic
And Cả hai toán hạng cùng đúng (2 < 3) And (4 < 5) True
Or Ít nhất một trong hai toán hạng đúng (2 > 3 ) Or (6 < 7) True
Xor Một toán hạng đúng, 1 toán hạng sai (2 < 3) Xor (7 > 4) False
Chương trình mu ốn ho ạt động theo s ự điều khiển không ch ỉ có các l ệnh gán mà còn ph ải gồm các l ệnh điều khiển (rẽ nhánh, l ặp ) Các l ệnh này cho phép ch ương trình ho ạt động theo một kịch bản xác định
I.2.2.1 Cấu trúc If Then End If
If < Điều kiện> Then
<Các l ệnh>
End If
Kiểm tra điều kiện (biểu thức logic)
- Nếu điều ki ện là đúng (True) thì th ực hi ện các l ệnh n ằm trong c ấu trúc (gi ữa If và End If)
- Nếu điều kiện sai (False) thì bỏ qua, không thực hiện các lệnh này
I.2.2.2 Cấu trúc If Then Else End If
If < Điều kiện> Then
<Các l ệnh nếu điều kiện đúng>
Else
<Các l ệnh nếu điều kiện sai>
End If
Kiểm tra điều kiện
- Nếu điều kiện đúng, thực hiện nhánh đúng (Giữa If và Else)
- Nếu điều kiện sai, thực hiện nhánh sai (Giữa Else và End If)
Trang 34I.2.2.3 Select Case
Select Case <Bi ểu thức>
' Ki ểm tra kết quả của câu trắc nghiệm
Select Case txtGrade.Text
I.2.2.4 Vòng lặp Do While Loop
Do While < Điều kiện>
<Các l ệnh>
Loop
Nếu điều kiện còn đúng thì th ực hiện tiếp các l ệnh giữa Do Loop Đây là vòng l ặp kiểm tra điều ki ện trước, có ngh ĩa là n ếu < Điều kiện> sai ngay t ừ đầu thì <Các l ệnh> s ẽ không được thực hiện 1 lần nào
Trang 35<Các l ệnh>
Loop While < Điều kiện>
Thực hiện các lệnh giữa Do Loop cho đến khi điều kiện sai Đây là vòng lặp kiểm tra điều kiện sau, có ngh ĩa là <Các l ệnh> s ẽ được thực hiện ít nh ất một lần (kể cả khi < Điều kiện> sai ngay từ đầu)
I.2.2.6 Vòng lặp For Next
For <bi ến Đếm> = <bắt Đầu> To <k ết Thúc> [ Step <kho ảng Tăng>]
<Các l ệnh>
Next [bi ến Đếm]
- Lặp với <biến Đếm> bắt đầu từ giá trị <bắt Đầu>, mỗi lần tăng một lượng <khoảng Tăng> cho đến b ằng giá tr ị <k ết Thúc> M ỗi lần l ặp thực hiện các l ệnh gi ữa For Next
- Nếu không khai báo Step <khoảng Tăng>, giá trị tăng mặc định là 1
- Muốn lặp với <biến Đếm> giảm dần, đặt <khoảng Tăng> là giá trị âm (ví dụ -1)
Biến <phần tử> (phải là kiểu Variant) lặp qua tất cả các phần tử con của <nhóm> (thường
là kiểu tập hợp – Collection), mỗi lần lặp thực hiện <các lệnh> Đây là lệnh rất thuận tiện để làm việc với nhóm các phần tử (ví dụ nhóm các control của form) Đoạn chương trình ví dụ dưới dây minh họa vòng lặp For Each với một tập hợp các xâu ký tự
Trang 36I.2.3 Chương trình con
Cũng như tất cả các ngôn ng ữ lập trình khác, khi có nhi ều công vi ệc được thực hiện lặp đi lặp lại bởi cùng m ột đoạn code, cách t ốt nhất là đưa đoạn code này vào m ột chương trình con để có thể sử dụng lại nhiều lần Chương trình con có th ể là Sub – giống procedure hoặc Function – giống function trong Pascal
Trong đoạn chương trình ví dụ trên:
- <Tên sub> là "TangGiaTri"
- Các tham số là a (kiểu Integer), b (kiểu Integer)
- Thủ tục thực hiện nhiệm vụ tăng biến a lên 1 lượng b
Trong đoạn chương trình ví dụ trên:
- <Tên function> là "Tong"
- <Kiểu function> là Integer
- Các tham số là a (kiểu Integer), b (kiểu Integer)
- Hàm trả về tổng của 2 số a và b
I.2.3.3 Tham biến & tham trị
Để tìm hiểu về tham biến, tham trị, hãy trở lại ví dụ của Sub (vừa nêu ở phần trên) Ví dụ 1:
Trang 37Private Sub TangGiaTri(a As Integer, b As Integer)
TangGiaTri để được đoạn chương trình sau Ví dụ 2:
Private Sub TangGiaTri( ByVal a As Integer, b As Integer)
Chạy đoạn chương trình này, hộp thoại MsgBox trả về giá trị 10 Tại sao vậy? Nguyên nhân
vì trong tr ường h ợp này bi ến a trong Sub TangGiaTri không ph ải là bi ến c trong Sub
Command1_Click a chỉ là bản sao của c (do được truyền giá trị - by value), khi đó ta gọi a
là tham trị
Trong trường hợp của ví dụ 1, khai báo đầy đủ là
Private Sub TangGiaTri( ByRef a As Integer, ByRef b As Integer)
Khi đó, biến a trong Sub TangGiaTri chính là bi ến c trong Sub Command1_Click, t ăng giá
trị của a chính là tăng giá trị của c a gọi là tham chiếu (reference) của c Trường hợp này ta gọi a là tham biến
Chú ý: Nếu không khai báo gì, VB mặc định là ByRef (quy ước này ngược với Pascal – mặc định là tham trị)
Windows là h ệ điều hành c ửa s ổ, t ất c ả các giao ti ếp c ủa ng ười s ử d ụng v ới các ch ương trình chủ yếu thông qua cửa sổ Cửa sổ chứa các control gọi là Form, trong VB có nhiều loại Form, tất cả đều có những thuộc tính chung
Trang 38I.2.4.1 Các thuộc tính của Form
Nhiều thu ộc tính c ủa m ột form ảnh h ưởng đến hình ảnh c ủa nó Thu ộc tính Caption s ẽ quyết định text được hiểu thị trong title N ếu thuộc tính BorderStyle của form không ph ải
là Sizable thì ng ười dùng không th ể resize form lúc run-time Thu ộc tính Icon quy ết định hình icon đuợc dùng trong tiêu đề của form, nhất là khi form thu nh ỏ (minimized) Nếu bạn không mu ốn cho phép ng ười dùng minimize hay maximize form thì đặt thu ộc tính
MinButton, MaxButton ra False Nếu thuộc tính ControlBox là False thì form sẽ không có
nút minimize, maximize hay close (x) trên góc ph ải của nó, đồng thời form cũng không có
cả cả icon bên góc trái form như trong hình dưới đây
Thuộc tính WindowState xác định Form s ẽ có kích th ước bình th ường normal (=0), hay
minimized (=1), maximized (=2)
Lưu ý là thuộc tính Font của Form sẽ được các control nằm trên nó thừa kế Tức là khi bạn
đặt một control lên form, thuộc tính Font của control ấy sẽ tự động trở nên giống y như của form
I.2.4.2 Các sự kiện của Form
Nhìn t ừ m ột ph ương di ện, Form c ũng gi ống nh ư Control T ừ 1 form, ta có th ể t ạo nhi ều form tương tự nhau Trong thí dụ dưới đây, ta sử dụng MyForm và YourForm là 2 biến kiểu Form2 để tạo 2 form giống hệt nhau
Dim MyForm As New Form2
Dim YourForm As New Form2
MyForm.Show
YourForm.Show
Một Form cũng có nhiều Events rất hữu dụng
Form_Initialize: Event này x ảy ra trước nh ất và ch ỉ một lần thôi khi ta kh ởi tạo form đầu
tiên Ta dùng Form_Initialize event để thực hiện những gì cần phải làm chung cho tất cả các instances của form này
Form_Load: Event này x ảy ra m ỗi l ần ta instantiate m ột form N ếu ta ch ỉ dùng m ột
instance duy nhất của một form trong chương trình thì Form_Load coi như tương đương với Form_Initialize Ta dùng Form_Load event để initialise variables, controls v.v cho instance này
Bên trong Form_Load b ạn không thể dùng SetFocus cho m ột control nào trên form vì form chưa hẳn thành hình (ra đời) Muốn làm việc ấy bạn phải delay (trì hoản) một chút xíu bằng cách dùng Control Timer để đợi cho Form_Load được hoàn tất Thí dụ:
Private Sub Form_Load()
Timer1.Interval = 500
Timer1.Enabled = True
End Sub
Trang 39Private Sub Timer1_Timer()
Timer1.Enabled = False ' Timer1_Timer only execute once
txtName.Setfocus ' Make Tab Cursor start at TextBox txtName
End Sub
Form_Activate: Mỗi lần một form tr ở nên active (khi form được hiện lên trên cùng so v ới
các form khác) thì nó phát sinh sự kiện Activate
Form_QueryUnload: Khi ng ười dùng click d ấu x phía trên bên ph ải để close form thì nó
phát sinh sự kiện QueryUnload với cú pháp sau:
Private Sub Form_QueryUnload(Cancel As Integer , UnloadMode As Integer )
End Sub
Event này cho ta m ột d ịp để Cancel Close action c ủa form (t ức là không cho User close form) b ằng cách set Cancel b ằng 1 UnloadMode cho ta bi ết ai, task hay form nào mu ốn close form này
Ngoài ra, b ạn cũng nên bi ết rằng một form t ự động Load hay tr ở nên Active n ếu bạn nh ắc đến nó, thí dụ như dùng Form2.List1 Khi một form đã được loaded rồi bạn có thể hide (làm cho biến mất) nó Kế đó, khi bạn show form ra tr ở lại thì form không có gì thay đổi Nhưng nếu b ạn Unload m ột form (thí d ụ b ằng cách dùng Unload Form2 ), r ồi sau đó load tr ở lại bằng cách dùng Form2.Show ch ẳng hạn, thì Form ph ải trải qua quá trình Form_Load, và d ĩ nhiên form mất tất cả những gì có trước đây Ngoài ra, Hide/Show một form đã được loaded rồi thì rất nhanh, còn Unload/Load thì mất thì giờ hơn
Khi bạn Show một Form chưa hiện hữu thì form sẽ được loaded và show Đôi khi bạn muốn Load m ột form, r ồi làm vi ệc v ới nó tr ước khi Show, trong tr ường h ợp đó b ạn dùng Load Form2 rồi một chập sau dùng Form2.Show
I.2.4.3 MDI Form
Đôi khi bạn muốn có một MDI form, tức là một form có thể chứa nhiều form con bên trong Dạng MDIform này th ường được dùng trong các ứng d ụng nh ư Micrsoft Word hay AutoCAD để có th ể mở nhiều document cùng m ột lúc, m ỗi document được hiển th ị trong
một form con Để có m ột MDIForm b ạn c ần ph ải dùng menu Project | Add MDI Form
Mỗi VB6 project ch ỉ có th ể có t ối đa một MDIForm Mu ốn một form tr ở thành m ột form
con bạn set thu ộc tính MDI Child của nó thành True Khi run-time b ạn không th ể ẩn (đặt
thuộc tính Visible là False) một MDIChild form, nhưng có thể minimize nó Nếu bạn thật sự muốn ẩn nó thì phải dùng mánh lới là cho nó vị trí (top,left) số âm lớn hơn kích thước nó để
nó nằm ngoài tầm hiển thị của form Trong một chương trình dùng MDI Form, khi bạn click MDI Form nó không nh ảy ra phía tr ước và che các form con, nh ưng vẫn luôn luôn n ằm ở dưới
Trang 40I.2.5 Module
Khi quy mô của chương trình trở nên phức tạp, việc viết tất cả mã lệnh tại cùng một file mã chương trình sẽ gây khó khăn trong quản lý mã nguồn Chia để trị là giải pháp tốt nhất trong trường h ợp này Mã ch ương trình (g ồm các bi ến, hàm ) được phân chia thành nhi ều module khác nhau, mỗi module là tập hợp của nhiều biến, hàm có cùng tính ch ất hoặc chức năng (việc phân chia là tùy thuộc quan điểm của người phát triển)
Các module VB được lưu vào các file có phần mở rộng BAS
Một ứng dụng không thể thiếu dữ liệu, công việc đầu tiên khi xây dựng ứng dụng là tổ chức các dữ liệu trong ứng dụng đó (các kiểu biến như thế nào? đặt tên biến ra sao? khai báo biến
ở đâu? biến toàn cục hay địa phương)
Dưới đây là một số lời khuyên khi bạn tổ chức dữ liệu trong một VB project
- Không lưu dữ liệu toàn c ục trong Form : Hầu hết những người mới làm quen v ới
VB đều cùng có m ột thói quen không t ốt là để các bi ến toàn c ục trong Form Khi chạy chương trình, Form ch ưa được khởi tạo Nó ch ỉ được khởi tạo khi nào b ạn s ử dụng các thao tác hoặc thuộc tính của Form lần đầu tiên Ngoài ra, form có thể bị loại khỏi bộ nhớ khi bạn dùng phương thức Unload, khi đó các giá trị tính toán được sẽ bị
mất (xem ví dụ minh họa ở phầ cuối của mục này) Giải pháp cho v ấn đề này là lưu
dữ liệu trong module , m ỗi khi form load, đọc toàn b ộ dữ liệu cần thiết từ module vào form Khi ng ười dùng click nút OK trên form thì m ới cập nhật dữ liệu từ form vào module
- Đối với các form nh ập dữ liệu, chỉ nên s ử dụng chế độ modal Tức là ch ế độ sử
dụng form ở dạng hộp thoại: Khi form được bật lên, người dùng chỉ có thể tương tác với form đó Mu ốn tác động đến các thành ph ần khác c ủa chương trình, ph ải đóng modal form lại (ví dụ: hộp thoại mở file của các ứng dụng)
Sau đây là ví dụ minh họa về các vấn đề đã được nêu ở trên:
Class module cho phép l ập trình h ướng đối tượng với VB Class c ủa VB có th ể định nghĩa các thuộc tính, thao tác Các Class module c ủa VB được lưu vào các file có ph ần mở rộng
*.CLS
I.2.7.1 Khái niệm Object & Class
Nói một cách nôm na, lập trình theo hướng đối tượng là thiết kế các bộ phận phần mềm của
chương trình, g ọi là Object sao cho m ỗi bộ phận có th ể tự lo li ệu công tác c ủa nó giống