9/14/2011
1
Lập trình Windows
Visual Basic
Viện CNTT&TT – Trường ĐHBK Hà Nội
 Phạm Ngọc Hưng
 Bộ môn Kỹ thuật M|y tính, 
Viện Công nghệ Thông tin & Truyền thông, 
Trường Đại học B|ch Khoa H{ Nội
 Email: 
[email protected]
 www.soict.hut.edu.vn
PNH-HUT2
Thông tin liên hệ
Mục tiêu
Môn học: Kỹ thuật lập trình trên Windows
Cung cấp kỹ năng cơ bản trong lập trình trên 
Windows:
 Lập trình giao diện đồ họa – người dùng (GUI)
 Lập trình cơ sở dữ liệu
 Sử dụng ActiveX, Component
Hiểu biết về công nghệ lập trình của Microsoft 
(Visual Basic, Visual C++, Visual C#, .NET)
Ngôn ngữ minh họa cụ thể: Visual Basic (Version 
6.0, 8.0 (2005), 9.0 (2008))
PNH-HUT3
Thời lượng môn học
Thời lượng: 75 tiết = 38LT + 37TH
Từ 17/09 – 24/09/2011
C|ch thức tiến h{nh:
 B{i giảng c|c vấn đề về lý thuyết
 C|c b{i thực h{nh có hướng dẫn, b{i tập tự l{m
 (Minh họa bằng VB6 hoặc VB2005/2008)
PNH-HUT4
9/14/2011
2
Nội dung
 Chương 1. Giới thiệu chung
 Chương 2. C|c đối tượng trong Visual Basic
 Chương 3. Kiểu dữ liệu, hằng, biến v{ mảng
 Chương 4. C|c cấu trúc điều khiển
 Chương 5. C|c lệnh v{ h{m căn bản
 Chương 6. Thủ tục v{ h{m
 Chương 7. C|c điều khiển hình ảnh, timer, duyệt file, thư mục.
 Chương 8. Sử dụng menu, toolbar v{ hộp thoại
 Chương 9. Xử lý tệp tin
 Chương 10. Ứng dụng dạng MDI
 Chương 11. Lập trình Cơ sở dữ liệu
PNH-HUT5
T{i liệu tham khảo
Microsoft Visual Basic 6.0 và Lập trình Cơ sở dữ liệu 
- Nguyễn Thị Ngọc Mai (chủ biên), Nh{ xuất bản 
Gi|o dục - 2000.
Giáo trình thực hành Visual Basic 6.0 – Lâm Hoài 
Bảo
Phần mềm tra cứu VB6 Function – Phan Hải Tú, 
VBLib, 
PNH-HUT6
Chương 1
Giới thiệu chung
PNH-HUT7
Nội dung
1.1. Lập trình Windows
1.2. C|c control chuẩn của Windows
1.3. Giới thiệu về Visual Basic
1.4. Môi trường ph|t triển VB6
PNH-HUT8
9/14/2011
3
1.1. Lập trình Windows
Windows: 
 Hệ điều h{nh đồ họa trực quan (GUI – Graphics User 
Interface), giao tiếp với người sử dụng qua giao diện đồ 
họa (cửa sổ, nút bấm, hộp thoại, )
 C|c t{i nguyên hệ thống cung cấp rất đa dạng: 
- C|c h{m thao t|c với tập tin, thư mục, ổ đĩa
- Giao tiếp với thiết bị phần cứng (m|y in, truyền thông 
nối tiếp,)
- v.v
PNH-HUT9
1.1. Lập trình Windows
Ứng dụng trên Windows th}n thiện với người 
dùng thông qua giao diện đồ họa sẵn có của 
Windows.
PNH-HUT10
1.1. Lập trình Windows
Đa số c|c ứng dụng trên Windows có chung kiểu 
giao diện tương t|c với người sử dụng. 
 Thanh thực đơn có c|c mục File, Edit, Tool, Help, 
 Hộp thoại chứa c|c phần điều khiển chung như: Edit 
Box, Button, CheckBox, 
PNH-HUT11
1.1. Lập trình Windows
Trên Windows cung cấp c|c phương ph|p lập 
trình đồ họa đa dạng, c|ch xử lý đa nhiệm, đa 
luồng. (Visual Basic,Visual C#, Visual C++, )
Ph|t huy c|c sức mạnh t{i nguyên của Windows 
giúp x}y dựng những ứng dụng mạnh mẽ đa dạng, 
th}n thiện v{ dễ sử dụng.
PNH-HUT12
9/14/2011
4
1.1. Lập trình Windows
Cần biết:
 Kỹ năng lập trình cơ bản (C, C++, )
 Sử dụng công cụ lập trình trực quan (Visual)
 Hiểu biết về Windows
 Thẩm mỹ trình b{y hình ảnh, điều khiển, thiết 
kế giao diện tiện lợi, rõ r{ng, th}n thiện.
PNH-HUT13
1.1. Lập trình Windows - API
Windows OS cung cấp h{m trăm h{m cho c|c ứng 
dụng có thể sử dụng để truy cập c|c t{i nguyên 
trong hệ thống, gọi l{ giao diện lập trình ứng dụng 
API (Application Programming Interface).
PNH-HUT14
1.1. Lập trình Windows - API
C|c h{m API chứa trong thư viện liên kết động 
DLL (Dynamic Link Library).
PNH-HUT15
Khi biên dịch chương 
trình, mã lệnh hàm API 
không được thêm vào 
mà chỉ thêm DLL chứa 
hàm và tên hàm đó. Khi 
chương trình thực thi, 
nó mới được nạp vào bộ 
nhớ để thực hiện.
1.1. Lập trình Windows - GDI
Trong API có một số h{m có chức năng duy trì độc 
lập của thiết bị đồ họa, gọi l{ giao diện thiết bị đồ 
họa GDI (Graphics Device Interface).
C|c h{m GDI cho phép c|c ứng dụng có thể l{m 
việc tốt với nhiều thiết bị đồ họa kh|c nhau.
PNH-HUT16
9/14/2011
5
1.1. Lập trình Windows – Message
Ứng dụng trên Windows xử lý theo c|c sự kiện 
(event – driven), c|c ứng dụng liên tục chờ hệ điều 
h{nh truyền sự kiện v{o.
C|c sự kiện như: 
 Sự kiện chuột (click, double click, drag,drop, scroll).
 Sự kiện ấn phím
 Sự kiện thời gian
 v.v
Mỗi cửa sổ ứng dụng có h{m xử lý cửa sổ được gọi 
khi có dữ liệu nhập n{o đó được truyền đến.
PNH-HUT17
1.1. Lập trình Windows – Message
Hệ thống quản lý việc truyền dữ liệu đến cửa sổ v{ 
gọi h{m xử lý của cửa sổ tương ứng thông qua 
hình thức thông điệp (message).
Thông điệp được ph|t sinh từ ứng dụng v{ hệ 
thống.
PNH-HUT18
1.1. Lập trình Windows – Message
Hệ thống sẽ ph|t sinh một thông điệp khi có một 
sự kiện nhập v{o (input even). Ví dụ: ấn phím, di 
chuyển chuột, thanh cuộn, click nút bấm,
Hệ thống cũng ph|t sinh ra thông điệp để phản 
ứng lại một sự thay đổi của hệ thống do một ứng 
dụng mang đến. Ví dụ: ứng dụng l{m cạn kiệt t{i 
nguyên hay ứng dụng tự thay đổi kích thước của 
cửa sổ.
Một ứng dụng có thể ph|t sinh ra thông điệp khi 
cần yêu cầu c|c cửa sổ của nó thực hiện một nhiệm 
vụ n{o đó hay dùng để thông tin giữa c|c cửa sổ.
PNH-HUT19
1.2. C|c Control chuẩn của Windows
Cửa sổ (Window):
 Vùng hình chữ nhật trên m{n hình.
 Ứng dụng hiển thị thông tin ra, nhận thông tin v{o.
PNH-HUT20
 Nhiệm vụ đầu tiên của ứng 
dụng đồ họa trên Windows 
là tạo một cửa sổ.
 Cửa sổ chia sẻ màn hình 
với các cửa sổ khác trong 
cùng ứng dụng hoặc các 
ứng dụng khác.
 Tại một thời điểm chỉ có 
một cửa sổ nhận được 
thông điệp từ người dùng.
9/14/2011
6
1.2. C|c Control chuẩn của Windows (tt)
Hộp thoại v{ c|c điều khiển:
 Hộp thoại (Dialog) dùng để tương t|c với người dùng 
trong một chương trình ứng dụng. Một hộp thoại 
thường chứa nhiều c|c đều khiển như:
• Ô nhập văn bản (edit text) 
• Nút bấm (button) 
• Ghi chú (static) 
• Hộp danh s|ch liệt kê (list box) 
• Hộp danh s|ch thả xuống (Combo box)
• Nút lựa chọn (Radio button)
• Nút kiểm (check button), 
PNH-HUT21
1.2. C|c Control chuẩn của Windows (tt)
Hộp thoại v{ c|c điều khiển (tiếp):
PNH-HUT22
1.2. C|c Control chuẩn của Windows (tt)
Hộp thoại v{ c|c điều khiển (tiếp):
 Thực đơn (menu): l{ một danh s|ch chứa c|c thao t|c 
với một định danh m{ người dùng có thể chọn. Hầu hết 
c|c ứng dụng có cửa sổ thì không thể thiếu thực đơn.
 Thanh công cụ (toolbar): đ}y l{ một dạng menu nhưng 
chỉ chứa c|c thao t|c cần thiết dưới dạng c|c biểu tượng 
đặc trưng.
 Ngo{i ra còn rất nhiều c|c điều khiển m{ c|c công cụ lập 
trình cung cấp cho người lập trình hay tự họ tạo ra dựa 
trên những th{nh phần được cung cấp sẵn.
PNH-HUT23
1.3. Giới thiệu Visual Basic
Visual Basic cung cấp bộ công cụ ho{n chỉnh, giúp 
nhanh chóng v{ đơn giản hóa lập trình ứng dụng 
trên Windows.
Visual Basic ?
Visual – đề cập phương ph|p sử dụng để tạo giao 
diện đồ họa người dùng GUI (Graphics User 
Interface). 
Cung cấp sẵn c|c đối tượng, điều khiển, người 
dùng sắp đặt vị trí, thiết lập thuộc tính, trên một 
khung màn hình (form).
PNH-HUT24
9/14/2011
7
1.3. Giới thiệu Visual Basic
Basic ? Đề cập đến ngôn ngữ BASIC (Beginer All 
purpose Symbolic Instruction Code). Đơn giản, dễ 
học, dễ sử dụng.
Ban đầu, MSBasic, do hãng Microsoft viết từ thời 
dùng cho máy tính 8 bits 8080 hay Z80. 
Hiện nay chứa h{ng trăm c}u lệnh (commands), 
h{m (functions) v{ từ khóa (keywords). Rất 
nhiều commands, functions liên hệ trực tiếp đến
MSWindows GUI. 
PNH-HUT25
1.3. Giới thiệu Visual Basic
Visual 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. 
VBScript được dùng cho Internet v{ chính 
Operating System.
PNH-HUT26
1.3. Giới thiệu Visual Basic
C|c phiên bản:
 VB 1.0 năm 1991: Kết hợp BASIC với môi trường lập 
trình ph|t triển lập trình hình ảnh GUI.
 VB 3.0: Thiết kế ứng dụng liên quan đến cơ sở dữ liệu 
(database).
 VB 4.0 & 5.0 tiếp tục mở rộng, nhắm đến hệ điều h{nh 
Windows 95.
 VB 6.0: phương ph|p lập trình mới, thiên về đối tượng 
(Object Oriented), thủ tục xử lý theo tình huống, 
phương thức. 
 VB 8.0 (2005) và VB 9.0 (2008), VB 2010 (.NET 
framework)
PNH-HUT27
1.4. Môi trường ph|t triển VB6
Môi trường ph|t triển tích hợp (IDE)
PNH-HUT28
Project 
Explorer
Properties
Form Layout
FormToolBox
9/14/2011
8
1.4. Môi trường ph|t triển VB6
MenuBar
 Chứa đầy đủ các commands sử dụng để l{m việc với 
VB6, kể 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. 
 Trong Menu Add-Ins có Add-Ins Manager cho phép gắn 
thêm những menu con để chạy c|c chương trình lợi ích 
cho việc lập trình. 
PNH-HUT29
1.4. Môi trường ph|t triển VB6
Toolbars (Debug, Edit, form Editor, Standard) 
 Thanh công cụ chuẩn
 Thanh công cụ gỡ rối (Debug)
 Thanh công cụ soạn thảo (Edit)
PNH-HUT30
1.4. Môi trường ph|t triển VB6
Toolbox :hộp đồ nghề với c|c công cụ, 
gọi l{ controls, đặt lên form trong lúc 
thiết kế (design).
PNH-HUT31
1.4. Môi trường ph|t triển VB6
Project Explorer:
 Liệt kê c|c forms v{ c|c modules 
trong project hiện h{nh.
 Project – tập hợp c|c file tạo một 
trình ứng dụng.
 Viết một chương trình l{ triển 
khai một project.
PNH-HUT32
9/14/2011
9
1.4. Môi trường ph|t triển VB6
Properties Window:
 Liệt kê c|c đặc tính của c|c 
forms hoặc controls đượ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. 
PNH-HUT33
1.4. Môi trường ph|t triển VB6
Form Layout
 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. 
 Dùng context command 
Resolution Guides để 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. 
PNH-HUT34
1.4. Môi trường ph|t triển VB6
Form Designer 
 Dùng để thiết kế giao diện lập trình. Mỗi form 
trong trình ứng dụng của bạn có designer form 
riêng của nó. Khi maximize một form designer, 
nó chiếm cả khu l{m việc. Muốn l{m cho nó trở 
lại cỡ bình thường v{ đồng thời để thấy c|c 
form designers khác, click nút Restore Window 
ở góc bên phải, phía trên. 
PNH-HUT35
1.4. Môi trường ph|t triển VB6
Immediate Window 
 Dùng để gỡ rối (debug) trình ứng dụng.
 Có thể hiện 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, có thể thay đổi gi| 
trị c|c variables hay chạy một dòng chương 
trình. 
PNH-HUT36
9/14/2011
10
Cấu trúc một chương trình VB
 Trong VB, về cơ bản một chương trình ứng dụng 
(project) sẽ chứa một hay nhiều Biểu mẫu giao tiếp 
(Form). Ngo{i những m{n hình giao tiếp ra, ứng dụng 
còn có thể có c|c thư viện (Module) lưu trữ c|c th{nh 
phần dùng chung của to{n bộ ứng dụng như biến, thủ 
tục, h{m,
PNH-HUT37
Biểu mẫu 1
Điều khiển 1
Điều khiển 2
Điều khiển n
Biểu mẫu 2
Điều khiển 1
Điều khiển 2
Điều khiển k
Thư viện 1
Cấu trúc một chương trình VB
Khi lưu trên đĩa, một ứng dụng VB gồm 
c|c tập tin:
 Tập tin project (.VBP): Tập tin chứa thông tin 
chung của một ứng dụng. Mỗi một ứng dụng khi 
lưu trữ sẽ chỉ có đúng một tập tin n{y.
 Tập tin Biểu mẫu (.FRM): Tập tin văn bản chứa 
thông tin, c|c thủ tục xử lý biến cố, biến, thủ tục, 
h{m của một m{n hình giao tiếp.
 Tập tin thư viện (.BAS): Tập tin văn bản chứa 
khai b|o c|c hằng, biến to{n cục, c|c h{m thủ 
tục dùng chung của to{n bộ ứng dụng.
PNH-HUT38
Môi trường ph|t triển VB2005, 
2008
PNH-HUT39
Chương 2. 
Đối tượng trong Visual Basic
PNH-HUT40
9/14/2011
11
Nội dung
2.1. C|c kh|i niệm
2.2. Sử dụng Properties Window
2.3. Sử dụng thuộc tính, phương thức
2.4. Một số đối tượng cơ bản
PNH-HUT41
2.1. C|c kh|i niệm
 Form – Biểu mẫu
 Controls – C|c điều khiển
 Properties – Thuộc tính
Method – Phương thức
 Event – Sự kiện
PNH-HUT42
Form – Biểu mẫu
 Tạo ra cửa sổ chương trình (m{n hình giao tiếp 
của ứng dụng)
 Chứa c|c đối tượng kh|c (điều khiển) để x}y dựng 
giao diện chương trình.
 Quản lý Form: 
PNH-HUT43
Controls – C|c điều khiển
 C|c th{nh phần có sẵn, tạo giao diện tương t|c 
với người sử dụng.
 Mỗi điều khiển thực chất l{ một đối tượng 
(object), gồm c|c đặc trưng:
- Thuộc tính (properties)
- Phương thức (method)
- Sự kiện (event)
PNH-HUT44
9/14/2011
12
Thuộc tính – Properties
C|c đặc trưng của điều khiển tạo nên d|ng 
vẻ của điều khiển đó.
Ví dụ: C|c thuộc tính 
tạo d|ng vẻ cho nút lệnh
PNH-HUT45
Ví dụ thuộc tính TextBox
PNH-HUT46
Phương thức - Method
C|c điều khiển có thể thực thi t|c vụ n{o đó.
C|c t|c vụ được định nghĩa sẵn trong phương thức 
(chương trình con: h{m, thủ tục)
Được gọi khi cần thực thi.
Ví dụ: Đóng/mở cửa sổ
Mở hộp thoại
Di chuyển vị trí
PNH-HUT47
Ví dụ phương thức trên Form
PNH-HUT48
9/14/2011
13
Sự kiện – Events
 L{ c|c h{nh động của người dùng t|c động nên 
ứng dụng đang thực thi.
 Ví dụ: click chuột v{o nút bấm, nhập ký tự v{o ô 
text box, 
 C|c th{nh phần giao diện có khả năng đ|p ứng 
sự kiện.
 Ứng dụng trên Windows thường thực hiện việc 
đ|p ứng sự kiện người dụng.
PNH-HUT49
Lập trình sự kiện
 C|c th{nh phần giao diện có khả năng nhận biết 
sự kiện từ phía người dùng. Tuy nhiên khả năng 
đ|p ứng lại sự kiện phải được thực hiện bởi lập 
trình.
 X|c định h{nh động của th{nh phần giao diện để 
đ|p ứng sự kiện cụ thể, viết đoạn m~ lệnh thực 
thi.
 Ví dụ: Sự kiện click chuột v{o nút được lập trình 
để thực hiện công việc xử lý n{o đó.
PNH-HUT50
2.2. Sử dụng Properties Window
Mở cửa sổ Properties cho 
một đối tượng:
 Chọn đối tượng (chuột tr|i)
 Hoặc chuột phải v{o đối tượng, 
chọn Properties
 Hoặc chọn đối tượng trong hộp 
combo box của cửa sổ.
PNH-HUT51
2.2. Sử dụng Properties Window
C|c thuộc tính của đối tượng 
được liệt kê theo bảng gồm 2 cột:
Thẻ Alpabetic: Xem c|c thuộc 
tính theo thứ tự abc
Thẻ Categorized: Xem c|c thuộc 
tính theo phân nhóm 
(Appearance, Behavior, Font, )
PNH-HUT
Tên, kiểu thuộc tính Giá trị tương ứng
52
9/14/2011
14
2.2. Sử dụng Properties Window
Thuộc tính Name (tên):
 Có ở tất cả c|c đối tượng, để x|c định tên đối 
tượng.
 Quan trọng trong nhiều trường hợp: lấy/hiện 
dữ liệu, xử lý tương t|c sự kiện, 
 Dùng để truy xuất đến c|c thuộc tính kh|c.
 Qui tắc đặt tên:
• D{i từ 1 – 40 ký tự
• Bắt đầu bằng ký tự chữ
• Nên đặt theo viết tắt loại đối tượng + gợi nhớ chức 
năng để tiện lập trình. Ví dụ: frmLogin, btnThoat, 
txtHoten, v.v
PNH-HUT53
2.3. Sử dụng thuộc tính, phương thức 
trong chương trình
L{m việc với thuộc tính:
 .
 Ví dụ: btnThoat.Visiable = False
L{m việc với phương thức:
 .[(<c|c 
tham số nếu có>)]
 Ví dụ: img.Move(x,y)
PNH-HUT54
2.4. Một số đối tượng cơ bản
Có nhiều điều khiển kh|c nhau 
phục vụ x}y dựng ứng dụng.
Biểu mẫu (Form) dùng để chứa 
c|c điều khiển (Controls).
C|c điều khiển thường dùng:
 Nhãn (Label)
 Khung (Frame)
 Nút lệnh (Button)
 Ô nhập liệu (Textbox)
 ListBox/Combo Box
 Check box
 Radio button, 
PNH-HUT55
2.4.1. Biểu mẫu - Form
Kh|i niệm:
 Giao diện chương trình giao tiếp với người sử dụng 
(form, windows), chứa c|c điều khiển (controls).
 Được lập trình nhằm hiển thị dữ liệu v{ nhận thông tin 
từ người sử dụng.
Thuộc tính:
 Name: Định danh biểu mẫu, truy xuất đến thuộc tính 
kh|c, v{ phương thức thao t|c trên biểu mẫu.
 Caption: Chuỗi hiển thị trên thanh tiêu đề biểu mẫu
 Icon: Biểu tượng dùng trên thanh tiêu đề của biểu mẫu.
PNH-HUT56
9/14/2011
15
2.4.1. Biểu mẫu - Form
Thuộc tính (tiếp):
 Windowstate: x|c định biểu mẫu sẽ có kích thước bình 
thường (Normal=0), hay Minimized (=1), Maximized 
=(2). 
 Font: x|c lập Font cho biểu mẫu. Thuộc tính n{y sẽ 
được c|c điều khiển nằm trên nó thừa kế. Tức l{ khi ta 
đặt một điều khiển lên biểu mẫu, thuộc tính Font của 
điều khiển ấy sẽ tự động trở nên giống y của biểu mẫu. 
 BorderStyle: x|c định dạng của biểu mẫu.
Phương thức: 
 Move: di chuyển biểu mẫu đến tọa độ X,Y: 
Move X, Y.
PNH-HUT57
2.4.1. Biểu mẫu - Form
Sự kiện:
 Form_Initialize: xảy ra đầu tiên, 1 lần khi tạo ra 
thể hiện biểu mẫu.
 Form_Load: xảy ra mỗi lần gọi thể hiện biểu 
mẫu
 Form_Activate: xảy ra mỗi lần biểu mẫu được 
kích hoạt
 Form_QueryUnload: xảy ra khi click chuột v{o 
nút X để đóng biểu mẫu.
 Form_Resize: xảy ra khi biểu mẫu thay đổi kích 
thước.
PNH-HUT58
2.4.2. Nhãn - Label
Kh|i niệm:
 Nh~n l{ điều khiển dạng đồ họa cho phép người sử dụng 
hiển thị chuỗi ký tự trên biểu mẫu nhưng không thể 
thay đổi chuỗi ký tự đó một c|ch trực tiếp.
Thuộc tính:
 Name: Định danh cho điều khiển
 Caption: Chuỗi ký tự hiển thị (mặc định l{ Label). 
 Font, Fore Color: kiểu chữ, kích thước, m{u chữ.
 BackStyle: quy định l{ nh~n trong suốt hay không. 
 BackColor: quy định m{u nền của nh~n trong trường 
hợp không trong suốt. 
PNH-HUT59 PNH-HUT60
9/14/2011
16
PNH-HUT61
2.4.2. Nhãn - Label
Phương thức:
 Move: di chuyển nh~n đến tọa độ X,Y: 
Move X, Y.
Sự kiện:
 Change: Xảy ra mỗi khi nh~n thay đổi gi| trị. 
 Click: Mỗi khi nh~n được chuột nhấp lên, sự 
kiện n{y xảy ra. 
 DblClick: Xảy ra khi người sử dụng nhấp đúp 
chuột lên điều khiển nh~n.
PNH-HUT62
2.4.3. Khung - Frame 
Kh|i niệm:
 Bố trí giao diện biểu mẫu rõ r{ng.
 C|c điều khiển cùng nhóm công việc thường đặt 
trong một khung.
Thuộc tính:
 Name, Caption, 
Phương thức:
 Move X,Y
Sự kiện:
 Click, DblClick.
PNH-HUT63
2.4.4. Nút lệnh - Button
Kh|i niệm:
 Điều khiển dùng để bắt đầu, ngắt, kết thúc một qu| trình.
 Nút ấn (push button)
Thuộc tính:
 Name: định danh nút lệnh
 Caption: chuỗi hiển thị trên nút lệnh
 Default: nếu = True, cho chọn nút lệnh bằng phím Enter.
 Cancel: nếu = True, cho chọn nút lệnh bằng phím Esc.
 Enabled: cho chọn (True) hoặc không cho chọn (False) 
nút lệnh.
PNH-HUT64
9/14/2011
17
PNH-HUT65
2.4.4. Nút lệnh - Button
Thuộc tính (tiếp):
 ToolTipText: cho phép hiển thị một đoạn văn bản chú 
thích công dụng của nút lệnh khi dùng chuột rê trên nút 
nhấn. 
 Font, Fore Color: Quy định kiểu chữ, kích thước, m{u 
hiển thị. 
Phương thức:
 Move x,y
Sự kiện:
 Click: thường dùng. Được kích hoạt khi chọn nút lệnh.
Người lập trình viết m~ lệnh cho sự kiện n{y.
PNH-HUT66
Ví dụ Nút lệnh
PNH-HUT67
2.4.5. Ô nhập liệu – Textbox
Kh|i niệm:
 Điều khiển cho phép nhận thông tin người dùng nhập 
v{o. (thời điểm chạy ứng dụng)
 Hoặc để hiển thị thông tin đưa v{o (khi thiết kế hoặc khi 
chạy ứng dụng).
Thuộc tính:
 Name: định danh cho điều khiển.
 Text: Dùng để nhập v{o thông tin cần hiển thị trong 
Textbox tại thời điểm thiết kế hoặc nhận gi| trị do 
người dùng nhập v{o tại thời điểm chạy ứng dụng.
 MaxLength: số ký tự tối đa cho phép nhập.
PNH-HUT68
9/14/2011
18
2.4.5. Ô nhập liệu – Textbox
Thuộc tính (tiếp):
 Locked: có/không cho phép thay đổi nội dung ô nhập 
liệu.
 PasswordChar: qui định c|ch hiện ký tự nhập v{o, 
dùng khi muốn che giấu. 
 Multiline: có/không nhập theo nhiều h{ng.
 Font, Fore Color: Quy định kiểu chữ, kích thước, m{u 
hiển thị.
Phương thức:
 Move x,y
 SetFocus: thiết lập nhận focus (sẵn s{ng tương t|c).
PNH-HUT69
2.4.5. Ô nhập liệu – Textbox
Sự kiện:
 KeyPress: xảy ra khi người dùng nhấn một 
phím. Thường dùng nó để lọc (filter out) c|c 
phím không chấp nhận. Sự kiện KeyPress cho ta 
một m~ Ascii, một số có gi| trị từ 0 đến 255, của 
phím vừa nhấn. 
 KeyDown, KeyUp: mỗi sự kiện KeyPress lại cho 
ta một cặp sự kiện KeyDown/KeyUp. Sự kiện 
KeyDown/KeyUp có 2 tham số l{ KeyCode v{ 
Shift. Sự kiện n{y cho phép ta nhận biết được 
c|c phím đặc biệt trên b{n phím
PNH-HUT70
2.4.6. List Box
Hiển thị một danh s|ch c|c phần tử. Người 
sử dụng chọn một hoặc nhiều phần tử.
Biểu tượng
Ví dụ:
PNH-HUT71
2.4.6. ListBox (tiếp)
Thuộc tính:
 Name: định danh
 MultiSelect: Cho phép có/không lựa chọn nhiều dòng 
(yes/no).
 Sort: List Box có sắp xếp hay không? 
 ListIndex: Vị trí của phần tử được lựa chọn trong List 
Box. 
 ListCount: Số phần tử của danh s|ch (tính từ 0 đến 
ListCount -1)
 Select(): cho biết phần tử thứ trong 
List Box có được chọn hay không?
 List: Danh s|ch c|c phần tử (nhập khi thiết kế) Ctrl + 
Enter
PNH-HUT72
9/14/2011
19
2.4.6. ListBox (tiếp)
Phương thức:
 AddItem: Thêm một phần tử v{o List Box. Cú ph|p: 
.AddItem(Item As String, [Index])
- Name: tên danh sách
- Item: Phần tử (chuỗi) muốn thêm
- Index: Vị trí thêm v{o (tính từ 0). Nếu không có sẽ thêm 
v{o cuối.
 RemoveItem: Xóa một phần tử ra khỏi List Box. 
Cú pháp: .RemoveItem Index 
Tham số Name v{ Index giống như ở trường hợp thêm 
v{o một đề mục.
PNH-HUT73
2.4.6. ListBox (tiếp)
Phương thức:
 Clear: Xóa tất cả c|c mục trong List Box. Cú ph|p 
.Clear 
 Text: Nhận gi| trị từ List Box khi một đề mục được 
chọn. 
 List: Truy xuất nội dung phần tử bất kỳ trong ListBox. 
.List(Index) 
Ví dụ: Text1.Text = List1.List(2) ‘Chọn phần tử thứ 3
PNH-HUT74
2.4.7. Combo Box
Điều khiển hộp lựa chọn: 
 Kết hợp TextBox + ListBox, chọn bằng c|ch nhập v{o 
chuỗi hoặc chọn từ một đề mục trong danh s|ch.
 Chỉ gợi ý, đề nghị c|c lựa chọn (kh|c listbox giới hạn 
trước c|c phần tử lựa chọn).
 Biểu tượng:
 Có 3 dạng (có thể chọn khi thiết kế):
PNH-HUT75
Kiểu Giá trị Hằng
Drop-down ComboBox 0 vbComboDropDown
Simple ComboBox 1 vbComboSimple
Drop-down Listbox 2 vbComboDropDownList
2.4.7. Combo Box (tiếp)
C|c dạng ComboBox:
PNH-HUT76
Các thuộc tính, phương thức giống như ListBox
9/14/2011
20
2.4.8. Check Box
Nhận thông tin người sử dụng dạng Yes/No 
(True/False).
Có thể dùng nhiều khả năng lựa chọn trong một 
nhóm.
Khi được chọn có gi| trị 1, không chọn gi| trị 0.
Biểu tượng 
Thuộc tính:
 Name
 Value: Gi| trị hiện thời checkbox (vbChecked, 
vbUnChecked)
Sự kiện:
 Click
PNH-HUT77
2.4.9. Option Button
Tương tự checkbox
Kh|c: Trong một nhóm, tại mỗi thời điểm chỉ một 
điều khiển nhất định được chọn.
Biểu tượng:
Thuộc tính:
 Name, Value (True/False)
Sự kiện: Click
Tạo nhóm Option:
 C|c option đặt trực tiếp trên biểu mẫu sẽ cùng một 
nhóm.
 Muốn tạo nhóm riêng phải đặt trong Frame hoặc Picture 
Box.
PNH-HUT78
2.4.9. Option Button (tiếp)
PNH-HUT79
2.4.10. C|c điều khiển kh|c
PNH-HUT80
9/14/2011
21
2.5. Viết lệnh cho đối tượng
View code button: Click để mở cửa sổ viết m~ lệnh 
cho c|c đối tượng.
Mở thủ tục xử lý c|c sự kiện của đối tượng để viết 
c|c m~ lệnh cần thiết.
PNH-HUT81
2.5.Viết code cho đối tượng
Phím tắt
PNH-HUT82
2.5.Viết code cho đối tượng
Gợi nhớ Code: bấm Tab hoặc Space
PNH-HUT83
Chương 3
Kiểu dữ liệu, hằng, biến, v{ mảng
PNH-HUT84
9/14/2011
22
Nội dung
3.1. Kiểu dữ liệu
3.2. Biến
3.3. Hằng số
3.4. To|n tử v{ biểu thức
3.5. C|c kiểu dữ liệu có cấu trúc
PNH-HUT85
3.1. Kiểu dữ liệu
Kh|i niệm:
 Tập hợp c|c gi| trị m{ 1 biến của kiểu có thể 
nhận v{ tập hợp c|c phép to|n có thể |p dụng 
trên c|c gi| trị đó.
C|c kiểu dữ liệu cơ sở trong VB:
PNH-HUT86
Kiểu Kích thước Mô tả
Boolean 2 byte Gồm 2 giá trị True và False
Byte 1 byte Các giá trị số nguyên từ 0  255
Integer 2 byte Các giá trị số nguyên từ -32768 đến 32767
Long 4 byte Các giá trị số nguyên từ -2147483648 –
2147483647. Kiểu dữ liệu số nguyên dài (4 
byte)
3.1. Kiểu dữ liệu
C|c kiểu dữ liệu cơ sở trong VB (tiếp):
PNH-HUT87
Kiểu Kích thước Mô tả
Single 4 byte Các giá trị số thực từ -3.402823E+38 – 3.402823E+38. 
Kiểu dữ liệu số thực độ chính xác đơn.
Double 8 byte Các giá trị số thực từ -1.79769313486232E+308 -
1.79769313486232E+308. Kiểu dữ liệu số thực độ chính 
xác kép.
Currency 8 byte Dữ liệu tiền tệ chứa các giá trị số từ -
922.337.203.685.477,5808 - 922.337.203.685.477,5807. 
String 1 byte/1 ký
tự
Chuỗi dữ liệu từ 0 đến 65.500 ký tự hay chữ số,các ký tự
đặc biệt như ^%@. Giá trị kiểu chuỗi được đặt giữa 2 dấu 
ngoặc kép (“”). 
Date 8 byte Dữ liệu kiểu ngày tháng, giá trị được đặt giữa cặp dấu ##. 
Việc định dạng hiển thị tùy thuộc vào việc thiết lập trong 
Control Panel.
Variant Chứa mọi giá trị của các kiểu dữ liệu khác, kể cả mảng.
3.1. Kiểu dữ liệu
Chuyển kiểu dữ liệu
PNH-HUT88
9/14/2011
23
3.2. Biến
Kh|i niệm:
 Biến (Variable) l{ vùng lưu trữ được đặt tên để chứa dữ 
liệu tạm thời trong qu| trình tính to|n, so s|nh v{ c|c 
công việc kh|c. 
 2 đặc điểm:
• Mỗi biến có một tên. 
• Mỗi biến có thể chứa duy nhất một loại dữ liệu. 
 Tên biến: đặt giống qui tắc đặt tên điều khiển
PNH-HUT89
3.2. Biến
Khai b|o biến
PNH-HUT90
3.2. Biến
Khai b|o biến (tiếp):
 Khai báo ngầm: Không cần khai b|o biến trước khi 
dùng. (Tiện nhưng dễ sai sót).
 Khai báo tường minh: qui định VB b|o lỗi khi gặp biến 
chưa khai b|o. Dùng lệnh:
• Option Explicit trong phần Declaration (khai b|o) của mô-đun. 
• Chỉ có t|c dụng trên từng mô-đun.
PNH-HUT91
3.3. Hằng số - Constant
PNH-HUT92
9/14/2011
24
3.4. To|n tử v{ biểu thức
Kh|i niệm:
 To|n tử hay phép to|n (Operator): thực hiện 
phép tính v{ xử lý dữ liệu. 
 To|n hạng (Operand): l{ gi| trị dữ liệu (biến, 
hằng). 
 Biểu thức (Expression): l{ tập hợp c|c to|n 
hạng v{ c|c to|n tử kết hợp lại với nhau theo 
quy tắc nhất định để tính to|n ra một gi| trị n{o 
đó.
PNH-HUT93
3.4. To|n tử v{ biểu thức
C|c phép to|n số học: 
 Thao t|c trên kiểu dữ liệu số.
PNH-HUT94
Phép toán Ý nghĩa
+ Cộng
- Trừ
* Nhân
/ Chia
\ Chia lấy phần nguyên
Mod Chia lấy dư
^ Lũy thừa
3.4. To|n tử v{ biểu thức
C|c phép to|n quan hệ:
 Trả về gi| trị kiểu Boolean
PNH-HUT95
Toán tử Ý nghĩa
= So sánh bằng
 So sánh khác
< So sánh nhỏ hơn
> So sánh lớn hơn
<= So sánh nhỏ hơn hoặc bằng
>= So sánh lớn hơn hoặc bằng
3.4. To|n tử v{ biểu thức
 Các phép logic:
PNH-HUT96
9/14/2011
25
3.4. To|n tử v{ biểu thức
PNH-HUT97
3.4. To|n tử v{ biểu thức
PNH-HUT98
3.5. C|c kiểu dữ liệu có cấu trúc
Kiểu dữ liệu chuỗi (String)
Kiểu dữ liệu ng{y th|ng (Date)
Kiểu dữ liệu động (Variant)
Kiểu dữ liệu mảng (Array)
Kiểu do người dùng định nghĩa (kiểu 
mẩu tin)
PNH-HUT99
3.5.1. Kiểu chuỗi ký tự - String
Khai báo:
 String * : Khai b|o chuỗi có độ d{i cố 
định. Nếu nhỏ hơn tự động thêm ký tự khoảng 
trắng, nếu thừa cắt bỏ.
 String: Khai b|o không chỉ ra độ d{i tối đa, mặc 
định d{i 65500 ký tự.
 Ví dụ:
• Dim Name As String * 30, Class As String * 10
• Dim A As String
PNH-HUT100
9/14/2011
26
3.5.2. Kiểu ng{y th|ng - Date
L{ kiểu m{ c|c biến của nó chứa gi| trị ng{y th|ng. 
Để cho VB biết dữ liệu l{ kiểu Date ta cần đặt giữa 
hai dấu # (hoặc cặp “”).
Ví dụ:
Dim D As Date 
D = #01/02/98# ‘ Hay “01/02/98”
H{m Now: trả về ng{y giờ hiện tại. 
Ví dụ: Dùng h{m Now & Format: 
 MsgBox "NOW IS " & Format (Now, "ddd dd-mmm-yyyy 
hh:mm:ss") 
'sẽ hiển thị NOW IS Tue 05-Oct-2004 16:15:53
PNH-HUT101
3.5.3. Kiểu Variant
Biến kiểu Variant có thể chứa mọi kiểu dữ liệu kể 
cả kiểu mảng, kiểu do người dùng định nghĩa 
nhưng ngoại trừ kiểu chuỗi có độ d{i cố định . 
Biến kiểu Variant có thể nhận c|c gi| trị đặc biệt 
như Empty, Nothing, Error, Null. 
X|c định kiểu dữ liệu của biến Variant: hàm 
VarType, hàm TypeName. 
PNH-HUT102
3.5.4. Kiểu mảng - array
Kh|i niệm:
 Mảng l{ tập hợp c|c phần tử có cùng một kiểu. 
 Dùng vòng lặp cho mảng. 
 Mảng sẽ có biên trên v{ biên dưới, trong đó c|c 
th{nh phần của mảng l{ liên tiếp trong khoảng 
giữa hai biên n{y. 
 Có hai loại biến mảng: mảng có chiều d{i cố định 
v{ mảng có chiều d{i thay đổi lúc thi h{nh. 
PNH-HUT103
3.5.4. Kiểu mảng - array
Khai báo:
 Mảng có chiều d{i cố định: 
Dim () [As ] 
Phần tử đầu tiên có chỉ số 0.
Dim ( To ) 
[As ] 
 Ví dụ:
Dim Counters(14) As Integer ‘mảng 15 phần tử Integer
Public Sums(20) As Double ‘mảng 21 phần tử kiểu double
Dim List (1 To 10) As String * 12 ‘mảng 10 phần tử kiểu 
chuỗi ký tự
PNH-HUT104
9/14/2011
27
3.5.4. Kiểu mảng - array
Khai b|o (tiếp):
 H{m UBound, LBound: trả về biên trên, biên dưới của 
mảng.
 Mảng nhiều chiều: Ví dụ:
Dim Multi3D (3, 1 To 10, 9) As Double 
Khai báo một mảng 3 chiều với kích thước 4 x 10 x 10. 
 Mảng động: có kích thước thay đổi, tiết kiệm t{i nguyên 
hệ thống, có thể xóa khi không dùng.
 Cú pháp: Dim () [As ] 
 Ví dụ: Dim DynArray() As Integer 
 Cần cấp ph|t số phần tử, dùng lệnh: 
ReDim (N)
PNH-HUT105
3.5.4. Mảng - array
Một số thao t|c trên mảng:
 Truy xuất từng phần tử trong mảng: 
() 
 Sao chép mảng: g|n một mảng cho một mảng 
kh|c, h{m trả về mảng.
Chú ý: tương thích, cho mảng khai b|o động.
 Ví dụ:
Sub ByteCopy (old() As Byte, New() As Byte) 
New = old 
End Sub 
PNH-HUT106
3.5.4. Mảng - array
Một số thao t|c trên mảng (tiếp):
 Mảng l{ kết quả trả về của h{m. Ví dụ:
Public Function ArrayFunction (b As Byte) As Byte() 
Dim x(2) As Byte 
x(0) = b 
x(1) = b + 2 
x(2) = b + b 
ArrayFunction = x 
End Function 
 Khi gọi h{m trả về mảng, biến giữ gi| trị trả về phải l{ 
một mảng v{ có kiểu như kiểu của h{m
PNH-HUT107
3.5.5. Kiểu mẩu tin
 Cú pháp: 
Type 
 : 
 : 
 : 
End Type
 Ví dụ: Type TEmployee 
Fullname As String 
Salary As Single 
Age As Integer 
End Type
PNH-HUT108
9/14/2011
28
3.5.5. Kiểu mẩu tin
 C|ch truy xuất từng trường của kiểu mẩu tin: 
. 
 Ví dụ: Khai b|o biến: Dim e As TEmployee 
 Thao tác gán: e.Fullname = “Nguyen Van An” 
e.Salary = 300000.00 
e.Age = 26 
 Câu lệnh With: sử dụng để viết gọn hơn khi thao t|c với 
dữ liệu kiểu mẩu tin. Cú ph|p: 
With 
. ‘truy xuất đến từng trường
End With
PNH-HUT109
Dim e As TEmployee
With e
.Fullname = “Nguyen Van An”
.Salary = 300000.00
.Age = 26
End With
PNH-HUT110
e.Fullname = “Nguyen Van An” 
e.Salary = 300000.00
e.Age = 26 
Chương 4
C|c cấu trúc điều khiển
PNH-HUT111
Nội dung
4.1. Cấu trúc rẽ nh|nh
4.2. Cấu trúc lựa chọn
4.3. Cấu trúc lặp
4.4. Nh~n lệnh
4.5. Bẫy lỗi v{ xử lý
PNH-HUT112
9/14/2011
29
4.1. Cấu trúc rẽ nh|nh (1)
Một dòng lệnh: 
If Then 
Nhiều dòng lệnh: 
If Then 
C|c dòng lệnh 
End If 
PNH-HUT113
4.1. Cấu trúc rẽ nh|nh (2)
Dạng đầy đủ: If ... Then ... Else 
If Then 
[Khối lệnh 1] 
ElseIf Then 
[Khối lệnh 2]... 
[Else 
[Khối lệnh n]] 
End If 
PNH-HUT114
4.2. Cấu trúc lựa chọn
Select Case 
Case 
[Khối lệnh 1] 
Case 
[Khối lệnh 2] 
[Case Else 
[Khối lệnh n]] 
End Select
PNH-HUT115
4.3. Cấu trúc lặp (1)
Do  Loop
 Cấu trúc lặp không x|c định trước số lần lặp
 Số lần lặp được quyết định bởi biểu thức điều kiện (True 
hoặc False)
 Có 4 kiểu.
Kiểu 1:
 Do While 
Loop
 Khối lệnh được thực hiện đến khi sai
 Kiểm tra điều kiện trước.
 Khối lệnh có thể không được thực hiện lần n{o.
PNH-HUT116
9/14/2011
30
4.3. Cấu trúc lặp (2)
Kiểu 2:
 Do 
Loop While 
 Kiểm tra điều kiện sau
 Khối lệnh được thực hiện ít nhất một lần
Kiểu 3:
 Do Until 
Loop 
 Tương tự cấu trúc Do While ... Loop
 Kh|c: khối lệnh được thực hiện khi điều kiện sai
PNH-HUT117
4.3. Cấu trúc lặp (3)
Kiểu 4:
 Do 
Loop Until 
 Lặp lại khối lệnh cho đến khi điều kiện đúng.
 Được thực hiện ít nhất một lần.
PNH-HUT118
4.3. Cấu trúc lặp (4)
Ví dụ: Kiểm tra số nguyên N có nguyên tố ?
 Dim i As Integer 
i = 2 
Do While (i 0) 
i = i + 1 
Loop 
If (i > Sqr(N)) And (N 1) Then 
MsgBox Str(N) & “ la so nguyen to” 
Else 
MsgBox Str(N) & “ khong la so nguyen to” 
End If 
 (H{m Sqr: h{m tính căn bậc hai của một số)
PNH-HUT119
4.3. Cấu trúc lặp (5)
For  Next:
 Lặp biết trước số lần lặp
 Dùng biến đếm tăng dần, hoặc giảm dần để x|c 
định số lần lặp.
 For = To <điểm 
cuối> [Step ] 
[khối lệnh] 
Next 
 Biến đếm, điểm đầu, điểm cuối l{ gi| trị số.
 Bước nhảy có thể }m hoặc dương. Không dùng 
thì mặc định l{ 1.
PNH-HUT120
9/14/2011
31
4.3. Cấu trúc lặp (6)
Ví dụ: Hiển thị c|c kiểu chữ hiện có trong 
máy
 Private Sub Form_Click( ) 
Dim i As Integer 
For i = 0 To Screen.FontCount 
MsgBox Screen.Fonts(i) 
Next 
End Sub 
PNH-HUT121
4.3. Cấu trúc lặp (7)
For Each  Next:
 Tương tự For  Next nhưng lặp theo số phần tử của 
một tập đối tượng hay một mảng.
 For Each In 
Next 
 Lưu ý:
• Phần tử trong tập hợp chỉ có thể l{ biến Variant, biến Object, 
hoặc một đối tượng trong Object Browser. 
• Phần tử trong mảng chỉ có thể l{ biến Variant.
• Không dùng For Each ... Next với mảng chứa kiểu tự định nghĩa 
vì Variant không chứa kiểu tự định nghĩa. 
PNH-HUT122
4.4. Nh~n lệnh (1)
Kh|i niệm:
 Nh~n l{ tên g|n cho một đoạn chỉ thị lệnh bất kỳ 
trong chương trình. Khi thực hiện đoạn lệnh 
n{y chỉ cần nhảy tới nh~n đó.
 Mỗi nh~n dùng trong một Form, đối tượng l{ 
duy nhất.
C|ch viết:
 : 
PNH-HUT123
4.4. Nh~n lệnh (2)
C|ch gọi: có 2 c|ch
 C|ch 1: sử dụng lệnh GOTO 
 Cách 2: 
ON GOTO 
Biểu thức số có gi| trị từ 1  255
Tên nh~n có số thứ tự ứng với biểu thức số sẽ 
được chọn
Ví dụ: ON stt GOTO nhan1, nhan2, nhan3
PNH-HUT124
9/14/2011
32
4.4. Nh~n lệnh – Ví dụ
Sub Form_Click() 
Print "Giáo trình" 
GOTO Nhan1 
Print “Lệnh n{y sẽ bỏ qua" 
Nhan1: 
Print "Lập trình Visual Basic" 
End Sub
PNH-HUT125
4.5. Bẫy lỗi v{ xử lý lỗi
C|c lỗi chương trình khi thực thi khó kiểm so|t 
được hết.
Lỗi thực thi có thể ph| hỏng chương trình.
VB cung cấp cấu trúc bẫy lỗi thực thi. Có 2 dạng:
Dạng 1:
 On Error GoTo 
: 
PNH-HUT126
4.5. Bẫy lỗi v{ xử lý lỗi
Dạng 1 (tiếp):
 Ý nghĩa: Nếu xảy ra lỗi trong <c|c c}u lệnh xảy 
ra lỗi> thi chương trình sẽ nhảy tới lệnh bên 
dưới để thực thi. 
Dạng 2: 
 On Error Resume Next 
 Ý nghĩa: Nếu một lệnh trong <C|c c}u lệnh có 
thể g}y ra lỗi> thì khi chương trình thực thi đến 
c}u lệnh đó, sẽ tự động bỏ qua c}u lệnh bị lỗi v{ 
thực thi c}u lệnh kế tiếp.
PNH-HUT127
4.5. Bẫy lỗi – Ví dụ
 Private Sub Command1_Click() 
On Error Goto myErr 
Dim InputData 
Open "C:\arrays.cs" For Input As #1
Do While Not EOF(1) 
Line Input #1, InputData 
Debug.Print InputData 
Loop 
Close #1 
Exit Sub 
myErr: 
Debug.Print Error(Err.Number) 
End Sub
PNH-HUT128
9/14/2011
33
Chương 5 
C|c lệnh v{ h{m căn bản
PNH-HUT129
Nội dung
5.1. C|c lệnh cơ bản
5.2. C|c h{m cơ bản
PNH-HUT130
5.1. C|c lệnh cơ bản
1. C}u lệnh: Exit For
Lồng v{o trong vòng lặp For khi muốn dừng lại 
vòng lặp bất cứ lúc n{o.
Ví dụ:
flag = True
For i = 2 To Sqr(n)
If (n Mod i = 0) Then
flag = False
Exit For
End If
Next
PNH-HUT131
5.1. C|c lệnh cơ bản
2. C}u lệnh: Exit Do
Lồng v{o trong vòng lặp có cấu trúc DO khi muốn 
dừng lại vòng lặp bất cứ lúc n{o.
Ví dụ:
i=2
Do While (i <= Sqr(n))
If (n Mod i = 0) Then
Exit Do 
Else 
i = i + 1
End If
Loop
PNH-HUT132
9/14/2011
34
5.1. C|c lệnh cơ bản
3. C}u lệnh: Exit Sub
Tho|t khỏi thủ tục m{ bất cứ lúc n{o m{ không 
cần thực hiện c|c lệnh bên trong nó. 
Ví dụ:
Private Sub cmdAdd_Click()
If (txtName.Text = "") Then
MsgBox "Nhap vao ten sinh vien"
Exit Sub
End If
lstStudent.AddItem txtName.Text
txtName.Text = ""
txtName.SetFocus
End Sub
PNH-HUT133
5.1. C|c lệnh cơ bản (tiếp)
4. Lệnh: End
Chấm dứt chương trình ngay, tất cả c|c cửa sổ 
chương trình đều đóng lại khi thực hiện lệnh n{y.
Ví dụ: Private Sub cmdThoat_Click()
End
End Sub
5. Lệnh: Beep
Ph|t ra tiếng kêu Beep
PNH-HUT134
5.1. C|c lệnh cơ bản
6. Lệnh: Date
Đặt lại ng{y hệ thống, hay lấy ng{y hệ thống
Ví dụ:
'Lay ngay hien tai cua he thong:
Dim MyDate 
MyDate = Date 
'dat lai ngay hien tai cho he thong:
MyDate = #February 12, 1985# ' Assign a 
date. 
Date = MyDate ' Change system date. 
PNH-HUT135
5.1. C|c lệnh cơ bản
7. Lệnh: Time
Đặt lại giờ hệ thống, hay lấy giờ hệ thống
Cú pháp : Time = 
VD: Time = # 5 : 12 : 45 PM #
PNH-HUT136
9/14/2011
35
5.1. C|c lệnh cơ bản (tiếp)
8. Lệnh: Load
Nạp 1 form (dùng nó để mở 1 Form)
Cú pháp : Load 
Để l{m xuất hiện hoặc ẩn đi sử dụng phương thức 
Show
ví dụ:
form1.Hide ‘Ẩn form1
form2.Show ‘Hiện form2
PNH-HUT137
5.2. C|c h{m cơ bản
C|c h{m số học
C|c h{m về thời gian
C|c h{m xử lý chuỗi
C|c h{m l{m việc với ổ đĩa, thư mục
Các hàm khác
PNH-HUT138
5.2.1. C|c h{m số học
1. Hàm Abs (Number)
Trả về một gi| trị l{ gi| trị tuyệt đối của Number
Ví dụ:
Private Sub Form_Load() 
Dim MyNumber 
MyNumber = Abs(50.3) ' Returns 50.3. 
MyNumber = Abs( - 50.3) ' Returns 50.3. 
End Sub 
PNH-HUT139
5.2.1. C|c h{m số học
2. Hàm Sin (Number as Double)
Trả về một số thực l{ Sin của một góc (tính bằng 
đơn vị Radian)
3. Hàm Cos (Number as Double)
Trả về một số thực l{ Cos của một góc (tính bằng 
đơn vị Radian)
4. Hàm Tan (Number as Double)
Trả về một số thực l{ Tan của một góc (tính bằng 
đơn vị Radian)
PNH-HUT140
9/14/2011
36
5.2.1. C|c h{m số học
5. Hàm Atn(Number): Lấy arctan của số number
6. Hàm Int (Number):
Trả về phần nguyên của Number nếu nó l{ số 
dương, còn nếu số }m thì có gi| trị nhỏ hơn phần 
nguyên 1 đơn vị.
7. Hàm Fix (Number)
Trả về phần nguyên của Number nếu nó l{ số 
dương, còn nếu số }m thì có gi| trị lớn hơn phần 
nguyên 1 đơn vị.
PNH-HUT141
5.2.1. C|c h{m số học
8. Hàm Sgn (Number)
Trả về một số nguyên
Nếu Number > 0 sẽ trả về 1
Nếu Number < 0 sẽ trả về -1
Nếu Number = 0 sẽ trả về 0
9. Hàm Sqr (Number)
Trả về căn bậc hai của Number
10. Hàm Exp (x)
Đưa ra e lũy thừa x, e l{ cơ số Logarit tự nhiên. 
H{m trả về một số thực
PNH-HUT142
5.2.1. C|c h{m số học
11. Hàm Log (x)
Đưa ra Logarit tự nhiên của x
12. H{m Round (Expression [số])
H{m n{y sẽ l{m tròn số
[,số] : số l{m tròn qua chấm thập ph}n.
VD : Round(9.7) = 10
Round (9.785 , 2) = 9.79
13. Hàm Rnd; (Gọi h{m Randomize trước)
Tạo 1 số ngẫu nhiên l{ 1 số thực từ 0 đến 1.
Number*Rnd để tạo 1 số thực ngẫu nhiên từ 0 đến 
Number 
PNH-HUT143
5.2.2. C|c h{m về thời gian
1. Hàm Now:
H{m n{y trả về ng{y th|ng năm v{ thời gian hiện 
hành.
2. Hàm Day (NgayThangNam)
Trả về ng{y trong NgayThangNam m{ bạn ghi.
Ta thường sử dụng Day(Now) để lấy ng{y hệ 
thống.
3. Hàm Month (NgayThangNam)
Trả về Th|ng trong NgayThangNam
Ta thường sử dụng Month(Now) để lấy th|ng hệ 
thống
PNH-HUT144
9/14/2011
37
5.2.2. C|c h{m về thời gian
4. Hàm Year (NgayThangNam)
Trả về Năm trong NgayThangNam m{ bạn ghi.
Ta thường sử dụng Year(Now) để lấy năm hệ 
thống
5. Hàm Weekday (NgayThangNam)
Trả về ng{y thứ mấy trong tuần ứng với 
NgayThangNam m{ bạn nhập v{o
Ta có thể sử dụng Weekday(Now) để lấy thứ của 
ng{y hiện tại
PNH-HUT145
5.2.2. C|c h{m về thời gian
6. Hàm Hour (ThoiGian)
Trả về giờ ứng với ThoiGian m{ bạn nhập v{o
Ta có thể sử dụng Hour(Now) để lấy giờ của hệ 
thống hiện tại
7. Hàm Minute (ThoiGian)
Trả về phút ứng với ThoiGian m{ bạn nhập v{o
Ta có thể sử dụng Minute(Now) để lấy phút của hệ 
thống hiện tại
8. Hàm Second (ThoiGian)
Trả về gi}y ứng với ThoiGian m{ bạn nhập v{o
Ta có thể sử dụng Second(Now) để lấy gi}y của hệ 
thống hiện tại
PNH-HUT146
5.2.3. C|c h{m xử lý chuỗi
Ghép chuỗi: &
Cho phép ghép 2 hay nhiều chuỗi lại với nhau.
 Ví dụ:
Dim a As String, b As String 
Dim c As String 
a = "Hello" 
b= "World" 
c= a & “ “ & b & “ Lap trinh Windows” 
' c bây giờ là "Hello World Lap trinh Windows"
PNH-HUT147
5.2.3. C|c h{m xử lý chuỗi (tt)
 Len: Trả về chiều d{i chuỗi.
 Ví dụ: Greeting = "Hi John!”
Dim iLen As Integer 
iLen = Len(Greeting) ' iLen bây giờ bằng 8
 Left(String, Length): Trích chuỗi con từ đầu 
chuỗi gốc.
 Right(String, Length): Trích chuỗi con từ phần 
đuôi chuỗi gốc. 
 Mid(String, start As Long, Length): Trích chuỗi 
con từ giữa chuỗi gốc.
PNH-HUT148
9/14/2011
38
5.2.3. C|c h{m xử lý chuỗi (tt)
 InStr ([start,] string1, string2 [, compare]): Tìm chuỗi con 
trong chuỗi gốc. Nếu h{m InStr trả về 0, nghĩa l{ không tìm 
thấy. 
 Trong đó: Start: vị trí bắt đầu tìm. (null: Từ đầu chuỗi)
String1: chuỗi gốc, String2: chuỗi so s|nh.
Compare: kiểu so s|nh (vbTextCompare, 
vbBinaryCompare).
 Ví dụ: Dim KeyValuePair As String, Key As String 
Dim Value As String 
KeyValuePair = "BeatlesSong=Yesterday" 
Pos = Instr(KeyValuePair, "=") 
Key = Left(KeyValuePair, Pos-1) 
Value = Mid(KeyValuePair, Pos+1)
PNH-HUT149
5.2.3. C|c h{m xử lý chuỗi (tt)
 Replace(Expression, find, replace[, start[, count[, 
compare]]]) : Tìm v{ thay thế chuỗi
 Trong đó: 
• Expression: Biểu thức chuỗi chứa chuỗi cần thay thế.
• find:Chuỗi cần tìm. 
• replace: Chuỗi thay thế chuỗi tìm được. 
• start: vị trí bắt đầu tìm. 
• count: X|c định số lần thay thế. Mặc định l{ 1.
• compare: kiểu so s|nh.
PNH-HUT150
Replace – Ví dụ
Dim AnyString, MyStr 
AnyString = "Hello World" 'Khoi tao
MyStr = Replace(AnyString, "Hel", "AAAAA", 1, 
-1, vbTextCompare) 
'Returns "AAAAAlo World"
MyStr = Replace(AnyString, "Wor", "BBB", 1, -1, 
vbTextCompare) 
'Returns "Hello BBBld"
PNH-HUT151
5.2.3. C|c h{m xử lý chuỗi (tt)
 LTrim (string) và RTrim(string): cắt tất cả c|c khoảng 
trắng bên tr|i (bên phải của chuỗi) .
 Ucase(string): đổi chuỗi sang chuỗi gồm c|c ký tự l{ chữ 
hoa.
 Asc: cho m~ Ascii của một ký tự. 
 Chr: trả về ký tự ứng với m~ Ascii được chỉ định. 
 Ví dụ:
Dim ASCIINumberA As Integer, CharB As String * 1 
Dim StrFive As String * 1 
ASCIINumberA = Asc("A") ' ASCIINumberA = 65 
CharB = Chr(66) 
StrFive = Chr(Asc("0") + 5) ' ta có digit "5" 
PNH-HUT152
9/14/2011
39
5.2.3. C|c h{m xử lý chuỗi (tt)
 InstrRev: tương tự như InStr nhưng việc tìm 
kiếm được tiến h{nh từ phải sang. 
 Val: H{m đổi chuỗi sang số. 
 Str: H{m đổi số sang chuỗi. 
PNH-HUT153
5.2.4. H{m với tập tin, thư mục
1. ChDrive
Dùng để đổi ổ đĩa l{m việc
Cú ph|p : ChDrive 
2. MkDir
Dùng để tạo một thư mục mới trên đĩa
Cú Ph|p : MkDir 
Ví dụ : MkDir “D:\Caulacbovb”
3. ChDir
Lệnh n{y dùng để thay đổi thư mục l{m việc tại ổ 
đĩa đang l{m việc
Cú ph|p : ChDir 
PNH-HUT154
5.2.4. H{m với thư mục, ổ đĩa
4. RmDir
Dùng để xóa 1 thư mục rỗng.
Cú ph|p : RmDir 
5. KILL
Xóa 1 hay nhiều tập tin trên đĩa
Cú ph|p : KILL 
Ví dụ : Kill “D:\vinhphuoc.txt”
Kill “D:\*.txt”
PNH-HUT155
5.2.4. H{m với thư mục, ổ đĩa
6. Name
Dùng để đổi tên tập tin
Cú pháp : Name 
AS 
Ví dụ : Name “C:\Phuoc.txt” AS 
“C:\VINHPHUOC91.txt”
PNH-HUT156
9/14/2011
40
5.2.5. Các hàm khác
1. Hàm Format (Value, format)
H{m n{y dùng để định dạng theo ý muốn
Value : Gi| trị cần định dạng
Format : C|c kí hiệu định dạng.
0 nếu có gi| trị thì thể hiện gi| trị đó, nếu không có thì ghi 
số 0. Nêu số 0 ít hơn thì gi| trị vẫn được ghi đầy đủ
# : Thể hiện c|c gi| trị tương ứng, nếu kí tự số ở vị trí đó 
không có thì bỏ qua, nếu # ít hơn thì gi| trị vẫn được ghi 
đầy đủ.
$ : Dấu $ bạn có thể dùng chung với số 0 hay #
. : Dấu ngăn c|ch phần thập ph}n
, : Dấu ngăn c|ch phần nghìn
% : Khi có kí hiệu phần trăm n{y trong đối số Format, con 
số sẽ tự thêm % v{o sau
PNH-HUT157
5.2.4. Các hàm khác
Hàm Format (Value, format) (tiếp)
dd/mm/yyyy : Định dạng Ng{y Th|ng Năm, với đối số 
Value = Now
hh:mm:ss AM/PM : Định dạng Giờ phút gi}y theo dạng, với 
đối số Value = Now
hh:mm:ss AM/PM dd/mm/yyyy : Định dạng Giờ phút gi}y 
vừa định dạng ng{y th|ng năm theo dạng, với đối số Value 
= Now
hh:mm : Định dạng chỉ có giờ v{ phút với Value=Now.
Ví dụ :
Format(12345.5 , “0000000.00”) = “012345.50”
Format(12345.5, “######.##”) = “12345.5”
Format(12345.5, “$###.##”) = “$12345.5”
Format(0.34, “###%”) = “34%”
PNH-HUT158
5.2.4. Các hàm khác
2. H{m IIF(, Truepart, Falsepart)
H{m n{y sẽ trả về gi| trị truepart nếu điều kiện 
đúng v{ cho Falsepart khi điều kiện sai
H{m n{y l{ c|ch viết ngắn gọn của IFEND IF
Ví dụ txt1.text = IIF(x<5000000,”Lương bạn còn 
thấp”,”Bạn đ~ có lương cao”)
PNH-HUT159
Chương 6
Thủ tục v{ h{m
PNH-HUT160
9/14/2011
41
Nội dung
6.1. Kh|i niệm
6.2. Thủ tục
6.3. Hàm
6.4. Truy xuất dữ liệu trong VB
PNH-HUT161
6.1. Kh|i niệm
Chương trình con: 
 Ph}n chia chương trình lớn th{nh c|c chương trình con, 
mỗi chương trình con giải quyết công việc n{o đó.
 Đoạn chương trình được sử dụng nhiều lần.
 Kiểm tra tính đúng đắn trước khi đặt v{o chương trình 
lớn, dễ hiệu chỉnh sai sót.
Trong Visual Basic, chương trình con có hai dạng 
l{ h{m (Function) v{ thủ tục (Sub):
 Thủ tục: không trả về gi| trị.
 Hàm: trả về cho lệnh gọi một gi| trị thông qua tên của 
nó.
PNH-HUT162
6.2. Thủ tục - Sub
Kh|i niệm:
 Thủ tục l{ một chương trình con thực hiện một hay một 
số t|c vụ n{o đó. 
 Thủ tục có thể có hay không có tham số.
Khai b|o thủ tục:
 [Private | Public] [Static] Sub [(<tham 
số>[As ])] 
 hay 
End Sub
 [As ]: có hoặc không.
Nếu có nhiều tham số thì mỗi tham số ph}n c|ch nhau
dấu phẩy. Nếu không x|c định kiểu tham số thì tham số có 
kiểu Variant. 
PNH-HUT163
6.2. Thủ tục - Sub
Gọi thủ tục: có 2 c|ch
 [] 
 Call ([]) 
Ví dụ:
 Sub KTraNgTo(N As Integer) 
‘C|c lệnh
End Sub 
Gọi:
KTraNgTo 57 
KTraNgTo Val(txtNum.Text) 
Call KtraNgTo(Val(txtNum.Text)) 
PNH-HUT164
9/14/2011
42
Ví dụ thủ tục
PNH-HUT165
6.3. Hàm - Function
Kh|i niệm:
 H{m (Function) l{ một chương trình con có 
nhiệm vụ tính to|n v{ cho ta một kết quả. Kết 
quả n{y được trả về trong tên h{m cho lời gọi nó. 
Khai báo:
 [Private | Public | Static] Function 
[([As ])] [As <KIỂU DỮ 
LIỆU>] 
 hay 
 = 
End Function 
PNH-HUT166
6.3. Hàm - Function
Khai b|o (tiếp):
 [As ]: có thể có hoặc 
không. Nếu có nhiều tham số thì mỗi tham số 
ph}n c|ch nhau dấu phẩy. Nếu không x|c định 
kiểu tham số thì tham số có kiểu Variant. 
 AS : kiểu dữ liệu kết quả trả về 
của h{m. Trong trường hợp không khai b|o As 
, mặc định, VB hiểu kiểu trả về là 
kiểu Variant. 
PNH-HUT167
Ví dụ h{m
PNH-HUT168
9/14/2011
43
6.3. Hàm - Function
Cú ph|p gọi h{m thực thi: 
ketquatrave = [(tham số)]
Ví dụ: 
Function Giaithua(N As Integer) As Long 
Dim kq As Long
‘C|c lệnh
Giaithua=kq
End Function
Gọi: a = Giaithua(n)
PNH-HUT169
6.4. Truy xuất dữ liệu trong VB
Tổ chức c|c module chương trình
Biến to{n cục
Biến cục bộ
Biến module
Truyền tham số cho chương trình con
PNH-HUT170
6.4.1. Tổ chức c|c module
Module:
 Ứng dụng đơn giản: có 1 biểu mẫu, tất cả lệnh 
viết trong cửa sổ m~ lệnh của biểu mẫu đó, chỉ có 
một module m~ lệnh (Form Module).
 Ứng dụng phức tạp: nhiều biểu mẫu, nhiều 
Module m~ lệnh, cần được tổ chức riêng rẽ.
 VB tổ chức 3 loại module:
• Module biểu mẫu (Form Module)
• Module chuẩn (Standard Module)
• Module lớp (Class Module)
PNH-HUT171
6.4.1. Tổ chức c|c module (tiếp)
Module biểu mẫu (Form module): 
 Đi kèm với 1 biểu mẫu, chứa m~ lệnh của biểu mẫu đó.
 Chứa chương trình con của c|c điều khiển trên biểu 
mẫu. Được thực thi để đ|p ứng c|c sự kiện t|c động 
trên điều khiển.
 Lưu dưới dạng tập tin có đuôi *.frm.
Module chuẩn (Standard Module):
 Chứa m~ lệnh không thuộc về biểu mẫu hoặc điều khiển 
nào.
 Thường chứa c|c chương trình con dùng chung
 Lưu dưới tập tin có đuôi *.bas.
PNH-HUT172
9/14/2011
44
6.4.1. Tổ chức c|c module (tiếp)
Module lớp (Class Module):
 Tạo c|c điều khiển được gọi thực thi trong ứng dụng cụ 
thể.
 Chứa cả m~ lệnh v{ dữ liệu.
 Lưu dưới tập tin đuôi mở rộng *.cls.
Phạm vi (scope): 
 X|c định số lượng chương trình có thể truy xuất một 
biến. Một biến sẽ thuộc một trong 3 loại phạm vi: 
• Phạm vi biến cục bộ. 
• Phạm vi biến module. 
• Phạm vi biến to{n cục.
PNH-HUT173
6.4.2. Biến to{n cục
Kh|i niệm:
 L{ biến có phạm vi hoạt động trong to{n bộ ứng 
dụng.
Khai báo:
 Global [As ] 
PNH-HUT174
6.4.3. Biến cục bộ
Kh|i niệm:
 L{ biến chỉ có t|c dụng trong những chương 
trình con m{ chúng được định nghĩa.
Khai báo:
 Dim [As ] 
 Biến cục bộ định nghĩa bằng từ khóa Dim sẽ 
được giải phóng ngay khi chương trình con 
được thực thi.
PNH-HUT175
6.4.4. Biến Module
Kh|i niệm:
 Được định nghĩa trong phần khai b|o module 
(General|Declaration).
 Mặc định có phạm vi hoạt động trong to{n bộ module 
ấy.
Khai báo:
 Dùng từ khóa Dim hay Private đặt trong module ấy.
 Ví dụ: Private Num As Integer
 Có thể dùng bởi c|c chương trình con viết trong module 
kh|c. Dùng từ khóa Public trong phần khai b|o 
(General|Declaration).
 Ví dụ: Public Num As Integer 
PNH-HUT176
9/14/2011
45
6.4.5. Truyền tham số cho CTC
Kh|i niệm:
 Tham số được truyền khi gọi chương trình con.
 Có hai c|ch để truyền tham số cho chương trình 
con: Truyền bằng gi| trị & truyền bằng địa chỉ. 
Truyền tham số bằng gi| trị:
 Dùng từ khóa ByVal 
 Tạo ra bản sao của biến mỗi khi truyền 1 tham 
số.
 Chương trình con chỉ t|c động lên bản sao đó.
PNH-HUT177
6.4.5. Truyền tham số cho CTC
Ví dụ:
Sub Twice (ByVal Num As Integer) 
Num = Num * 2 
Print Num 
End Sub 
Private Sub Form_Click() 
Dim A As Integer 
A = 4 
Print A ‘A trước khi truyền
Twice A 
Print A ‘A sau khi truyền
End Sub 
PNH-HUT178
 Kết quả:
4
8
4
6.4.5. Truyền tham số cho CTC
Truyền tham số bằng địa chỉ:
 Cho phép chương trình con truy cập v{o gi| trị 
gốc của biến trong bộ nhớ. Chương trình con có 
thể l{m thay đổi gi| trị biến.
 Mặc định truyền theo địa chỉ, có thể viết tường 
mình dùng từ khóa ByRef
PNH-HUT179
6.4.5. Truyền tham số cho CTC
Ví dụ:
Sub Twice (ByRef Num As Integer) 
Num = Num * 2 
Print Num 
End Sub 
Private Sub Form_Click() 
Dim A As Integer 
A = 4 
Print A 
Twice A 
Print A 
End Sub 
PNH-HUT180
 Kết quả:
4
8
8
9/14/2011
46
Chương 7
C|c điều khiển hình ảnh, 
Timer, duyệt file, thư mục
PNH-HUT181
Nội dung
7.1. Ph}n loại điều khiển
7.2. Picture Box
7.3. Image
7.4. Timer
7.5. DriveListBox, DirListBox, FileListBox
PNH-HUT182
7.1. Ph}n loại điều khiển
Có 3 nhóm điều khiển:
 C|c điều khiển nội tại (Intrinsic control): Có sẵn trong 
hộp công cụ (nh~n, khung, nút lệnh, khung ảnh, ).
 C|c điều khiển ActiveX tồn tại trong c|c tập tin độc lập 
(.OCX) (do Microsoft cung cấp), có thể do h~ng thứ 3 
cung cấp.
 C|c đối tượng chèn được (Insertable Object): 
Ví dụ Microsoft Equation 3.0 hoặc bảng tính 
(Worksheet) của Microsoft Excel... 
PNH-HUT183
7.1. Ph}n loại điều khiển
PNH-HUT184
Điều khiển 
Active
Đối tượng 
chèn được
Mở: Project/Components
9/14/2011
47
7.2. Picture Box
Sử dụng hiện hình ảnh trên biểu mẫu.
Biểu tượng:
Thuộc tính:
 Name: định danh của đối tượng
 Picture: X|c định ảnh sẽ hiện (tên tập tin + đường dẫn)
- Có thể đặt sẵn khi thiết kế.
- Để hiển thị ảnh tại thời điểm thực thi dùng phương thức 
LoadPicture.Ví dụ:
picMain.Picture = LoadPicture("NEW.JPG") 
 Autosize: =True, Picture Box tự động thay đổi kích thước 
cho phù hợp với ảnh.
PNH-HUT185
7.2. Picture Box
C|c sự kiện: 
 Click, DblClick
 MouseDown, MouseUp, MouseMove
 Resize
 v.v
PNH-HUT186
7.3. Image
Sử dụng hiển thị hình ảnh (Icon,metafile, 
jpeg, gif).
Nạp ảnh nhanh hơn, tốn ít t{i nguyên hệ 
thống hơn Picture Box.
Biểu tượng:
Thuộc tính:
 Name, Picture, (tương tự Picture Box)
 Stretch: tự động co giản ảnh cho vừa với vùng 
chứa
Không có autoresize như Picture Box
PNH-HUT187
7.3. Image
Sự kiện: 
 Click, DblClick
 MouseDown, MouseUp, MouseMove
Để nạp ảnh tại thời điểm thực thi, dùng phương 
thức LoadPicture(fileanh)
PNH-HUT188
9/14/2011
48
7.4. Timer
Điều khiển bộ định thời:
 Lập trình thực hiện công việc n{o đó sau một khoảng 
thời gian (định thời). Độc lập với người sử dụng.
 Khi chạy, điều khiển Timer chỉ quan s|t được khi thiết 
kế, khi chạy không có thể hiện trên biểu mẫu.
Biểu tượng: 
Thuộc tính:
 Name: định danh của điều khiển
 Interval: Qu~ng thời gian định thời (ms). Khoảng thời 
gian giữa 2 sự kiện liên tiếp. (0  64767)
 Ví dụ: 500 = 0.5s, 1000 = 1s
 Enabled: True – Kích hoạt v{ ngược lại. 
PNH-HUT189
7.4. Timer (tiếp)
Sự kiện:
 Timer: xảy ra mỗi khi đến thời gian một sự kiện 
được thực hiện (x|c định trong thuộc tính 
Interval).
PNH-HUT190
7.4. Timer (tiếp)
Sử dụng điều khiển Timer:
 Khởi tạo một điều khiển Timer: 
• Đặt thuộc tính Enable = TRUE để kích hoạt Timer hoạt 
động ngay khi biểu mẫu chứa nó được nạp.
• Hoặc dùng sự kiện n{o đó từ bên ngo{i để kích hoạt. Ví 
dụ Click chuột nút lệnh, v.v Gọi
.Enable = TRUE
 Lập trình đ|p ứng sự kiện trả về từ điều khiển 
Timer: 
• Viết mã lệnh của công việc cần thực hiện v{o trong sự 
kiện Timer của điều khiển Timer.
PNH-HUT191
7.4. Timer (tiếp)
Ví dụ: Đồng hồ số (đặt Interval = 500)
500ms = 0.5s
Private Sub TimeDongHo_Timer()
lblDongHo.Caption = Format(Now, "hh:mm:ss AM/PM") 'hien thi gio cua 
he thong
End Sub End Sub
Hoặc:
Private Sub Timer1_Timer() 
If Label1.Caption CStr(Time) Then 
Label1.Caption = Time 
End If 
End Sub
PNH-HUT192
9/14/2011
49
7.4. Timer (tiếp)
Điều khiển Timer còn hữu ích trong việc tính to|n 
thời gian cho một công việc n{o đó, đến một thời 
điểm n{o đó thì ta sẽ khởi tạo một công việc mới 
hoặc ngưng một công việc không còn cần nữa.
Để tính thời gian có thể dùng biến đếm trong sự kiện 
Timer
 Ví dụ: Đặt Interval = 1000 (=1s)
 Dim count as Integer
Count = 0
Private Sub Timer1_Timer()
count = count + 1
End Sub
PNH-HUT193
7.5. DriveListBox, DirListBox, FileListBox
DriveListBox – Điều khiển danh s|ch ổ đĩa:
 Trình b{y những ổ đĩa của hệ thống, cho phép chọn ổ 
đĩa.
 Biểu tượng shortcut trên toolbox:
PNH-HUT194
7.5. DriveListBox, DirListBox, FileListBox
DriveListBox – Điều khiển danh s|ch ổ đĩa 
(tiếp):
Thuộc tính Drive: Chỉ ra tên ổ đĩa sẽ hiện. 
 Gi| trị mặc định l{ ổ đĩa chứa ứng dụng.
 Hoặc có thể thiết lập bằng c|ch g|n gi| trị tên ổ đĩa cho 
thuộc tính n{y lúc thực hiện chương trình.
Ví dụ:
Drive1.Drive = “C:\”
Chú ý tên ổ đĩa phải tồn tại.
PNH-HUT195
7.5. DriveListBox, DirListBox, FileListBox
DriveListBox – Điều khiển danh s|ch ổ đĩa 
(tiếp):
Phương thức: Change: Xảy ra khi người sử 
dụng lựa chọn ổ đĩa (giống Combo box)
Private Sub Drive1_Change()
‘M~ lệnh thực hiện công việc khi xảy ra sự 
kiện chọn ổ đĩa
End Sub
PNH-HUT196
9/14/2011
50
7.5. DriveListBox, DirListBox, FileListBox
DirListBox – Điều khiển danh s|ch thư mục:
 Trình b{y những thư mục v{ đường dẫn tại thời điểm 
chạy ứng dụng, danh s|ch có thứ bậc của c|c thư mục.
 Có thể mở t{i liệu từ danh s|ch c|c t{i liệu đ~ sẵn có.
 Biểu tượng shortcut:
PNH-HUT197
7.5. DriveListBox, DirListBox, FileListBox
DirListBox – Điều khiển danh s|ch thư mục 
(tiếp):
Thuộc tính: 
 Path: Đường dẫn thư mục hiện h{nh chứa danh 
s|ch c|c thư mục con sẽ hiện
 Ví dụ: Dir1.Path = “E:\” ‘Hiện c|c thư mục trong 
ổ E
Phương thức: 
 Change: Xảy ra khi có thay đổi (lựa chọn thư 
mục trong danh s|ch c|c thư mục) (giống 
ListBox).
PNH-HUT198
7.5. DriveListBox, DirListBox, FileListBox
DirListBox – Điều khiển danh s|ch thư mục 
(tiếp):
Ví dụ:
Private Sub Dir1_Change()
‘M~ lệnh thực hiện khi xảy ra lựa chọn trong 
danh s|ch thư mục
End Sub
PNH-HUT199
7.5. DriveListBox, DirListBox, FileListBox
FileListBox – Điều khiển danh s|ch tệp tin:
 Trình b{y những t{i liệu có sẵn trong thư mục hiện 
hành.
 Biểu tượng shortcut:
PNH-HUT200
9/14/2011
51
7.5. DriveListBox, DirListBox, FileListBox
FileListBox – Điều khiển danh s|ch tệp 
tin (tiếp):
 Thuộc tính Path: Thư mục hiện h{nh chứa danh 
s|ch c|c tệp tin sẽ hiện
 Thuộc tính FileName: Chứa danh s|ch tên c|c 
tệp tin sẽ hiện.
PNH-HUT201
7.5. DriveListBox, DirListBox, FileListBox
FileListBox – Điều khiển danh s|ch tệp 
tin (tiếp):
 Thuộc tính Parttern x|c định kiểu tập tin hiện 
trong danh sách.
 Ví dụ: “*.*” bao gồm tất cả c|c tập tin
“*.doc” chỉ lấy c|c tập tin văn bản .doc
Có thể đặt khi thiết kế (c|ch nhau ; nếu có nhiều 
kiểu)
Có thể đặt khi lập trình: 
File1.Pattern = "*.gif;*.jpg;*.png;*.bmp;*.ico"
PNH-HUT202
7.5. DriveListBox, DirListBox, FileListBox
FileListBox – Điều khiển danh s|ch tệp 
tin (tiếp):
 Phương thức Click, DblClick: Xảy ra khi người 
sử dụng click, dblClick chuột v{o một file
 Viết m~ lệnh xử lý (mở ảnh, chơi file nhạc, v.v) 
Private Sub File1_Click()
‘M~ lệnh 
End Sub
PNH-HUT203
7.5. DriveListBox, DirListBox, FileListBox
Thông thường sử dụng phối hợp 
cả 3 loại điều khiển n{y.
Khi ta thay đổi ổ đĩa thì c|c thư 
mục sẽ thay đổi theo đó l{ 
những thư mục ở ổ đĩa hiện 
h{nh, sự thay đổi cũng diễn ra 
tương tự đối với danh s|ch c|c 
tập tin. 
Đối với ổ đĩa mềm v{ CD thì cần 
thiết phải có đĩa mềm hoặc CD 
tại thời điểm chọn (nếu không 
sẽ g}y lỗi)
PNH-HUT204
9/14/2011
52
7.5. DriveListBox, DirListBox, FileListBox
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub
Private Sub Dir1_Change()
File1.FileName= Dir1.Path
End Sub
PNH-HUT205
7.5. DriveListBox, DirListBox, FileListBox
 Ví dụ tổng hợp: Ứng dụng xem ảnh(thực h{nh)
PNH-HUT206
B{i thực h{nh Picture Viewer
Bước 1:
 Dùng DriveListBox, DirListBox, FileListBox để 
tạo một panel duyệt c|c tập tin ảnh (.jpg, .jpeg, 
.bmp, .icon, .png, .gif, .)
 Cần phối hợp 3 điều khiển n{y. Khi chọn ổ đĩa sẽ 
hiện c|c thư mục trong ổ đĩa, khi chọn thư mục 
sẽ hiện c|c file ảnh có trong thư mục
 Dùng thuộc tính Pattern để lọc c|c kiểu file ảnh 
nói trên.
PNH-HUT207
B{i thực h{nh Picture Viewer
Bước 2:
 Dùng một Picture Box (Hoặc Image) để load ảnh 
khi chọn file ảnh tương ứng (trong FileListBox). 
Xảy ra khi click v{o tên file ảnh
 Sự kiện File1_Click()
 H{m load ảnh:
picViewer.Picture = LoadPicture(“fileanh”)
“fileanh” l{ x}u chứa cả đường dẫn tuyệt đối
( = DirPath & “\” & filename)
Duyệt c|c file ảnh: File1.List(i)
PNH-HUT208
9/14/2011
53
B{i thực h{nh Picture Viewer
Bước 3:
 Xử lý c|c nút duyệt: next, previous, zoom, 
slideshow
PNH-HUT209
Nút slideshow
Private Sub cmdSlideShow_Click()
 bSlide = Not (bSlide)
 If bSlide Then
 TimerSlideShow.Enabled = True
 cmdSlideShow.Caption = "Stop Slide"
 Else
 TimerSlideShow.Enabled = False
 cmdSlideShow.Caption = "Slide Show"
 End If
End Sub
PNH-HUT210
Caption chuyển động
lblTenCT.Caption = 
Right(lblTenCT.Caption,Len(lblTenCT.Capti
on) - 1) & Left(lblTenCT.Caption, 1)
PNH-HUT211
Chương 8
Sử dụng menu v{ hộp thoại
PNH-HUT212
9/14/2011
54
Nội dung
8.1. Sử dụng menu
8.2. Sử dụng hộp thoại
PNH-HUT213
8.1. Menu
Kh|i niệm:
 Menu l{ một loại điều khiển cho phép lựa chọn c|c mục 
từ một danh s|ch cho trước.
 Có 2 loại menu: 
- Menu thả xuống (Drop-Down Menu): thông dụng nhất. 
- Menu bật ra (Pop-Up Menu): hiện khi ấn nút phải 
chuột. 
 Ví dụ:
PNH-HUT214
8.1. Menu
C|ch tạo menu: Mở Menu Editor
PNH-HUT215
8.1. Menu
C|ch tạo menu:
 Thiết kế menu bằng 
Menu Editor (trong 
Tools)
 Lập trình quản lý việc 
điều h{nh c|c sự kiện 
(click chuột khi chọn 
mục menu)
PNH-HUT216
9/14/2011
55
8.1. Menu
C|c thuộc tính:
 Chứa trong Menu Editor (Tools)
 Caption: Chuỗi hiển thị trên Menu
 Name: Th{nh phần của menu để lựa chọn. Phải duy 
nhất v{ dễ nhớ.
 Shortcut: Dùng thiết lập phím tắt (Ctrl + S)
 WindowList: Dùng trong ứng dụng MDI, cho phép hiển 
thị tiêu đề của c|c biểu mẫu con trong menu.
 Checked: Tạo nút đ|nh dấu bên tr|i menu (không |p 
dụng cho menu có menu con).
 Enabled: Cho phép hoặc không cho phép chọn.
 Visible: Hiện hoặc ẩn mục chọn.
Sự kiện: Click khi nhấp chuột v{o mục trong menu
PNH-HUT217
8.1. Menu
Sử dụng Menu Editor:
PNH-HUT218
8.1. Menu
Sử dụng Menu Editor:
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 – menu 
con). 
Tươ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. 
PNH-HUT219
8.1. Menu
Sử dụng Menu Editor:
Click Insert, hoặc dòng trắng để chèn thêm một 
menu mới
Click mũi tên lên hoặc xuống để sắp đặt thứ tự c|c 
mục menu.
Nếu muốn cho User dùng Alt key để sử dụng 
Menu, đ|nh thêm dấu & trước ký tự muốn trong 
menu Caption. Thí dụ Alt-F sẽ thả xuống Menu của 
Menu Command File. 
PNH-HUT220
9/14/2011
56
8.1. Menu
Sử dụng Menu Editor:
Nếu đặt cho MenuItem &Open tên mnuOpen, thì 
khi 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: 
PNH-HUT221
8.1. Menu
Sử dụng Menu Editor:
C|i gạch ngang giữa MenuItems Close v{ Exit được 
gọi l{ Menu Separator. Có thể tạo một Menu 
Separator bằng c|ch cho Caption nó bằng dấu trừ ( 
- ). 
PNH-HUT222
8.1. Menu
Sử dụng Menu Editor:
Có thể dùng Short Key để tạo phím tắt cho một 
mục menu (ở mức con)
PNH-HUT223
8.1. Menu
Sử dụng Menu Editor:
 Mặc định, c|c menuItem được Enabled v{ Visible. Lúc 
thiết kế có thể cho MenuItem gi| trị khởi đầu của 
Enabled v{ Visible bằng c|ch dùng Check boxes Enabled 
và Visible. 
 Trong khi chạy program (at runtime), cũng có thể thay 
đổi c|c values Enabled v{ Visible như sau: 
mnuSave.Enabled = False 
mnuOpen.Visible = False
 Khi một MenuItem có Enabled=False thì nó bị mờ v{ 
user không dùng được. 
PNH-HUT224
9/14/2011
57
8.1. Menu
Sử dụng Menu Editor:
 Dùng c|c dấu mũi tên chỉ lên v{ xuống để di chuyển 
MenuItem đã được chọn lên v{ xuống 
 Trong danh sách các MenuItems. 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. 
PNH-HUT225
8.1. Menu – Popup menu
Menu |p dụng cho đúng tình huống (Context 
menu) bằng một Mouse click (thường l{ chuột 
phải).
Pop-Up menu thật ra l{ Drop-down menu của một 
Menu Bar Command. Bình thường Menu Bar 
Command ấy có thể visible hay invisible (t{ng
hình). 
PNH-HUT226
8.1. Menu – Popup menu
PNH-HUT227
8.1. Menu – Popup menu
Code l{m cho Popup menu hiện lên được viết 
trong Event Mousedown của một Object. Ví dụ của 
sự kiện chuột phải lên Form:
PNH-HUT228
9/14/2011
58
8.2. Hộp thoại
Hộp thoại (Dialog Box): L{ một trong những c|ch 
thức VB giao tiếp với người dùng.
Có 4 loại hộp thoại:
 Hộp thông điệp (Message Box)
 Hộp nhập (Input Box)
 C|c hộp thoại thông dụng (Common Dialog)
 Hộp thoại hiệu chỉnh (Custom Dialog)
Hộp thông điệp: Có 2 loại
 Loại chỉ xuất thông b|o
 Loại có tương t|c với người dùng (Nút phản hồi)
PNH-HUT229
8.2.1. Hộp thông điệp 
Message Box
PNH-HUT230
8.2.1. Hộp thông điệp – loại 1
Loại chỉ xuất thông b|o, dùng MsgBox như một thủ 
tục.
Cú pháp: MsgBox Prompt, Button, Title. 
Trong đó: 
 Prompt: Chuỗi thông b|o sẽ hiển thị. 
 Button: C|c nút nhấn sẽ được hiển thị trên hộp thông 
báo. 
 Title: Chuỗi hiển thị trên thanh tiêu đề của hộp thông 
báo.
PNH-HUT231
8.2.1. Hộp thông điệp – loại 1
Loại chỉ xuất thông b|o, dùng MsgBox như một thủ 
tục.
Ví dụ:
PNH-HUT232
9/14/2011
59
8.2.1. Hộp thông điệp – loại 1
Tùy theo tham số (button) truyền v{o MsgBox, sẽ 
xuất hiện hộp thoại với những kiểu nút kh|c nhau. 
Constant của c|c icons ta có thể dùng l{ vbCritical, 
vbQuestion, vbExclamation và vbInformation. 
PNH-HUT233
Hằng số Giá trị Ý nghĩa
vbOKOnly 0 Chỉ hiện nút OK
vbOKCancel 1 Hiện 2 nút OK và Cancel
vbAbortRetryIgnore 2 Hiện 3 nút Abort, Retry và Ignore
vbYesNoCancel 3 Hiện 3 nút Yes, No, Cancel
vbYesNo 4 Hiện 2 nút Yes, No
vbRetryCancel 5 Hiện 2 nút Retry, Cancel
8.2.1. Hộp thông điệp – loại 2
Loại tương t|c với người dùng, dùng MsgBox như một 
h{m, khi nút n{o đó trên hộp thông b|o được ấn, sẽ 
trả về gi| trị tương ứng.
Cú pháp: MsgBox (Prompt, Button, Title) As Integer 
PNH-HUT234
Hằng số Giá trị Nút
vbOK 1 OK
vbCancel 2 Cancel
vbAbort 3 Abort
vbRetry 4 Retry
vbIgnore 5 Ignore
vbYes 6 Yes
vbNo 7 No
8.2.1. Hộp thông điệp – loại 2
Ví dụ:
PNH-HUT235
8.2.1. Hộp thông điệp
Có thể hiển thị Text message trong Message Box 
th{nh nhiều dòng bằng c|ch dùng Constant vbCrLf 
(CarriageReturn v{ LineFeed) để đ|nh dấu những 
chỗ ngắt khúc như sau: 
PNH-HUT236
9/14/2011
60
8.2.2. C|c hộp thoại thông dụng
Có 6 loại hộp thoại thông dụng (Common dialog)
 Mở tập tin (Open)
 Lưu tập tin (Save)
 Chọn mầu (Color)
 Chọn font (Font)
 In ấn (Print)
 Trợ giúp (Help)
Khi thiết kế chỉ có một công cụ duy nhất 
(CommonDialog). 
PNH-HUT237
8.2.2. C|c hộp thoại thông dụng
Mở Project/Components/Controls/Microsoft 
Common Dialog Control 6.0 để đưa công cụ n{y 
vào toolbox.
PNH-HUT238
8.2.2. C|c hộp thoại thông dụng
Có 6 dạng Common Dialog, tùy từng Method để qui 
định gọi loại n{o.
PNH-HUT239
Common Dialog Properties
PNH-HUT240
9/14/2011
61
Hộp thoại mở v{ lưu tập tin
Hai hộp thoại n{y có chức năng v{ thể hiện như 
nhau.
Đều hiển thị danh s|ch c|c tập tin, có thể duyệt 
qua c|c ổ đĩa để tìm tập tin.
Chỉ kh|c nhau phần tiêu đề v{ nút ấn
C|c thuộc tính quan trọng:
 Name: tên của common dialog
 Filter: Chuỗi x|c định phần mở rộng của tên tập tin m{ 
hộp thoại có thể mở hay lưu
 FilterIndex: X|c định mặc định loại tập tin n{o được 
chọn (dùng một số nguyên) nếu có nhiều loại phần mở 
rộng của tệp tin được mô tả trong Filter. 
PNH-HUT241
Hộp thoại mở v{ lưu tập tin
C|c thuộc tính quan trọng (tiếp):
 FileName: Trả về tên tập tin sau khi lựa chọn một tệp 
tin n{o đó
 CancelError: Nếu True thì trả về lỗi khi chọn Cancel. 
(Mặc định l{ False).
Phương thức
 ShowOpen: Mở hộp thoại mở tập tin
 ShowSave: Mở hộp loại lưu tập tin
PNH-HUT242
Hộp thoại mở v{ lưu tập tin
Thiết lập thuộc tính khi thiết kế (mở 
properties của common dialog)
PNH-HUT243
Hộp thoại mở v{ lưu tập tin
Thuộc tính Filter lọc tập tin:
Có thể đặt khi thiết kế, hoặc viết lệnh
Ví dụ:
PNH-HUT244
9/14/2011
62
PNH-HUT245
Hộp thoại mở v{ lưu tập tin
Ví dụ: (thực h{nh)
PNH-HUT246
Hộp thoại mở v{ lưu tập tin
Ví dụ: (thực h{nh)
PNH-HUT247
Hộp thoại chọn m{u
Hiện thị bảng m{u có 
sẵn của Windows, cho 
phép chọn m{u hoặc 
thiết lập thêm m{u 
mới.
Dùng phương thức 
ShowColor để hiển thị 
hộp thoại chọn m{u.
Thuộc tính Color trả về 
m{u được chọn.
PNH-HUT248
9/14/2011
63
Hộp thoại chọn m{u
Trong một số ứng dụng, ta sẽ dùng hộp thoại chọn 
m{u để thay đổi gi| trị m{u của c|c điều khiển 
trong một số trường hợp n{o đó. 
Ví dụ (thực h{nh)
PNH-HUT249
Hộp thoại chọn m{u
 txtEdit.SelColor = CommonDialog1.Color
PNH-HUT250
Hộp thoại chọn font chữ
Cho phép người dùng 
chọn font m{n hình, 
m|y in, hoặc cả 2.
Mở hộp thoại chọn 
Font bằng phương 
thức ShowFont
Thuộc tính Flags qui 
định loại font n{o sẽ 
được hiển thị.
PNH-HUT251
Hộp thoại chọn font chữ
C|c thuộc tính:
PNH-HUT252
Thuộc tính Giải thích
Color Lưu giữ giá trị của màu chữ được chọn
FontBold True nếu chọn chữ đậm (Bold), False nếu ngược lại
FontItalic True nếu chọn chữ nghiêng, False nếu ngược lại
FontStrikeThru True nếu chọn chế độ gạch ngang ký tự
FontUnderLine True nếu chọn chế độ gạch chân ký tự
FontName Tên font chữ
Max Kích thước lớn nhất của Font được hiển thị
Min Kích thước nhỏ nhất của Font được hiển thị
FontSize Kích thước của Font được chọn
9/14/2011
64
Hộp thoại chọn font chữ
C|c gi| trị của thuộc tính Flags:
Nếu muốn chọn m{u, thêm 256 v{o gi| trị thuộc 
tính Flags.
Ví dụ chọn Font: (thực h{nh)
PNH-HUT253
Hằng Giá trị Hiệu quả
cdlCFPrinterFonts &H2 Chỉ hiển thị Font máy in
cdlCFScreenFonts &H1 Chỉ hiển thị Font màn hình
cdlCFBoth &H3 Hiển thị cả Font màn hình và máy in
cdlCFScalableOnly &H20000 Hiển thị Font tỷ lệ như là Font True Type
Hộp thoại chọn font chữ
PNH-HUT254
Hộp thoại chọn font chữ
PNH-HUT255
Hộp thoại in ấn
Cho phép x|c lập 
thông tin về m|y in 
khi tiến h{nh in ấn.
Sử dụng phương thức 
ShowPrinter để mở 
hộp thoại in ấn.
PNH-HUT256
9/14/2011
65
Hộp thoại in ấn
C|c thuộc tính:
Ví dụ hộp thoại in ấn (thực h{nh)
PNH-HUT257
Thuộc tính Ý nghĩa
Copies Số bản in
FromPage Số thứ tự của trang bắt đầu in
Max Số bản in tối đa cho phép
Min Số bản in tối thiểu cho phép
PrinterDefault Nếu = True, các thiết lập sẽ ảnh hưởng đến các ứng 
dụng khác có sử dụng máy in.
ToPage Số thứ tự trang in cuối cùng
Hộp thoại in ấn
PNH-HUT258
Hộp thoại in ấn
PNH-HUT259
Hộp thoại trợ giúp
Ta dùng method ShowHelp để hiển thị c|c thông 
tin giúp đỡ, phải cho CommonDialog ít nhất trị số 
của c|c properties HelpFile v{ HelpCommand
PNH-HUT260
9/14/2011
66
B{i thực h{nh tổng hợp
Sử dụng menu v{ hộp thoại (Ứng dụng trình 
soạn thảo văn bản đơn giản)
PNH-HUT261
B{i thực h{nh tổng hợp
Sử dụng menu v{ hộp thoại
PNH-HUT262
B{i thực h{nh tổng hợp
Sử dụng menu v{ hộp thoại
PNH-HUT263
Ghi/Đọc dữ liệu trên file
 Filename l{ tên tập tin (lưu/mở) lấy từ commondlg.FileName
 Ghi: 
 Open filename For Output As #1
 Print #1, txtEdit.Text
 Close #1 
 Đọc:
 Dim s as string
 Open filename For Input As #1
 Do While Not (EOF(1))
Line Input #1, s
txtEdit.Text = txtEdit.Text & s & vbCrLf
 Loop
 Close #1
PNH-HUT264
9/14/2011
67
Resize điều khiển RTB
Khi Form chứa txtEdit thay đổi kích thước 
(resize) xảy ra sự kiện Form_Resize. Đặt lại 
kích thước điều khiển txtEdit bằng kích 
thước form 
txtEdit.Width = ScaleWidth
txtEdit.Height = ScaleHeight
PNH-HUT265
Chương 9
Xử lý tập tin
PNH-HUT266
Nội dung
9.1. C|c kiểu truy cập tập tin
9.2. Tập tin tuần tự
9.3. Tập tin truy xuất ngẫu nhiên
PNH-HUT267
9.1. C|c kiểu truy cập tập tin
Tập tin: một d~y c|c byte trên đĩa. (ký tự, bản ghi, 
số, chuỗi )
Có 3 kiểu truy cập tập tin: tuần tự, ngẫu nhiên, nhị 
phân.
Tuần tự (Sequential): Đọc/ghi c|c tập tin văn bản 
theo c|c chuỗi liên tục.
Ngẫu nhiên (Random): Đọc/ghi tập tin văn bản, 
nhị ph}n có cấu trúc theo c|c mẩu tin có độ d{i cố 
định.
Nhị ph}n (Binary): Đọc/ghi tập tin có cấu trúc thay 
đổi.
PNH-HUT268
9/14/2011
68
9.2. Tập tin tuần tự - Open
Mở tập tin:
 Cú pháp:
Open pathname For [Input | Output | Append] As 
filenumber [Len = buffersize]
 Tham số: 
- Input: Mở tập tin để đọc, tập tin phải tồn tại sẵn, nếu 
không sẽ b|o lỗi.
- Mở tập tin chưa có sẵn với Output, Append sẽ tạo mới 
tập tin v{ mở nó.
- Len: số ký tự trong vùng đệm khi sao chép dữ liệu giữa 
tập tin v{ chương trình.
- Filenumber: số hiệu tập tin được mở (nguyên, từ 1 .. 
511).
PNH-HUT269
9.2. Tập tin tuần tự - Open (tt)
Mở tập tin – Ví dụ:
 Open “C:\TESTFILE" For Output As #1 ' Mở tập 
tin để ghi.
PNH-HUT270
9.2. Tập tin tuần tự - Input
Đọc nội dung tập tin:
 Hàm Input
Cú pháp: Input (number, filenumber) As String
Trả về number ký tự của tập tin có số hiệu được chỉ định 
bởi filenumber
 Lệnh Input
Cú pháp: Input # filenumber, varlist
Đọc nội dung của tập tin v{o c|c biến được chỉ bởi varlist.
Chỉ sử dụng với c|c tập tin được ghi bởi lệnh Write #
 Lệnh: Line Input # filenumber, varname
Đọc nội dung của một dòng trong tập tin tuần tự v{o biến 
chuỗi (varname).
PNH-HUT271
9.2. Tập tin tuần tự - Input (tt)
Đọc nội dung tập tin – Ví dụ:
 Dùng Line Input để đọc từng dòng:
Dim LinesFromFile, NextLine As String
Do Until EOF(1)
Line Input #1, NextLine
LinesFromFile = LinesFromFile + NextLine + 
Chr(13) + Chr(10)
Loop
 Dùng Input để đọc một danh s|ch c|c th{nh phần:
Input #1, name, street, city, state, zip
 Dùng hàm Input để đọc về n ký tự:
LinesFromFile = Input(n, #1)
PNH-HUT272
9/14/2011
69
9.2. Tập tin tuần tự - Write
Ghi dữ liệu lên tập tin: 
 Có 2 c}u lệnh Write # v{ Print #
C}u lệnh Write #
 Cú pháp: Write #filenumber, [outputlist]
 Ghi dữ liệu v{o tập tin tuần tự. Nội dung ghi chứa trong 
danh s|ch biến outputlist, c|c phần tử danh s|ch c|ch 
nhau bởi dấu phẩy. Nếu không có outputlist thì ghi một 
dòng trắng.
PNH-HUT273
9.2. Tập tin tuần tự - Write (tt)
C}u lệnh Print #
 Cú pháp: Print # filenumber, [outputlist]
 Tương tự như lệnh Write nhưng dữ liệu có thể định 
dạng khi ghi lên tập tin.
 Đối số outputlist có thể l{:
[{Spc(n) | Tab[(n)]}] [expression] [charpos]
Trong đó: 
- Spc(n): xen n khoảng trắng v{o tập tin.
- Tab(n): dùng để x|c định cột bắt đầu ghi dữ liệu trong 
vùng ghi với n l{ số thứ tự cột. Dùng Tab không đối số 
để chỉ vị trí bắt đầu của vùng ghi tiếp theo.
- Expression: biểu thức chuỗi hoặc biểu thức số
- Charpos: chỉ định vị trí của ký tự kế tiếp.
PNH-HUT274
9.2. Tập tin tuần tự - Write (tt)
Ghi tập tin – ví dụ:
 Ghi nội dung hộp văn bản (một chuỗi) v{o tập tin:
Print #1, Thebox.text
Print #1, "This is a test" ' Ghi chuỗi v{o tập tin.
Print #1, ' Ghi một dòng trắng v{o tập tin. 
Print #1, "Zone 1"; Tab ; "Zone 2" ' Tạo hai vùng ghi
 Ghi danh s|ch chuỗi, số:
Dim strString as String, intNumber as Integer 
strString = “AnyCharacters”
intNumber = 23456
Write #Filenum, strString, intNumber
PNH-HUT275
9.2. Tập tin tuần tự - Close
Đóng tập tin:
 Cú pháp: Close filenumberlist
Đóng lại c|c tập tin được mở với c|c số hiệu được mô tả 
trong filenumberlist, filenumberlist có dạng sau: 
[[#]filenumber] [, [#]filenumber] . . .
 Ví dụ: Đóng tập tin đ~ mở cho c|c thao t|c trước
Close #1
PNH-HUT276
9/14/2011
70
9.2. Tập tin tuần tự - Thực h{nh
Ví dụ: Thiết kế ứng dụng duyệt v{ đọc nội dung 
tập tin văn bản trên đĩa cứng (B{i thực h{nh)
PNH-HUT277
9.3. Tập tin truy xuất ngẫu nhiên
 Dữ liệu trong tập tin truy xuất ngẫu nhiên có dạng c|c bản 
ghi đồng nhất. (Tương đương kiểu dữ liệu mẩu tin).
 Ví ụ: Kiểu worker tạo mẫu tin 19 bytes gồm 3 trường:
Type worker
LastName As String *10
Tilte As String * 7
Rank As String *2
End Type
 Sau khi định nghĩa kiểu mẩu tin, khai b|o c|c biến m{ ứng 
dụng cần để xử lý 1 tập tin mở để truy cập ngẫu nhiên:
Public Employee as worker
PNH-HUT278
9.3. Tập tin truy xuất ngẫu nhiên - Open
Mở tập tin:
 Cú pháp:
Open pathname [For Random] As filenumber [Len = 
RecLength]
 Tham số:
- For Random: Mặc định nên có thể không viết.
- Filenumber: Số hiệu tập tin được mở
- Kích thước cho một mẩu tin. Nếu nhỏ hơn sẽ g}y lỗi. 
Nếu lớn hơn thì l~ng phí.
PNH-HUT279
9.3. Tập tin truy xuất ngẫu nhiên - Get
Đọc nội dung tập tin – C}u lệnh Get:
 Cú pháp:
Get [#] filenumber, [recnumber], varname
 Đọc nội dung mẩu tin thứ recnumber v{o biến 
varname.
 Mẩu tin đầu tiên của tập tin được tính từ 1.
PNH-HUT280
9/14/2011
71
9.3. Tập tin truy xuất ngẫu nhiên - Put
Ghi dữ liệu lên tập tin – C}u lệnh Put:
 Cú pháp:
Put [#] filenumber, [recnumber], varname
 Ghi mẩu tin thay thế hoặc thêm mới.
 Thay thế: Nếu recnumber <= số mẩu tin hiện tại
 Thêm mới: recnumber = số mẩu tin hiện tại + 1
PNH-HUT281
9.3. Tập tin truy xuất ngẫu nhiên - Close
Đóng tập tin:
 Như với tập tin tuần tự
 Lệnh: Close filenumberlist
 Đóng lại c|c tập tin được mở với c|c số hiệu được mô tả 
trong filenumberlist, filenumberlist có dạng sau: 
[[#]filenumber] [, [#]filenumber]... 
PNH-HUT282
9.3. Tập tin truy xuất ngẫu nhiên – Ví dụ
 Giả sử ta có khai b|o 1 
mẩu tin như sau: 
Type Hanghoa 
MaHang As String * 10 
TenHang As String * 40 
DVTinh As String * 15 
Gia As Double 
End Type 
PNH-HUT283
 Ghi dữ liệu lên tập tin có cấu 
trúc là các mẩu tin như trên 
Dim h As Hanghoa 
h.MaHang = "AM01" 
h.TenHang = "Dau goi Clear" 
h.DVTinh = "Chai" 
h.Gia = 14000# 
Open "E:\Test.dat" For Random As #1 
Len = LenB(h) 
Put #1, 1, h 
Close #1 
9.3. Tập tin truy xuất ngẫu nhiên – Ví dụ
Đọc dữ liệu từ tập tin có cấu trúc như trên:
Dim h As Hanghoa 
Open "E:\Test.dat" For Random As #1 Len = LenB(h) 
Get #1, 1, h 
Close #1 
MsgBox h.MaHang & ": " & h.TenHang & ": " & h.DVTinh & 
": " & Str(h.Gia), , “Thong tin Hang Hoa” 
PNH-HUT284
9/14/2011
72
Chương 10
Chương trình nhiều Form
PNH-HUT285
Nội dung
10.1. Chương trình nhiều Form
10.2. Ứng dụng MDI Form
PNH-HUT286
10.1. Chương trình nhiều Form
Thêm Form v{o ứng dụng:
Project/AddForm
PNH-HUT287
Biến, thủ tục trong chương trình nhiều form
Khai b|o to{n cục để sử dụng trong form 
kh|c. Ví dụ:
 Public V as integer
 Public Sub1()
End Sub
Sử dụng. Ví dụ:
 Form2.v=100 ‘G|n gi| trị 1000 v{o biến V được 
khai báo trong Form2
 Form2.sub1
PNH-HUT288
9/14/2011
73
Truy xuất đối tượng trong Form kh|c
Kèm theo tên Form chứa đối tượng:
Ví dụ: 
 Form2.text1.text=”DurianGroup” 
 Form2.shape.Fillcolor=QBColor(Rnd() * 10)
Từ khóa Me: Từ khóa n{y có dùng để thay 
thế cho tên Form trong c|c c}u lệnh được 
viết trong Form n{y
PNH-HUT289
Qui định Form hiện trước
Chọn menu Project /Project properties
Tab General:
Chọn tên Form 
Startup Object
PNH-HUT290
10.2. Ứng dụng MDIFrom
Kh|i niệm MDI:
 MDI (Multiple Document Interface), giao diện 
có nhiều cửa sổ t{i liệu
 Sử dụng trong hầu hết c|c ứng dụng Microsoft 
Office (Word, Excel, Access, PowerPoint), và các 
ứng dụng kh|c của Window. 
 Biểu mẫu MDI cho phép nhóm nhiều biểu mẫu 
v{ chức năng trong một cửa sổ lớn. 
 MDI phù hợp với c|c ứng dụng cần l{m việc với 
nhiều t{i liệu cùng lúc. 
PNH-HUT291
10.2. Ứng dụng MDIForm
Đặc điểm:
 MDIForm l{ một biểu mẫu chuẩn có những 
điểm đặc biệt kh|c với c|c biểu mẫu thông 
thường.
 Chỉ có thể tạo một MDIForm cho mỗi ứng dụng, 
vì đ}y l{ biểu mẫu cha, chứa c|c biểu mẫu con 
khác. 
PNH-HUT292
9/14/2011
74
10.2. Ứng dụng MDI Form – Đặc điểm
Hầu hết c|c điều khiển sẽ không đặt trực tiếp được 
v{o giao diện MDIForm. 
Được phép:
 Thiết kế menu
 Chứa c|c điều khiển không có thể hiện khi chạy (Timer, 
CommonDialog).
 C|c điều khiển hỗ trợ căn chỉnh Align (PictureBox, 
Toolbar, StatusBar).
Để đặt c|c điều khiển kh|c, hoặc hiển thị ký tự, 
hình ảnh cần dùng điều khiển chứa chúng (thường 
dùng PictureBox). 
PNH-HUT293
10.2. Ứng dụng MDIForm – C|ch tạo
Mở Project/Add MDI Form. Sau khi tạo MDIForm 
th{nh công, dòng n{y sẽ mờ đi, không cho phép 
thêm MDIForm n{o nữa.
Hình ảnh:
PNH-HUT294
Biểu mẫu MDIChild
Một biểu mẫu MDIForm chứa một hoặc nhiều biểu 
mẫu con. Để tạo c|c biểu mẫu con, thêm biểu mẫu 
v{o dự |n v{ thiết lập thuộc tính MDIChild của nó 
gi| trị True.
Khi được thiết lập l{ MDIChild, biểu tượng của 
form trong cửa sổ Project Explorer sẽ thay đổi. 
Mặc định nó l{ form con của MDIForm (mỗi 
project chỉ có một form cha).
PNH-HUT295
Biểu mẫu MDIChild
Form MDI con nằm bên trong MDI cha. Nếu một 
Form MDI con được chọn l{ form khởi động trong 
ứng dụng thì Form MDI cha sẽ được nạp tự động 
v{ hiển thị trước khi hiện form con. C|c thể hiện 
của form MDI con được tạo ra sử dụng từ khóa 
New 
‘Inside the MDIForm module 
Private Sub mnuFileNew_Click() 
Dim frmDoc As New frmDocument 
frmDoc.Show 
End Sub 
PNH-HUT296
9/14/2011
75
Tạo Instance của biểu mẫu
Sử dụng biến đối tượng để tạo ra những bản sao 
của một biểu mẫu. 
Từng bản sao có c|c điều khiển v{ menu như nhau, 
nhưng có những dữ liệu kh|c nhau. Mặc dù 
chương trình cũng như tên biến v{ tên điều khiển 
như nhau, nhưng dữ liệu được chứa ở những nơi 
kh|c nhau trong bộ nhớ.
PNH-HUT297
Tạo danh s|ch cửa sổ
Phương thức Arrange của MDIForm (không có 
trong form thông thường) cung cấp c|c c|ch thức 
sắp xếp c|c form con (MDIChild) trong ứng dụng 
MDI.
C|c kiểu sắp xếp do VB cung cấp:
PNH-HUT298
Giá trị Hằng Mô tả
0 vbCascade Sắp xếp các cửa sổ con theo kiểu thác nước trải từ 
góc trái trên qua góc phải dưới.
1 vbTileHorizontal Dàn đều các cửa sổ con sao cho chúng chia màn 
hình thành những dải ngang.
2 vbTileVertical Dàn đều các cửa sổ con sao cho chúng chia màn 
hình thành những dải dọc.
3 vbArrangeIcons Các cửa sổ con được thu nhỏ thành các biểu 
tượng và xếp thẳng hàng ở đáy cửa sổ cha.
Tạo danh s|ch cửa sổ
Để l{m những điều n{y, cần tạo ra một menu 
Window với 4 lệnh: Tile Horizontally, Tile 
Vertically, Cascade, and Arrange Icons.
Viết code cho mỗi th{nh phần menu:
‘Chọn xếp theo d{n h{ng ngang
Private Sub mnuTileHorizontally_Click()
Arrange vbTileHorizontal
End Sub
‘Chọn xếp theo d{n h{ng dọc
Private Sub mnuTileVertically_Click()
Arrange vbTileVertical
End Sub
PNH-HUT299
Tạo danh s|ch cửa sổ
Viết code cho mỗi th{nh phần menu (tiếp):
‘Chọn xếp theo kiểu th|c nước
Private Sub mnuCascade_Click()
Arrange vbCascade
End Sub
‘Chọn xếp theo kiểu thu nhỏ
Private Sub mnuArrangeIcons_Click()
Arrange vbArrangeIcons
End Sub
PNH-HUT300
9/14/2011
76
10.3. Ứng dụng MDI Notepad
B{i thực h{nh
Tạo mới thể hiện form con:
 Dim frmDoc As New frmDocument 
frmDoc.Show
Tham chiếu đến form con đang kích hoạt 
(ActiveForm):
Me.ActiveForm
PNH-HUT301
Ứng dụng Notepad MDI
Tạo mới thể hiện Form con
PNH-HUT302
Private Sub menuNew_Click()
Dim frmDoc As frmDocument „Ten form con
Static n As Integer „Bien tinh dem so the hien form con
Set frmDoc = New frmDocument
frmDoc.rtbEdit.Text = "" „Chứa rtbEdit
n = n + 1
frmDoc.Caption = "Document" & Format(n)
frmDoc.Show „Hien the hien form con
End Sub
Ứng dụng MDI Notepad
Kiểm tra nếu chưa có Form con n{o được mở
PNH-HUT303
If ActiveForm Is Nothing Then
Set frmDoc = New frmDocument
frmDoc.Caption = "Document 1"
frmDoc.Show
End If
Tham chiếu điều khiển trên form con đang active
Me.ActiveForm.TenDieuKhien
Xuất file văn bản
Filename: Tên file văn bản được mở 
(qua OpenFileDialog)
PNH-HUT304
Open filename For Input As #1
Do While Not (EOF(1))
Line Input #1, s
Me.ActiveForm.rtbEdit.Text = 
Me.ActiveForm.rtbEdit.Text & s & vbCrLf
Loop
Close #1
9/14/2011
77
Đóng c|c Form con
PNH-HUT305
Private Sub menuExit_Click()
Dim frmDoc As Form
'Thoat cac cua so con
For Each frmDoc In Forms
If TypeOf frmDoc Is frmDocument Then
Unload frmDoc
Set frmDoc = Nothing
End If
Next
'Thoat cua so cha
Unload Me
End Sub
Trò chơi Puzzle số
PNH-HUT306
Trò chơi Puzzle số
Di chuyển c|c ô số để được kết quả sắp 
xếp cuối cùng
PNH-HUT307
Chương 11.
Lập trình Cơ sở dữ liệu
PNH-HUT308
9/14/2011
78
CSDL trong ứng dụng quản lý
Mô hình ứng dụng quản lý CSDL
PNH-HUT309
CSDL trong ứng dụng quản lý
C|c th{nh phần: (mô hình 3 lớp)
PNH-HUT310
Kỹ thuật ADODB trong VB6
ADODB (ActiveX Data Object DB)
Sử dụng:
PNH-HUT311
C|c đối tượng trong ADODB
Connection: Quản lý kết nối
Command 
RecordSet
Field
Parameter
PNH-HUT312
9/14/2011
79
Kết nối Data Source
PNH-HUT313
Đối tượng Connection
PNH-HUT314
Đối tượng Connection
PNH-HUT315
Đối tượng Connection
PNH-HUT316
9/14/2011
80
Đối tượng Connection
PNH-HUT317
Đối tượng Connection
PNH-HUT318
Ví dụ Kết nối CSDL
PNH-HUT319
Đóng kết nối
PNH-HUT320
9/14/2011
81
Thao t|c dữ liệu
PNH-HUT321
Minh họa thao t|c dữ liệu
PNH-HUT322
Đối tượng Command
PNH-HUT323
Đối tượng Command
Thực hiện truy vấn Thêm (Insert), Cập nhật 
(Update) tương tự
PNH-HUT324
9/14/2011
82
Đối tượng Command
Thực hiện c}u truy vấn SELECT
PNH-HUT325
„Khai báo đối tượng RecordSet để chứa kết quả
Dim rs As New ADODB.RecordSet
„Khai báo đối tượng Command
Dim cmd As New ADODB.Command
cmd.ActiveConnection = con „Kết nối đang mở
cmd.CommandText = câu truy vấn chọn
cmd.CommandType = adCmdText
„Thực hiện truy vấn
Set rs = cmd.Execute
Đối tượng RecordSet
Thực hiện c}u truy vấn SELECT
PNH-HUT326
„Khai báo đối tượng RecordSet
Dim rs As New ADODB.RecordSet
„Khai báo đối tượng Command
Dim cmd As New ADODB.Command
cmd.ActiveConnection = con „Kết nối đang mở
cmd.CommandText = câu truy vấn chọn
cmd.CommandType = adCmdText
„Thực hiện truy vấn chọn 
rs.Open cmd
C|c phương thức duyệt bản ghi
Về đầu danh 
sách:
 rs.MoveFirst
Về cuối danh 
sách:
 rs.MoveLast
Bản ghi tiếp theo: 
 rs.MoveNext
Bản ghi trước:
 rs.MovePrevious
PNH-HUT327
Đếm số bản ghi:
rs.RecordCount
Di chuyển đến bản ghi 
có chỉ số index
rs.Move(index)
Đọc thông tin c|c trường bản ghi
Đối tượng rs (RecordSet) nắm dữ tập hợp c|c bản 
ghi. Tại mỗi thời điểm, có một bản ghi được chọn.
Lấy thông tin c|c trường dữ liệu của một bản ghi:
 rs.Fields(index) ‘Chỉ số trường tính từ 0
 rs.Fields(“Tên trường”)
 rs!Têntrường
PNH-HUT328
9/14/2011
83
Đối tượng RecordSet
PNH-HUT329
Tiếng Việt trong Visual Basic
PNH-HUT330
Tiếng Việt VB6
Bảng mã ANSI (ACII mở rộng), dùng đủ 8 bit với 
256 ký tự, bao gồm cả 128 kí tự trong m~ ASCII 
chuẩn. C|c kí tự sau l{ c|c phép to|n, c|c chữ có 
dấu v{ c|c kí tự để trang trí.
(Mở công cụ Character Map của Window, chọn 
font Fixedsys, trật tự c|c ký tự hiện ra ấy chính l{ 
bảng m~ ANSI)
VB6 chuẩn hoạt động với bảng m~ ANSI: Ta có 
thể gõ trong môi trường code c|c ký tự HOA có 
dấu sau: À Á Â Ã È É Ê Ì Í Ò Ó Ô Õ Ù Ú Ý kèm c|c 
chữ thường.
PNH-HUT331
Tiếng Việt VB6
Môi trường chuẩn VB6 không hỗ trợ tiếng Việt 
Unicode. Người ta thường dùng bảng m~ 1 byte 
của Việt nam để thay thế.
Tiếng Việt cho điều khiển:
 Thiết lập thuộc tính Font: Chọn kiểu Font Việt Nam 1 
byte (.VnTime, .VnTimeH, )
 Sử dụng bộ gõ TCVN3, kiểu gõ Telex
Với môi trường Code: 
* C|c ký tự có dấu phức tạp, ta dùng kèm h{m 
ChrW, ví dụ từ 'lên lớp' : Msgbox "lên l" & 
ChrW(7899) & "p“ 
Dùng Character Map để tra m~ những ký tự có dấu
PNH-HUT332
9/14/2011
84
Sử dụng điều khiển Unicode viết sẵn
Với C|c Control:
* Dùng c|c control do c|c t|c giả người Việt 
viết sẵn, ví dụ dùng bộ 
Unicode Full Controls của t|c giả DQHung
(UnicodeFullControls.ocx)
PNH-HUT333
Sử dụng điều khiển Unicode
Dùng bộ controls MS Form 2.0 của 
Microsoft, chọn c|c font nhóm Unicode, 
dùng hàm convert ChrW$() cho những ký 
tự có dấu tiếng việt m{ VB không hỗ trợ.
PNH-HUT334
VB (version 2005, 2008, 2010)
Công nghệ .NET framework
Đ~ hỗ trợ tiếng Việt Unicode cả trên điều 
khiển v{ môi trường code
Chọn kiểu gõ Unicode, Font chữ thường 
dùng: Arial, Times New Roman, 
PNH-HUT335