SlideShare ist ein Scribd-Unternehmen logo
1 von 55
Downloaden Sie, um offline zu lesen
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

Chương I: T ng Quan V Visual Basic .NET
M c tiêu:
Gi i thi u v môi trư ng phát tri n Visua Basic .NET, giúp cho sinh viên
có cái nhìn t ng quan v VB .NET
K t thúc chương này sinh viên c n ph i n m b t các v n đ sau:
S d ng môi trư ng VB .NET đ phát tri n m t s
ng d ng cơ b n
Cách t o d án m i trong VB .NET
1. Cài đặt Visual Studio .Net
Bạn nên có CPU Pentium III, 500MHz trở lên, với 256 MB RAM và ít nhất 10GB
Harddisk. Về OS bạn nên dùng Windows 2000 (Professional hay Server) hay Windows
XP. Lý do chính là các versions Windows nầy hổ trợ Unicode và có Internet Information
Server (IIS) hổ trợ ASPX để ta dùng cho ASP.NET.
Visual Studio.NET nằm trong 3 CDs, gồm có 4 files:
• EN_VS_NET_BETA2_WINCUP.exe
• EN_VS_NET_BETA2_CD1.exe
• EN_VS_NET_BETA2_CD2.exe
• EN_VS_NET_BETA2_CD3.exe
Chạy EN_VS_NET_BETA2_WINCUP.exe để Unzip nó vào một folder trong một
harddisk (eg: E:CDWINCUP) .
Lần lượt chạy EN_VS_NET_BETA2_CD1.exe, EN_VS_NET_BETA2_CD2.exe và
EN_VS_NET_BETA2_CD3.exe để Unzip chúng vào chung một folder trong một
harddisk (eg: E:CD ).
Việc Unzip files có thể rất lâu, bạn phải kiên nhẫn chờ cho đến khi nó kết thúc. Nếu
không, khi cài đặt có thể bị báo lỗi là thiếu files.
Kế đó, trước hết chạy Setup.exe của Windows Component Update như dưới đây,
click No khi Warning dialog
hiện ra:

Tiếp theo, chạy Setup.exe của Visual Studio.NET để cài đặt. Đây là Visual
Studio .Net 2003
Cài đặt Visua Studio .Net 2005. Phiên bản này có 3 đĩa CD. Ta cũng chạy các file
trên 3 đĩa để giải nén vào một thư mục trên ổ đĩa cứng. Sau khi giải nén xong sẽ có hai
thư mục chính: thư mục VS (chứa các file cài đặt bộ Visual Studio .Net 1.17GB) và thư
mục MSDN (chứa các thư viện hỗ trợ cho việc sử dụng Visual Studio .Net 1.55GB).
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

Để cài đặt ta vào thư mục VS chạy file Setup.exe để cài đặt, quá trình cài chiếm một
khoảng thời gian tùy vào cấu hình máy (trung bình từ 15 – 20 phút). Ở đây chúng ta nên
cài đặt bộ Visual Studio 2005
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

2. .NET Framework
.NET được developed từ đầu năm 1998, lúc đầu có tên là Next Generation
Windows Services (NGWS). Nó được thiết kế hoàn toàn từ con số không để dùng cho
Internet.
.NET đại diện cho toàn bộ các công nghệ và các khái niệm cấu thành một nền tảng
để người lập trình xây dựng các ứng dụng trên nó.
Có thể hiểu .NET là một lớp tồn tại bên dưới các ứng dụng và cung cấp một tập các
chức năng và dịch vụ cơ bản.
.NET framework cung cấp 2 thành phần chính: các lớp cơ sở (NET. Framework
base class) và sử dụng ngôn ngữ chung (Common Language Runtime). .NET framework
cũng cung cấp một tập các hàm API của riêng nó để giúp cho lập trình tận dụng được hết
khả năng của nó.
• Gi i h n c a VB 6.0
Biên soạn: Nguyễn Vũ Duy Quang

• Các thành phần chính của .Net FrameWork

Visual Basic .NET
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

.NET application được chia ra làm hai loại: cho Internet gọi là ASP.NET, gồm có
Web Forms và Web Services và cho desktop gọi là Windows Forms. Windows Forms
giống như Forms của VB6. Nó hổ trợ Unicode hoàn toàn, rất tiện cho chữ Việt và thật sự
Object Oriented. Web Forms có những Server Controls làm việc giống như các Controls
trong Windows Forms, nhất là có thể dùng codes để xử lý Events y hệt như của Windows
Forms. Điểm khác biệt chánh giữa ASP (Active Server Pages) và ASP.NET là trong
ASP.NET, phần đại diện visual components và code nằm riêng nhau, không lộn xộn như
trong ASP. Ngoài ra ASP.NET code hoàn toàn Object Oriented. Web Services giống như
những Functions mà ta có thể gọi dùng từ các URL trên Internet, thí dụ như Credit Card
authorisation. ADO.NET là một loại cache database nho nhỏ (gọi là disconnected
database) để thay thế ADO. Thay vì application connects vĩnh viễn với database mẹ qua
ADO, application trong .NET làm việc với portable 9 database chỉ chứa một hai tables, là
copy từ database mẹ. Khi nào cần, portable database nầy (ADO.NET) sẽ được reconciled
với database mẹ để update các thay đổi. Hai tables trong ADO.NET có thể được related
nhau trong Master/Details relationship. Vì ADO.NET có chứa original data lẫn data
mới nhất nên Rollback trong ADO.NET rất dễ dàng và nhẹ ký. XML được yểm trợ tối
đa. Nằm phía sau ADO.NET là XML. XML có thể là Table of records trong ADO.NET
hay Tree of nodes trong DOM (Document Object Model). IO được hổ trợ bằng toàn bộ
Stream kể cả Memory Stream và StreamReader/StreamWriter. Thêm vào là
DataFormatting cho Serialisation để chứa Object xuống binary file hay text file. TCP/IP
và http là hai protocols thông dụng nhất trong .NET, nhưng chúng làm việc phía sau sân
khấu giúp ta gọi một remote procedure (nằm trên computer khác) dễ dàng như một local
procedure. Kỹ thuật ấy gọi là Remoting. Security hổ trợ Cryptography, Permissions và
Policy. Diagnostics cho ta Debug và Trace. Threading rất tiện và đơn giản để
implement Lightweight Process. Vấn đề Timing trong .NET program rất linh động, hiệu
quả và chính xác. Việc thiết kế Common Language Runtime nhắm vào các mục tiêu
chính sau đây:
• Việc triển khai đơn giản và nhanh hơn: developers sẽ dành thì giờ quyết định ráp
những software components nào lại với nhau nhiều hơn là lập trình thật sự.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

• Các công tác thiết yếu ("plumbing") như memory management, process
communication .v.v. được lo liệu tự động.
• Các công cụ hổ trợ rất đầy đủ (no more API): .NET Framework Base classes rất
phong phú cho file, network, serialisation, mã hóa, XML, database, v.v..
• Cài đặt đơn giản và an toàn (no more DLL "hell"): chỉ cần xcopy files, giống như
thời vàng son của DOS. Lý do là .NET application chạy trên .NET framework, một khi ta
đã cài .NET framework vào máy rồi thì có đầy đủ mọi .DLL cần thiết. Có lẽ trong tương
lai Microsoft cài .NET framework chung với Windows.
3. Bắt đầu dự án mới:

Vào Start => Programs => Microsoft Visual Studio 2005 => Microsoft Visual
Studio 2005 (như hình trên). Visual Studio sẽ khởi động, nếu là lần đầu tiên khởi động thì
chương trình sẽ hỏi bạn sử dụng ngôn ngữ gì (ở đây chọn Visual Basic). Nếu là lần thứ 2
trở đi thì sẽ xuất hiện giao diện như hình dưới.

Vào File = > New Project. Xuất hiện hộp thoại sau:
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET
chọn loại ứng
dụng sẽ viết

đặt tên cho
dự án

Chọn Visual Basic => Windows => chọn Windows Application trong cửa sổ bên
phải => đặt tên cho Project mới (tên mặc định là WindowsApplication1) => OK

Cửa sổ Solution
chứa các file
chươn trình trình

Cửa sổ
Propertive của
các đối tượng

Các component
trong Toolbox
Form Designer dùng để
thiết kế chương trình

Hộp công cụ (toolbox): chứa các biểu tượng tương ứng với những đối tượng điều
khiển chuNn bao gồm nhãn (label), hộp văn bản (textbox), nút lệnh (button)… Để bật tắt
hộp công cụ ta vào Menu View => Toolbox (Ctrl + Alt + X)
Thực đơn (Menu Bar): cho phép truy cập đến hầu hết các lệnh dùng điều khiển môi
trường phát triển. Menu và các lệnh trên menu làm việc tương ứng như hầu hết nhưng
chương trình Windows thông thường khác.
Thiết kế chương trình (Form Designer): Đây là đối tượng xây các màn hình giao
tiếp của ứng dụng. Khi vừa tạo mới, màn hình giao tiếp sẽ có tên mặc định là Form1.vb
và không chứa đối tượng điểu khiển nào cả, nhiệm vụ của người lập trình là thiết kế các
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

đối tượng điều khiển trên màn hình giao tiếp và sử dụng các dòng lệnh để xử lý các sự
kiện thích hợp cho các đối tượng điều khiển đó.
Solution Explorer: Quản lý các ứng dụng hiển thị các màn hình giao tiếp (Forms),
các Reports và các Module … hiện có của ứng dụng. Ngoài ra, còn cho phép người lập
trình thực hiện nhanh những thao tác như thêm, xóa các đối tượng này khỏi ứng dụng.
Cửa sổ thuộc tính (Propertives): Cho phép định thuộc tính ban đầu cho các đối
tượng bao gồm màn hình giao tiếp (Forms) và các điều khiển (Control)
Cửa sổ lệnh (Code window): Đây là cửa sổ cho phép khai báo các dòng lệnh xử lý
biến cố cho màn hình giao tiếp và các đối tượng trên màn hình giao tiếp. Mặc nhiên cửa
sổ này không được hiển thị, người lập trình có thể nhân nút chuột phải lên màn hình giao
tiếp và chọn View Code để hiển thị khi cần

Lưu chương trình: File => Save All (Click vào biểu tượng 3 đĩa mềm đè lên nhau).
Xuất hiện cửa sổ sau:

Đặt tên cho dự án trong ô Name, chọn đường dẫn lưu dự án trong ô Location, đặt
tên cho Solution (mặc định tên Solution là tên của dự án). Chọn Save để lưu lại
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

4. Mở một dự án đã tồn tại:
Khởi động Visual Studio 2005
Vào menu File => Open Project
Chọn Project muốn mở trong hộp thoại dialog Open => chọn OK.
5. Viết chương trình Visual Basic đầu tay:

Ứng dụng mà chúng ta sắp xây dựng dưới đây mang tên Lucky Seven (số 7 may
mắn), một chương trình mô phỏng máy chơi lô tô.
Giao diện người dùng gồm:
Nút Spin (quay số) khi nhấn vào nút này thì chương trình sẽ chọn ngẫu nhiên 3 số.
Nút End (Kết thúc) khi nhấn nút này thì sẽ thoát khỏi ứng dụng.
Ba đối tượng nhãn (label) có tên lblSoThu1, lblSoThu2, lblSoThu3 dùng để chứa ba
số ngẫu nhiên khi nhấn nút Spin
Một nhãn mang nội dung “Lucky Seven”
Một nhãn dùng để thông báo.
Và một hình (picture) được gán thuộc tính Visible = False (tức là Nn)
Khi nhấn nút Spin sẽ chọn 3 số ngẫu nhiên gán vào 3 nhãn lblSoThu1, lblSoThu2,
lblSoThu3 nếu một trong 3 nhãn này có chứa số 7 thì thông báo “YOU WIN”, cho hiện
hình lên và phát ra một tiếng bíp. Ngược lại, không cho hiện hình và thông báo “YOU
LOSE”
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

6. Chạy chương trình ứng dụng Visual Basic .NET
6.1 Chạy chương trình:
Nhấp chuột vào nút Start

(hoặc nhấn F5) trên thanh công cụ chuNn

6.2 File thực thi .exe
Khi chạy chương trình bằng cách nhấn nút Start
(hoặc nhấn F5) thì chương trình
sẽ tự động tạo file thực thi .exe trong thư mục Debug chứa trong dự án đã tạo
Hoặc vào menu Build => Build + TênDựÁn để dịch thử chương trình vừa tạo
• Lưu ý: Khi chạy chương trình hoặc Build mà còn có lỗi khi viết code (mã lệnh)
thì chương trình sẽ báo lỗi và chỉ ra dòng lệnh có chứa lỗi. Đến khi nào không còn
lỗi thì chương trình mới có thể chạy hoặc Build
• Câu hỏi: Khi tạo ra một file thực thi .exe đem qua một máy khác thì có thể chạy
file .exe này không
7. Bài tập:
a. Thiết kế giao diện

b. Yêu cầu chức năng:
Chương trình gồm 1 ô nhập liệu (textbox) và 3 nút lệnh (button)
khi nhấn nút:
Display: ô nhập liệu hiện lên câu: “Welcome to VB.NET”
Clear: xóa nội dung trong ô nhập liệu
Exit: thoát chương trình.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

Chương II: Bi u M u Và M t S Đi u Khi n
Thông D ng
M c tiêu:
Chương này gi i thi u v m t s đi u khi n cơ b n đ t o nên giao di n
cho các ng d ng cũng như m t s khái ni m trong l p trình v i VB.NET, nh ng
yêu c u t i thi u c n có trong vi c “l p trình s ki n” v i VB.NET
H c xong chương này, sinh viên ph i n m b t đư c các v n đ sau:
• Khái ni m v đi u khi n, thu c tính, phương th c, s ki n.
• Quy t c đ t tên danh bi u trong VB.
• S d ng bi u m u trong thi t k giao di n.
• S d ng đi u khi n ô nh p li u, nút nh n, nhãn, khung.

I. Các khái niệm:
Điều khiển: Các thành phần có sẵn để người lập trình tạo giao diện tương tác với
người dùng. Mỗi điều khiển thực chất là một đối tượng, do vậy nó sẽ có một số điểm đặc
trưng cho đối tượng, chẳng hạn như các thuộc tính, các phương thức & các sự kiện.
Thuộc tính: Các đặc trưng của một điều khiển tạo nên dáng vẻ riêng của mỗi điều
khiển đó.
Phương thức: Các điều khiển có thể thực thi một số tác vụ nào đó, các tác vụ này
được định nghĩa sẵn bên trong các phương thức (còn gọi là chương trình con: hàm & thủ
tục), người lập trình có thể gọi thực thi các phương thức này nếu cần.
Sự kiện: là hành động của người dùng tác động lên ứng dụng đang thực thi.
Thí dụ: - Nhấn phím bất kỳ trên bàn phím.
- Nhấp chuột.
Các thành phần giao diện có khả năng đáp ứng lại sự kiện. Chẳng hạn khi chúng ta
nhấp chuột vào button, lúc đó button nhận biết được sự kiện này; hay như textbox nhận
biết được sự kiện bàn phím tác động lên nó. Một ứng dụng trên Windows thường được
thực hiện nhờ vào việc đáp ứng lại các sự kiện của người dùng.
Lập trình sự kiện: Các thành phần giao diện có khả năng nhận biết được các sự
kiện từ phía người dùng. Tuy nhiên khả năng đáp ứng lại các sự kiện được thực hiện bởi
người lập trình.
Khi một thành phần giao diện được sử dụng, người lập trình phải xác định chính xác
hành động của thành phần giao diện đó để đáp ứng lại một sự kiện cụ thể. Lúc đó người
lập trình phải viết đoạn mã lệnh mà đoạn mã lệnh này sẽ được thực thi khi sự kiện xảy ra.
Chẳng hạn, trong ứng dụng Paint của Windows; khi người sử dụng nhấp chuột vào
nút vẽ hình elip sau đó dùng chuột vẽ nó trên cửa sổ vẽ, một hình elip được vẽ ra.
Trong lập trình sự kiện, một ứng dụng được xây dựng là một chuỗi các đáp ứng lại
sự kiện. Tất cả các hành động của ứng dụng là đáp ứng lại các sự kiện. Do vậy người lập
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

trình cần phải xác định các hành động cần thiết của ứng dụng; phân loại chúng; sau đó
viết các đoạn mã lệnh tương ứng.
Cách xác lập các thuộc tính & các phương thức trong chương trình
<Name của điều khiển>.<Tên thuộc tính>
<Name của điều khiển>.<Tên phương thức>[(<Các tham số>)]
Tên điều khiển (thuộc tính Name)
Đây là thuộc tính xác định tên của điều khiển trong ứng dụng. Tên này được đặt
theo quy tắc:
o Tên có thể dài từ 1 - 256 ký tự.
o Tên phải bắt đầu với ký tự chữ, có thể chữ hoa hay thường.
o Sau ký tự đầu tiên, tên có thể chứa ký tự, số hay dấu gạch dưới.
Ví dụ: Num, StudentCode, Class12A2 là những tên hợp lệ. 345, 7Class là nhữg tên không
hợp lệ.
• Gợi ý cách đặt tên: nên đặt tên theo từng nhóm đối tượng ví dụ textbox thì đặt tên
bắt đầu là txtTenCanDat, label là lblTen, buttom là bttnTen, ComboBox là cboTen, Form
là frmTenForm … để dễ phân biệt khi lập trình.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

II. Biểu mẫu (Form)
II.1. Khái niệm:
Chương trình ứng dụng giao tiếp với người dùng thông qua các biểu mẫu (hay còn
gọi là cửa sổ, xuất phát từ chữ Form hay Windows); các điều khiển (Control) được đặt
lên bên trên giúp cho biểu mẫu thực hiện được công việc đó. Biểu mẫu là các cửa số được
lập trình nhằm hiển thị dữ liệu và nhận thông tin từ phía người dùng.

II.2. Thuộc tính
o Name: thuộc tính này như là một định danh nhằm xác định tên của biểu mẫu là
gì? Ta sẽ sử dụng thuộc tính này để truy xuất đến các thuộc tính khác cùng với phương
thức có thể thao tác được trên biểu mẫu.
o Icon: hình icon được dùng trong thanh tiêu đề của form, nhất là khi form thu
nhỏ lại.
o StartPosition: xác định vị trí ban đầu của form trên màn hình khi form vừa nạp
(Manual,
CenterScreen,
WindowsDefaultLocation,
WindowsDefaultBounds,
CenterParent).
o WindowState: xác định trạng thái ban đầu của form (Normal, Minimized,
Maximized ).
o Text: Văn bản hiển thị trên thanh tiêu đề của form (tương ứng với thuộc tính
cation trong VB6)
o BackgroundImage: xác định tập tin làm hình nền cho form (tương ứng thuộc
tính picture trong VB6).
o BackColor: Màu nền form.
o FormBorderStyle: Kiểu đường viền form.
o Opacity: Cho phép thay đổi độ sáng tối của form, có thể làm mờ form khi hiển
thị. Giá trị mặc định là 100%. Đây là thuộc tính mới so với VB6.
o ControlBox: Cho phép bật/tắt hộp điều khiển thu nhỏ, phóng lớn và đóng. Mặc
định có giá trị là True.
o Cursor: Kiểu con trỏ khi thao tác trên form.
o Font: Chọn Font chữ cho form.
o ForceColor: Chọn màu cho font chữ.
o KeyPreview: Mặc định có thuộc tính là False. Cho phép form nhận các giá trị
nhấn từ bàn phím.
o MaximizeBox: Cho phép bật/tắt nút phóng to trên ControlBox.
o MinimizeBox: Cho phép bật/tắt nút thu nhỏ trên ControlBox.
o Size: thay đổi kích thước form.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

II.3. Phương thức
o Location: di chuyển biểu mẫu đến tọa độ X,Y: Location = new point(X, Y)

II.4. Sự kiện
o Form_Load: Sự kiện này xảy ra mỗi lần ta gọi thể hiện một biểu mẫu. Ta
dùng sự kiện Form_Load để khởi tạo các biến, điều khiển cho các thể hiện của biểu mẫu
này.
o Form_Activate: Mỗi lần một biểu mẫu được kích hoạt (active) thì một sự kiện
Activate phát sinh. Ta thường dùng sự kiện này để cập nhật lại giá trị các điều khiển trên
biểu mẫu.
o Form_FormClosing: Mỗi lần form đóng lại thì sự kiện FormClosing sẽ được
phát sinh. Ta thường dùng sự kiện này để thao tác đến các thành phần khác đang mở
trước khi form được đóng lại.
o Form_Resize: Sự kiện này xảy ra mỗi khi form thay đổi kích thước.
o Form_KeyPress: Sự kiện này xảy ra khi ta nhấn một phím bất kỳ. Ta thường
dùng để kiểm tra các phím vừa nhấn từ bàn phím
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

III. Nhãn (Label)
III.1. 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 họ không thể thay đổi chuỗi ký tự đó một cách trực tiếp.

III.2. Thuộc tính:
o Name: Đây là một tên xác định một định danh, người lập trình có thể thay đổi
tên này theo cách của mình để tiện sử dụng.
o Text: Thuộc tính quy định chuỗi ký tự hiển thị khi ta tạo một điều khiển nhãn.
Khi ta tạo mới một điều khiển thì thuộc tính text có giá trị mặc nhiên là “Label…”.
Ví dụ: Ta muốn tạo một nhãn là “Chào mừng bạn đến với Visual Basic”, ta thay đổi
giá trị của thuộc tính text thành “Chào mừng bạn đến với Visual Basic”.
Ta có thể thay đổi giá trị của thuôc tính text tại thời điểm ứng dụng đang chạy nhờ
vào đoạn mã lệnh đơn giản như sau:
lblThongBao.text = " ã
của điều khiển nhãn mà ta muốn đổi.

i giá tr

text" với lblThongBao là tên

o TextAlign: Vị trí hiển thị chuỗi trên nút.
o BorderStyle: Xác định kiểu đường viền cho nhãn (none, fixsingle, fix3d)
o Font, Fore Color: Quy định kiểu chữ, kích thước, màu hiển thị.
o BackColor: Quy định màu nền của nhãn trong trường hợp không trong suốt.
Chọn backcolor là Transparent trong tab Web của cửa sổ chọn màu để có màu nền giống
với màu đối tượng hoặc đang chứa label.
o Image: Chọn hình cho nhãn.
o Visible: Có giá trị mặc định là True, dùng để Nn hiện khung.
o TabIndex: Số thứ tự của đối tượng trên Form. Ta có thể nhấn phím Tab trên
bàn phím để chuyến đổi qua lại giữa các đối tượng bằng chỉ số Tabindex. Chỉ số nào
được tự động tạo ra khi ta thêm một đối tượng vào Form.

III.3. Phương thức:
o Location: di chuyển nhãn đến tọa độ X,Y: Location = new point( X, Y)

III.4. Sự kiện:
o TextChanged: Xảy ra mỗi khi nhãn thay đổi giá trị.
o Click: Mỗi khi nhãn được chuột nhấp lên, sự kiện này xảy ra.
o DoubleClick: Xảy ra khi người sử dụng nhấp đúp chuột lên điều khiển nhãn.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

IV. Khung (GroupBox)
IV.1. Khái niệm:
Khung là một điều khiển dùng trong việc bố trí giao diện của biểu mẫu một cách
trong sáng và rõ nét. Thông thường các điều khiển cùng phục vụ cho một công việc nào
đó sẽ được đặt trong một khung nhằm làm nổi bật vai trò của chúng.
Khi chúng ta tạo mới một khung để chứa các điều khiển khác, ta có hai cách thực
hiện:
- Tạo khung chứa trước, sau đó đưa các điều khiển vào trong khung chứa. Đây là
cách đơn giản nhất.
- Tạo khung chứa sau khi đã tạo mới các điều khiển, khi đó khung chứa sẽ che mất
các điều khiển, vì vậy ta cần phải đưa khung chứa ra sau các điều khiển bằng cách nhấp
chuột phải và chọn Send to Back. Nhưng đối với cách này, các điều khiển khác không
nằm trên khung chứa. Do vậy ta có thể giải quyết bằng cách cắt (Cut) các điều khiển này
đi, sau đó dán (Paste) vào trong khung chứa.

Hình II.1: Ví dụ về khung chứa Groupbox

IV.2. Thuộc tính:
Khung cũng có các thuộc tính thông dụng như của điều khiển nhãn chẳng hạn như:
Name, Caption,...
o Name: Đây là một tên xác định một định danh, người lập trình có thể thay đổi
tên này theo cách của mình để tiện sử dụng.
o Text: Chuỗi ký tự hiển thị khi ta tạo một điều khiển khung. Khi ta tạo mới một
điều khiển thì thuộc tính text có giá trị mặc nhiên là “GroupBox…”.
o Font, Fore Color: Quy định kiểu chữ, kích thước, màu hiển thị.
o BackColor: Quy định màu nền của khung trong trường hợp không trong suốt.
Chọn backcolor là Transparent trong tab Web của cửa sổ chọn màu để có màu nền giống
với màu đối tượng hoặc đang chứa khung.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

o BackgroundImage: Chọn hình nền cho khung.
o Enable: có giá trị mặc định là True, cho phép hoặc không cho phép kích hoạt
vào khung.
o Visible: có giá trị mặc định là True, dùng để Nn hiện khung.
o TabIndex: Số thứ tự của đối tượng trên Form. Ta có thể nhấn phím Tab trên
bàn phím để chuyến đổi qua lại giữa các đối tượng bằng chỉ số Tabindex. Chỉ số nào
được tự động tạo ra khi ta thêm một đối tượng vào Form.

IV.3. Phương thức:
o Location: di chuyển khung đến tọa độ X,Y: location = new point(X, Y)

IV.4. Sự kiện:
o Click, DblClick: xảy ra khi khung nhận được một thao tác nhấp (nhấp đúp)
chuột.

V. Nút lệnh (Command Button)
V.1. Khái niệm:
Nút lệnh là một điều khiển dùng để bắt đầu, ngắt hoặc kết thúc một quá trình. Khi
nút lệnh được chọn thì nó trông như được nhấn xuống, do đó nút lệnh còn được gọi là nút
nhấn (Push Button). Người sử dụng luôn có thể chọn một nút lệnh nào đó bằng cách nhấn
chuột trên nút lệnh đó.

V.2. Thuộc tính:
o Name: sử dụng như một định danh nhằm xác định tên của nút lệnh.
o Text: Dùng văn bản hiển thị trên nút lệnh.
o TextAlign: Canh vị trí hiển thị chuỗi trên nút.
o BackColor: Định màu nền cho nút.
o Enabled: Trong một biểu mẫu, có thể có nhiều nút lệnh để thực hiện nhiều
công việc khác nhau và tại một thời điểm nào đó ta chỉ được phép thực hiện một số công
việc. Nếu giá trị thuộc tính Enabled là False thì nút lệnh đó không có tác dụng. Giá trị
mặc định của thuộc tính này là True. Ta có thể thay đổi giá trị của thuộc tính tại thời điểm
chạy ứng dụng.
o TabIndex: Số thứ tự của đối tượng trên Form. Ta có thể nhấn phím Tab trên
bàn phím để chuyến đổi qua lại giữa các đối tượng bằng chỉ số Tabindex. Chỉ số nào
được tự động tạo ra khi ta thêm một đối tượng vào Form.
o Font, Fore Color: Quy định kiểu chữ, kích thước, màu hiển thị.
o Image: Chọn hình icon cho nút.
o ImageAlign: Vị trí hiển thị hình trên nút.
o Locked: Khóa hay không khóa điều khiển Button.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

o BackgroundImage: Chọn hình nền cho nút.
o Visible: có giá trị mặc định là True, dùng để Nn hiện nút.

V.3. Phương thức
o Location: di chuyển khung đến tọa độ X,Y: location = new point(X, Y)

V.4. Phương thức
o Click: đây là sự kiện thường xảy ra với nút lệnh. Mỗi khi một nút lệnh được
chọn, sự kiện này được kích hoạt. Do đó, người sử dụng sẽ viết mã các lệnh để đáp ứng
lại sự kiện này.
Ví dụ: Tạo một biểu mẫu có một ô nhập liệu với nhãn là họ tên và một nút lệnh cho
phép đưa ra câu chào người dùng đó.
Private Sub bttnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles bttnOK.Click
MsgBox("Chào mừng bạn " & Trim(txtHoTen.Text) & " đến với VB.Net 2005")
End Sub

Hình II.2: Sử dụng nút lệnh

VI. Ô nhập liệu (TextBox)
VI.1. Khái niệm:
Ô nhập liệu là một điều khiển cho phép nhận thông tin do người dùng nhập vào. Đối
với ô nhập liệu ta cũng có thể dùng để hiển thị thông tin, thông tin này được đưa vào tại
thời điểm thiết kế hay thậm chí ở thời điểm thực thi ứng dụng. Còn thao tác nhận thông
tin do người dùng nhập vào dĩ nhiên là được thực hiện tại thời điểm chạy ứng dụng.

VI.2. Thuộc tính:
o Name: Tên điều khiển textbox.
o BackColor: Định màu nền cho nút.
o Font, Fore Color: Quy định kiểu chữ, kích thước, màu hiển thị.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

o Text: Dùng văn bản hiển thị trên textbox.
o Wordwrap: giá trị True cho phép văn bản dài tự động xuống dòng.
o ReadOnly: Giá trị True chỉ có thể xem văn bản mà không được chỉnh sửa.
o PasswordChar: Ký tự thay thế cho những ký tự được nhập vào textbox.
Thường để nhập mật khNu.
o CharacterCasing: Normal (mặc định), Upper (tự động đổi thành chữ hoa),
Lower (tự động đổi thành chữ thường).
o Multiline: Giá trị True cho phép nhập, hiển thị văn bản trên nhiều dòng.
o Scrollbars: None (mặc định), Horizontal (thanh cuộn ngang) và Vertical (thanh
cuộn dọc), both (cả hai thanh cuộn).
o BorderStyle: Xác định kiểu đường viền bao quanh textbox.

VI.3. Phương thức
o Location: di chuyển khung đến tọa độ X,Y: location = new point(X, Y)
o Focus: Phương thức này nhằm mục đích thiết lập cho điều khiển ô nhập liệu
nhận được Focus, nghĩa là nó sẵn sàng được tương tác bởi người sử dụng.

VI.4. Sự kiện:
o KeyPress: xảy ra khi người sử dụng chương trình nhấn một phím. Đối với điều
khiển TextBox, ta 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. Trong
ví dụ dưới đây, TextBox Text1 sẽ chỉ nhận biết các phím là số (0 - 9), không nhận biết
các phím khác:
Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal
System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
If (e.KeyChar < ChrW(48) Or e.KeyChar > ChrW(57)) Then
e.KeyChar = ChrW(0)
End If
End Sub

e

As

o KeyDown, KeyUp: mỗi sự kiện KeyPress lại cho ta một cặp sự kiện
KeyDown/KeyUp. 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. Trong ví dụ dưới đây, ta hiển thị tên các phím chức năng mà người sử dụng
chương trình nhấn vào:
Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal
System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
If e.KeyCode >= Keys.F1 And e.KeyCode <= Keys.F12 Then
MsgBox("B n v a nh n phím ch c năng: F" & e.KeyCode - 111)
End If
End Sub

e

As
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

CHƯƠNG 3: LẬP TRÌNH CẤU TRÚC TRONG
VISUAL BASIC
M c tiêu:
Chương này gi i thi u v các c u trúc l p trình trong VB; đây là các c u
trúc c t lõi đ xây d ng nên m t chương trình VB.
H c xong chương này, sinh viên ph i n m b t đư c các v n đ sau:
- S d ng môi trư ng l p trình VB đ vi t mã l nh.
- Các ki u d li u trong VB.
- Cách khai báo h ng, bi n trong VB.
- Bi u th c trong VB.
- Các câu l nh đơn cũng như các câu l nh có c u trúc.
- Chương trình con trong VB.
- B y l i trong VB.
Ki n th c có liên quan:
- Cách s d ng môi trư ng phát tri n c a VB.

I. Môi trường lập trình
I.1. Soạn thảo chương trình:
Trong lập trình Visual Basic .NET, cửa sổ mã lệnh (Code) cho phép soạn thảo
chương trình. Cửa sổ này có một số chức năng nổi bật:
o Đánh dấu (Bookmarks): Chức năng này cho phép đánh dấu các dòng lệnh của
chương trình trong cửa sổ mã lệnh để dễ dàng xem lại về sau này. Để bật tắt khả năng
này, chọn Bookmarks từ menu Edit, hoặc chọn từ thanh công cụ Edit.
o Các phím tắt trong cửa sổ mã lệnh:
Chöùc naêng
Xem cửa sổ Code
Xem cửa sổ Object Browser
Tìm kiếm
Thay thế
Tìm tiếp
Tìm ngược
Chuyển đến thủ tục kế tiếp
Chuyển đến thủ tục trước đó
Xem định nghĩa
Cuộn xuống một màn hình
Cuộn lên một màn hình

Phím taét
F7
F2
CTRL+F
CTRL+H
SHIFT+F4
SHIFT+F3
CTRL+DOWN ARROW
CTRL+UP ARROW
SHIFT+F2
CTRL+PAGE DOWN
CTRL+PAGE UP
Biên soạn: Nguyễn Vũ Duy Quang

Nhảy về vị trí trước đó
Trở về đầu của mô-đun
Đến cuối mô-đun

Visual Basic .NET

CTRL+SHIFT+F2
CTRL+HOME
CTRL+END

I.2. Các chức năng tự động:
o Tự động kiểm tra cú pháp (Auto Syntax Check)
Nếu chức năng này không được bật thì khi ta viết một dòng mã có chứa lỗi, VB chỉ
hiển thị dòng chương trình sai với màu đỏ nhưng không kèm theo chú thích gì và tất
nhiên ta có thể viết tiếp các dòng lệnh khác. Còn khi chức năng này được bật, VB sẽ cho
ta biết một số thông tin về lỗi và hiển thị con trỏ ngay dòng chương trình lỗi để chờ ta sửa.
o Gợi nhớ mã lệnh (Code):
Khả năng Auto List Members: Tự động hiển thị danh sách các thuộc tính và phương
thức của 1 điều khiển hay một đối tượng khi ta gõ vào tên của chúng. Chọn thuộc tính
hay phương thức cần thao tác và nhấn phím Tab hoặc Space để đưa nó vào chương trình.

II. Kiểu dữ liệu
II.1. Khái niệm:
Kiểu dữ liệu là một tập hợp các giá trị mà một biến của kiểu có thể nhận và một tập
hợp các phép toán có thể áp dụng trên các giá trị đó.

II.2. Các kiểu dữ liệu cơ sở trong Visual Basic
Kiểu dữ
liệu

Mô tả

Boolean

Gồm 2 giá trị: TRUE & FALSE.

Byte

Các giá trị số nguyên từ 0 đến 255

Short

Các giá trị số nguyên từ -32.678 đến 32.767

Integer

Các giá trị số nguyên từ -2.147.483.648 đến 2.147.483.647

Long

Các giá trị số nguyên từ -9.223.372.036.854.775.808 đến
9.223.372.036.854.775.807 . Kiểu dữ liệu này thường được gọi là số
nguyên dài.

Single

Các giá trị số thực từ -3,402823E+38 đến 1,401298E-45 cho số âm.
1,401298E-45 đến 3,402823E+38 cho các số dương.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

Double

Các giá trị số thực từ -1.79769313486232E+308 đến
1.79769313486232E+308. Kiểu dữ liệu này được gọi là độ chính xác
kép.

Char

Lưu trữ một ký tự.

String

Lưu trữ các chuỗi văn bản, lên đến 2 tỉ ký tự.

Date

Dữ liệu kiểu ngày tháng, có giá trị từ 01/01/100 đến 31/12/9999.

III. Hằng số
III.1. Khái niệm
Hằng số (Constant) là giá trị dữ liệu không thay đổi trong chương trình vào bất cứ
thời điểm nào. Người lập trình có thể định nghĩa một giá trị là một hằng khi khai báo nó.

III.2. Khai báo hằng
Const <tên hằng> [As <kiểu dữ liệu>] = <biểu thức>
Trong đó, tên hằng được đặt giống theo quy tắc đặt tên của điều khiển.
Ví dụ:
Const g = 9.8
Const Num As Integer = 4*5

III) Biến
III.1. 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.
Biến có 2 đăc điểm:
o Mỗi biến có một tên.
o Mỗi biến có thể chứa duy nhất một loại dữ liệu.

III.2. Khai báo
[Public|Private|Static|Dim] <tên biến> [ As <kiểu dữ liệu> ]
Trong đó, tên biến: là một tên được đặt giống quy tắc đặt tên điều khiển. Nếu cần
khai báo nhiều biến trên một dòng thì mỗi khai báo cách nhau dấu phNy (,).
Nếu khai báo biến không xác định kiểu dữ liệu thì biến đó có kiểu Variant.
Khai báo ngầm: Đây là hình thức không cần phải khai báo một biến trước khi sử
dụng. Cách dùng này có vẻ thuận tiện nhưng sẽ gây một số sai sót, chẳng hạn khi ta đánh
nhầm tên biến, VB sẽ hiểu đó là một biến mới dẫn đến kết quả chương trình sai mà rất
khó phát hiện.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

Ví dụ:
Dim Num As Long, a As Single
Dim Age As Integer
Khai báo tường minh: Để tránh rắc rối như đã nêu ở trên, ta nên quy định rằng VB
sẽ báo lỗi khi gặp biến chưa được khai báo bằng dòng lệnh:

IV. Biểu thức
IV.1. Khái niệm
Toán tử hay phép toán (Operator): là từ hay ký hiệu nhằm thực hiện phép tính và xử
lý dữ liệu.
Toán hạng: là giá trị dữ liệu (biến, hằng…).
Biểu thức: 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 đó.

IV.2. Các loại phép toán
a. Các phép toán số học: Thao tác trên các giá trị có kiểu dữ liệu số.
Phép
toán
+
*

Phép lấy số đối
Phép cộng hai số
Phép trừ hai số
Phép nhân hai số

Kiểu số (Integer, Single…)
Kiểu số (Integer, Single…)
Kiểu số (Integer, Single…)
Kiểu số (Integer, Single…)

/

Phép chia hai số

Kiểu số (Integer, Single…)


Mod
^

Ý nghĩa

Kiểu của đối số

Phép chia lấy phần
nguyên
Phép chia lấy phần dư
Tính lũy thừa

Integer, Long

Kiểu của kết
quả
Như kiểu đối số
Như kiểu đối số
Như kiểu đối số
Như kiểu đối số
Single hay
Double
Integer, Long

Integer, Long
Integer, Long
Kiểu số (Integer, Single…) Như kiểu đối số

b. Các phép toán quan hệ Đây là các phép toán mà giá trị trả về của chúng là một giá trị

kiểu Boolean (TRUE hay FALSE).
Phép toán
=
<>
>
<
>=
<=

Ý nghĩa
So sánh bằng nhau
So sánh khác nhau
So sánh lớn hơn
So sánh nhỏ hơn
So sánh lớn hơn hoặc bằng
So sánh nhỏ hơn hoặc bằng
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

c. Các phép toán Logic: là các phép toán tác động trên kiểu Boolean và cho kết quả là kiểu
Boolean. Các phép toán này bao gồm AND (và), OR (hoặc), NOT (phủ định). Sau đây là
bảng giá trị của các phép toán:

X
TRUE
TRUE
FALSE
FALSE

Y
TRUE
FALSE
TRUE
FALSE

X AND Y
TRUE
FALSE
FALSE
FALSE

X OR Y
TRUE
TRUE
TRUE
FALSE

NOT X
FALSE
FALSE
TRUE
TRUE

IV.3. Các hàm xây dựng sẵn:
a. Hàm chuyển đổi:
Hàm
Cbool
Cbyte
Cchar
Cdate
CDbl
Cint
CLng
CSht
CStr
Ctype

Mô tả
Chuyển đổi thành một giá trị Boolean. Tất cả các giá trị là False hay 0
sẽ được chuyển thành False; Các giá trị khác sẽ chuyển thành True
Chuyển thành một byte. Tất cả các giá trị lớn hơn 255, hay phần thập
phân sẽ bị mất.
Chuyển thành một ký tự đơn. Nếu giá trị lớn hơn 65.535 thì nó sẽ bị
mất. Nếu chuyển một chuỗi, thì chỉ có ký tự đầu tiên được chuyển.
Chuyển thành một ngày.
Chuyển thành giá trị Double.
Chuyển thành một số Interger. Phần thập phân được làm tròn.
Chuyển thành một số Long. Phần thập phân được làm tròn.
Chuyển thành một số Short. Phần thập phân được làm tròn.
Chuyển thành một chuỗi. Nếu giá trị là Date thì kết quả là chuỗi định
dạng là Short Date.
Chuyển thành bất kỳ kiểu nào. Cú pháp của hàm này hơi khác so với
các hàm trên.
NewVariable = Ctype(OldVariable, NewType)
OldVariable là biến chứa giá trị cần chuyển, NewVariable là biến lưu
giá trị sau khi chuyển đổi, NewType là kiễu dữ liệu mới cần chuyển.

b. Hàm toán học
Các hàm này được cung cấp trong lớp System.Math. Để sử dụng được lớp này ta phải
khai báo phía trên đầu của cửa sổ Code Editor, bên trên phát biểu Public Class TênForm
dòng lệnh sau:
Imports System.Math
ABS(n) : Trả về trị tuyệt đối của n.
Atan(n) : Trả về Artang của n (n tính bằng radian).
Cos(n) : Trả về cos của góc n (n tính bằng radian).
Sin(n)
: Trả về sin của góc n (n tính bằng radian).
Tan(n) : Trả về tan của góc n (n tính bằng radian).
Exp(n) : Trả về e mũ n.
Sign(n) : Trả về -1 nếu n<0, 1 nếu n>0 và 0 nếu n=0.
Sqrt(n) : Trả về căn bậc 2 của n.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

c. Hàm xử lý chuỗi:
Len(S)
: Trả về độ dài của chuỗi S. N = len(“Hello”) => N =5.
Chr(N)
: Trả về ký tự có giá trị ASCII hay Unicode là N. S = chr(65) => S=“A”
Asc(Ch) : Trả về giá trị ASCII hay Unicode của ký tự Ch. N=Asc(“A”) => N=65
Lcase(S) : Chuyển tất cả các ký tự trong chuỗi thành chữ thường.
Ucase(S) : Chuyển tất cá các ký tự trong chuỗi thành chữ in hoa.
Ltrim(S) : Bỏ tất cả các khoản trắng đứng trước chuỗi.
S = Ltrim(“ Hello ”) => S = “Hello ”
Rtrim(S) : Bỏ tất cả các khoản trắng đứng sau chuỗi.
S = Rtrim(“ Hello ”) => S = “ Hello”
Trim(S)
: Bỏ tất cả các khoản trắng đứng trước và sau chuỗi.
S = Trim(“ Hello ”) => S = “Hello”
d. Các hàm hữu dụng khác:
IsArray
: Trả về True nếu tham số truyền vào là một mảng
N = IsArray(a) => N = True nếu a là mảng.
IsDate
: Trả về True nếu thám số truyền vào là một ngày.
IsNumeric : Trả về True nếu tham số truyền vào là một số.
IsObject : Trả vể True nếu tham số truyền vào là một kiểu đối tượng.
TypeName : Trả về tên kiểu dữ liệu của tham số.
Now
: Trả về ngày giờ hiện tại.
Today
: Trả về ngày hiện tại với thời gian là 0:00:00 am.

V. Câu lệnh
Một câu lệnh (statement) xác định một công việc mà chương trình phải thực hiện để
xử lý dữ liệu đã được mô tả và khai báo. Các câu lệnh được ngăn cách với nhau bởi ký tự
xuống dòng. Ký tự xuống dòng báo hiệu kết thúc một câu lệnh.

V.1. Lệnh gán
Cú pháp:
<Tên biến> = <Biểu thức>
Ví dụ:
Giả sử ta có khai báo sau:
Dim TodayTemp As Single, MinAge As Integer
Dim Sales, NewSales As Single, FullName As String

Các lệnh sau gán giá trị cho các biến trên:
TodayTemp = 30.5
MinAge = 18
Sales = 200000
NewSales = Sales * 1.2

Giả sử người dùng cần nhập họ và tên vào ô nhập liệu TextBox có thuộc tính Name
là txtName, câu lệnh dưới đây sẽ lưu giá trị của ô nhập liệu vào trong biến FullName:
FullName = txtName.Text

Lưu ý: Kiểu dữ liệu của biểu thức (vế phải của lệnh gán) phải phù hợp với biến ta
cần gán trị.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

V.2. Lệnh rẽ nhánh If
o Một dòng lệnh:
If <điều kiện> Then <Lệnh 1> [Else <Lệnh 2>]
o Nhiều dòng lệnh:
If <điều kiện> Then
Nhóm lệnh 1
[Else
Nhóm lệnh 2]
End If
o Dạng đầy đủ
If <điều kiện 1> Then
Nhóm lệnh 1
ElseIf <điều kiện 2> Then
Nhóm lệnh 2
…
ElseIf <điều kiện n> Then
Nhóm lệnh n
[Else
Nhóm lệnh n+1]
End If
Lưu đồ cú pháp:

Đúng

Đ.Kiện

Sai

Sai
(Không có Else)

Nhóm lệnh1

Nhóm lệnh 2

Trong đó, <điều kiện>: biểu thức mà kết quả trả về kiểu Boolean.
Ý nghĩa câu lệnh: Nhóm lệnh hay lệnh sẽ được thi hành nếu như điều kiện là đúng.
Còn nếu như điều kiện là sai thì VB sẽ kiểm tra các điều kiện, nếu điều kiện nào đúng thì
khối lệnh tương ứng sẽ được thi hành. Ngược lại nếu không có điều kiện nào đúng thì
khối lệnh sau từ khóa Else sẽ được thi hành.
Ví dụ: Tính số lớn nhất trong hai số (Như hình)
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

Yêu cầu: Hoàn thành bài tập Giải PT bậc 1 và Giải PT bậc 2

V.3. Lệnh lựa chọn Select Case
Trong trường hợp có quá nhiều các điều kiện cần phải kiểm tra, nếu ta dùng cấu
trúc rẽ nhánh If…Then thì đoạn lệnh không được trong sáng, khó kiểm tra, sửa đổi khi
có sai sót. Ngược lại với cấu trúc Select…Case, biểu thức điều kiện sẽ được tính toán
một lần vào đầu cấu trúc, sau đó VB sẽ so sánh kết quả với từng trường hợp (Case). Nếu
bằng nó thi hành khối lệnh trong trường hợp (Case) đó.
Select Case <biểu thức kiểm tra>
Case <Danh sách kết quả biểu thức 1>
[Khối lệnh 1]
Case <Danh sách kết quả biểu thức 2>
[Khối lệnh 2]
...
[Case Else
[Khối lệnh n]]
End Select
Mỗi danh sách kết quả biểu thức sẽ chứa một hoặc nhiều giá trị. Trong trường hợp
có nhiều giá trị thì mỗi giá trị cách nhau bởi dấu phNy (,). Nếu có nhiều Case cùng thỏa
điều kiện thì khối lệnh của Case đầu tiên sẽ được thực hiện.
Toán tử Is & To
Toán tử Is: Được dùng để so sánh <Biểu thức kiểm tra> với một biểu thức nào đó.
Toán tử To: Dùng để xác lập miền giá trị của <Biểu thức kiểm tra>.
Ví dụ:
Select Case Tuoi
Case Is < 18
MsgBox("V thành niên.")
Case 18 To 30
MsgBox(" ã trư ng thành, l p gia ình ư c r i.")
Case 31 To 60
MsgBox("B n ang
l a tu i trung niên")
Case Else
MsgBox("B n ã l n tu i, ngh hưu ư c r i
y!")
End Select

Lưu ý: Trong ví dụ trên không thể viết Case Tuoi < 18.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

Ví dụ: Tính số ngày trong tháng của năm.
Select Case Thang
Case 1, 3, 5, 7, 8, 10, 12
MsgBox("Có 31 ngày.")
Case 2
If nam Mod 4 = 0 Then
MsgBox("Có 29 ngày.")
Else
MsgBox("Có 28 ngày.")
End If
Case 4, 6, 9, 11
MsgBox("Có 30 ngày.")
Case Else
MsgBox("Giá tr không h p l !")
End Select

Bài tập làm thêm: Viết chương trình nhập vào một năm dương lịch và đổi thành
năm âm lịch.

V.4. Cấu trúc lặp
Các cấu trúc lặp cho phép thi hành một khối lệnh nào đó nhiều lần.
a. Lặp không biết trước số lần lặp
Do ... Loop: Đây là cấu trúc lặp không xác định trước số lần lặp, trong đó, số
lần lặp sẽ được quyết định bởi một biểu thức điều kiện. Biểu thức điều kiện phải có kết
quả là True hoặc False. Cấu trúc này có 4 kiểu:
o Kiểu 1:
Do While <điều kiện>
<khối lệnh>
Loop
Khối lệnh sẽ được thi hành đến khi nào điều kiện không còn đúng nữa. Do biểu
thức điều kiện được kiểm tra trước khi thi hành khối lệnh, do đó có thể khối lệnh sẽ
không được thực hiện một lần nào cả.
o Kiểu 2:
Do
<khối lệnh>
Loop While <điều kiện>
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

Khối lệnh sẽ được thực hiện, sau đó biểu thức điều kiện được kiểm tra, nếu điều
kiện còn đúng thì, khối lệnh sẽ được thực hiện tiếp tục. Do biểu thức điều kiện được kiểm
tra sau, do đó khối lệnh sẽ được thực hiện ít nhất một lần.
o Kiểu 3:
Do Until <điều kiện>
<khối lệnh>
Loop
Cũng tương tự như cấu trúc Do While ... Loop nhưng khác biệt ở chỗ là khối lệnh
sẽ được thi hành khi điều kiện còn sai.
o Kiểu 4:
Do
<khối lệnh>
Loop Until <điều kiện>
Khối lệnh được thi hành trong khi điều kiện còn sai và có ít nhất là một lần lặp.
Ví dụ: Đoạn lệnh dưới đây cho phép kiểm tra một số nguyên N có phải là số nguyên
tố hay không?
Dim i As Integer
i = 2
Do While (i <= Sqrt(N)) And (N Mod i = 0)
i = i + 1
Loop
If (i > Sqrt(N)) And (N <> 1) Then
MsgBox(N & " la so nguyen to")
Else
MsgBox(N & " khong la so nguyen to")
End If

b. Lặp biết trước số lần lặp
For ... Next Đây là cấu trúc biết trước số lần lặp, ta dùng biến đếm tăng dần
hoặc giảm dần để xác định số lần lặp.
For <biến đếm> = <điểm đầu> To <điểm cuối> [Step <bước nhảy>]
[khối lệnh]
Next
Biến đếm, điểm đầu, điểm cuối, bước nhảy là những giá trị số (Integer, Single,…).
Bước nhảy có thể là âm hoặc dương. Nếu bước nhảy là số âm thì điểm đầu phải lớn hơn
điểm cuối, nếu không khối lệnh sẽ không được thi hành.
Khi Step không được chỉ ra, VB sẽ dùng bước nhảy mặc định là một.
Ví dụ: Tính N!
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

For Each ... Next Tương tự vòng lặp For ... Next, nhưng nó lặp khối lệnh theo
số phần tử của một tập các đối tượng hay một mảng thay vì theo số lần lặp xác định.
Vòng lặp này tiện lợi khi ta không biết chính xác bao nhiêu phần tử trong tập hợp.
For Each <phần tử> In <nhóm>
<khối lệnh>
Next <phần tử>
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.

VI. Biến:
o khái niệm Module: - Một ứng dụng đơn giản có thể chỉ có một biểu mẫu, lúc đó tất
cả mã lệnh của ứng dụng đó được đặt trong cửa sổ mã lệnh của biểu mẫu đó (gọi là Form
Module). Khi ứng dụng được phát triển lớn lên, chúng ta có thể có thêm một số biểu mẫu
nữa và lúc này khả năng lặp đi lặp lại nhiều lần của một đoạn mã lệnh trong nhiều biểu
mẫu khác nhau là rất lớn.
- Để tránh việc lặp đi lặp lại trên, ta tạo ra một Module riêng rẽ chứa các chương
trình con được dùng chung.

VI.1. Biến toàn cục
o Khái niệm: Biến toàn cục là biến có phạm vi hoạt động trong toàn bộ ứng
dụng.
o Khai báo:
Global <Tên biến> [As <Kiểu dữ liệu>]
VI.2. Biến cục bộ
o Khái niệm: Biến cục bộ là biến chỉ có hiệu lực trong những chương trình mà
chúng được định nghĩa.
o Khai báo:
Dim <Tên biến> [As <Kiểu dữ liệu>]
o Lưu ý: Biến cục bộ được định nghĩa bằng từ khóa Dim sẽ kết thúc ngay khi việc
thi hành thủ tục kết thúc.
Xét VD:
Public Class Form1
Dim KQ As Double = 1
Dim i As Integer
Function GiaiThua(ByVal n As Integer) As Double
For i = n To 1 Step -1
KQ *= i
Next
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

Return KQ
End Function
Private Sub bttnGiaiThua_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles bttnGiaiThua.Click
txtKQ.Text = txtSoN.Text & "! = " & GiaiThua(txtSoN.Text)
End Sub
Private Sub bttnTongGiaiThua_Click(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles bttnTongGiaiThua.Click
For i = 1 To CInt(txtSoN.Text)
KQ = KQ + GiaiThua(i)
Next
txtKQ.Text = "T ng các giai th a t 1
n " & txtSoN.Text & " = " & KQ
End Sub
End Class

Tìm xem các lỗi có thể xảy ra với đoạn mã trên.

VI.3. Biến Module
o Khái niệm: Biến Module là biến được định nghĩa trong phần khai báo
(General|Declaration) của Module và mặc nhiên phạm vi hoạt động của nó là toàn bộ
Module ấy.
o Khai báo:
- Biến Module được khai báo bằng từ khóa Dim hay Private & đặt trong phần
khai báo của Module.
Ví dụ:
Private Num As Integer

- Tuy nhiên, các biến Module này có thể được sử dụng bởi các chương trình
con trong các Module khác. Muốn thế chúng phải được khai báo là Public trong phân
Khai báo (General|Declaration) của Module.
Ví dụ:
Public Num As Integer

Lưu ý: Không thể khai báo biến với từ khóa là Public trong chương trình con.
Bài tập: Viết một chương trình mã hóa nội dung văn bản.

VI.4. Truyền tham số cho chương trình con
o Khái niệm
Một chương trình con đôi lúc cần thêm một vài thông tin về trạng thái của đoạn
mã lệnh mà nó định nghĩa để thực thi. Những thông tin này là các biến được truyền vào
khi gọi chương trình con, các biến này gọi là tham số của 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ị (tham
trị) & truyền bằng địa chỉ (tham chiếu).
o Truyền tham số bằng giá trị
Với cách truyền tham số theo cách này, mỗi khi một tham số được truyền vào,
một bản sao của biến đó được tạo ra. Nếu chương trình con có thay đổi giá trị, những
thay đổi này chỉ tác động lên bản sao của biến. Từ khóa ByVal được dùng để xác định
tham số được truyền bằng giá trị.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

Ví dụ:
Sub Twice(ByVal Num As Integer)
Num = Num * 2
MsgBox(Num)
End Sub

Private Sub Form1_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Click
Dim A As Integer
A = 4
MsgBox(A)
Twice(A)
MsgBox(A)
End Sub

Kết quả thực hiện của đoạn chương trình trên: ? ? ?
o Truyền tham số bằng địa chỉ
Truyền tham số theo đị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ớ. Vì thế, giá trị của biến có thể sẽ bị thay đổi bởi đoạn mã lệnh
trong chương trình con. Từ khóa ByRef được dùng để xác định tham số được truyền theo
địa chỉ.
Ví dụ:
Sub Twice(ByRef Num As Integer)
Num = Num * 2
MsgBox(Num)
End Sub
Private Sub Form1_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Click
Dim A As Integer
A = 4
MsgBox(A)
Twice(A)
MsgBox(A)
End Sub

Kết quả thực hiện của đoạn chương trình trên: ? ? ?

VII. Bẫy lỗi trong Visual Basic
Các thao tác bẫy các lỗi thực thi của chương trình là cần thiết đối với các ngôn ngữ
lập trình. Người lập trình khó kiểm soát hết các tình huống có thể gây ra lỗi. Chẳng hạn
người ta khó có thể kiểm tra chặt chẽ việc người dùng đang chép dữ liệu từ đĩa mềm (hay
CD) khi chúng không có trong ổ đĩa. Nếu có các thao tác bẫy lỗi ở đây thì tiện cho người
lập trình rất nhiều.
Visual Basic cũng cung cấp cho ta một số cấu trúc để bẫy các lỗi đang thực thi.
Cú pháp:
Dạng 1:
On Error GoTo <Tên nhãn>
<Các câu lệnh có thể gây ra lỗi>
<Tên nhãn>:
<Các câu lệnh xử lý lỗi>
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

Ý nghĩa:
- <Tên nhãn>: là một tên được đặt theo quy tắc của một danh biểu.
- Nếu một lệnh trong <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 đó, chương trình sẽ tự động nhảy đến đoạn chương trình định
nghĩa bên dưới <Tên nhãn> để thực thi.
Dạng 2:
On Error Resume Next
<Các câu lệnh có thể gây ra lỗi>
Ý 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 đó, chương trình sẽ tự động bỏ qua câu lệnh bị lỗi và thực thi
câu lệnh kế tiếp.
Dạng 3:
Try

<Các câu lệnh có thể gây ra lỗi>

Catch ex as exception

<Các câu lệnh xử lý lỗi>

End
Ý nghĩa:
- ex: là một biến chứa các mã lỗi và câu thông báo lỗi.

- 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 đó, chương trình sẽ tự động nhảy đến đoạn chương trình sau
Catch <Các câu lệnh xử lý lỗi> để thực thi. Nếu có xảy ra lỗi thì chương trình sẽ
không thực thi các đoạn lệnh sau Catch và kết thúc End.

VIII. Kiểu Mảng
VIII.1. 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 mảng sẽ làm cho chương trình đơn giản và gọn hơn vì ta có thể sử dụng
vòng lặp. 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.

VIII.2. Khai báo
o Mảng có chiều dài cố định:
Dim <Tên biến mảng>(<Kích thước>) [As <Kiểu>]
Lúc này phần tử đầu tiên có chỉ số là 0 & phần tử cuối cùng có chỉ số là <Kích thước>.
Dim <Tên biến mảng>(<Chỉ số đầu> To <Chỉ số cuối>) [As <Kiểu>]
Ví dụ:
Khai báo một biến mảng 15 phần tử kiểu Integer
Dim Counters(14)As Integer

Khai báo một biến mảng 10 phần tử kiểu chuỗi ký tự
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

Dim List (1 To 10) As String

- Hàm UBound trả về biên trên của một mảng.
- Hàm LBound trả về biên dưới của một mảng.
o Mảng động: - Đây là mảng có kích thước thay đổi, đó là một trong những ưu
điểm của mảng động vì nó giúp ta tiết kiệm tài nguyên hệ thống. Ta có thể sử dụng một
mảng có kích thước lớn trong một thời gian nào đó rồi xoá bỏ để trả lại vùng nhớ cho hệ
thống.
- Khai báo một mảng động bằng cách cho nó một danh sách không theo chiều nào
cả. Cú pháp: Dim <Tên mảng> () [As <Kiểu>]
Ví dụ:
Dim DynArray() As Integer

Sau đó ta có thể cấp phát số phần tử thật sự bằng lệnh ReDim.
ReDim <Tên mảng>(N) ' Trong đó N là một biểu thức kiểu Integer.
ReDim dùng để xác định hay thay đổi kích thước của một mảng động. Ta có thể
dùng ReDim để thay đổi số phần tử, số chiều của một mảng nhiều lần nhưng không thể
thay đổi kiểu dữ liệu của mảng ngoại trừ kiểu mảng là kiểu Variant.
Mỗi lần gọi ReDim tất cả các giá trị chứa trong mảng sẽ bị mất. VB khởi tạo lại giá
trị cho chúng (Empty đối với mảng Variant, 0 cho mảng kiểu số, chuỗi rỗng cho mảng
chuổi hoặc Nothing cho mảng các đối tượng). Nhưng đôi khi ta muốn tăng kích cỡ của
mảng nhưng không muốn làm mất dữ liệu, ta dùng ReDim đi kèm với từ khoá Preserve.
Ta xem ví dụ dưới đây:
ReDim Preserve DynArray (UBound(DynArray) +10)

Tuy nhiên chỉ có biên trên của chiều cuối cùng trong mảng được thay đổi khi ta
dùng Preserve. Nếu ta cố tình thay đổi chiều khác hoặc biên dưới thì VB sẽ báo lỗi.

VIII.3. Một số thao tác trên mảng
o Truy xuất từng phần tử trong mảng: <Tên mảng>(<Vị trí>)
o Sao chép mảng: Đối với VB6, ta có thể gán một mảng cho một mảng khác,
hoặc kết quả trả về của một hàm có thể là một mảng.
Ví dụ:
Sub ByteCopy (old () As Byte, New () As Byte)
New = old
End Sub

Tuy nhiên, cách này cũng chỉ áp dụng được cho mảng khai báo động mà thôi. Khi
gán biến, có một số quy luật mà ta cần lưu ý: Đó là quy luật về kiểu dữ liệu và quy luật
về kích thước và số chiều của mảng.
Bài tập:
1. Sửa lại bài đổi một năm dương lịch sang năm âm lịch dùng mảng.

2. Thiết kế chương trình cho phép nhập vào một số nguyên N; sau đó phân tích số
nguyên này ra thừa số nguyên tố sử dụng mảng động.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

VII. Kiểu do người dùng định nghĩa - Kiểu m u tin
Cú pháp:
Structure <tên kiểu>
Dim <Tên trường 1> : <Kiểu trường 1>
Dim <Tên trường 2> : <Kiểu trường 2>
:
<Tên trường n> : <Kiểu trường n>
End Structure
Ví dụ:
Structure TEmployee
Dim Fullname As String
Dim Salary As Single
Dim Age As Integer
End Structure

Chúng ta vừa định nghĩa một kiểu dữ liệu mới có tên là TEmployee. Kiểu này có nét
tương tự như một lớp. Về mặt chức năng, cả hai là như nhau, nhưng một lớp có thể chứa
trong DLL và sẵn sàng cho việc dùng chung với các ứng dụng khác, trong khi đó kiểu dữ
liệu do người dùng định nghĩa phải được khai báo lại trong từng dự án. Do vậy, kiểu lớp
có nhiều mặt tiện lợi hơn.
Cách truy xuất từng trường của kiểu mNu tin:
<Tên biến m u tin>.<Tên trường>
Ví dụ: Giả sử ta có khai báo biến sau:
Dim e As TEmployee

Ta có thể gán:
e.Fullname = “Nguyen Van An”
e.Salary = 300000.00
e.Age = 26

Câu lệnh With:
- Được sử dụng để viết gọn hơn khi thao tác với dữ liệu kiểu mNu tin.
- Cú pháp:
With <Tên biến mNu tin>
.<Tên trường>
End With
Ví dụ: Dim e As TEmployee
Ta có thể gán:
With e
.Fullname = “Nguyen Van An”
.Salary = 300000.00
.Age = 26
End With
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

CHƯƠNG 5 THIẾT KẾ BIỂU MẪU DÙNG
CÁC ĐIỀU KHIỂN
M c tiêu:
Chương này gi i thi u v các đi u khi n dùng trong vi c t o giao di n cho
các ng d ng ch y trên Windows. Vi c n m b t đư c các v n đ này làm cho
công vi c t o giao di n cho ng d ng đư c nhanh chóng.
H c xong chương này, sinh viên ph i n m b t đư c các v n đ sau:
-S

d ng các đi u khi n h p danh sách, h p l a ch n đ lưu các danh

sách.
- S d ng các đi u khi n h p đánh d u, nút l a ch n đ nh n/hi n th d
li u d ng Yes/No.
- S d ng các đi u khi n h p hình nh, đi u khi n nh đ hi n th nh.
- S d ng đi u khi n thanh cu n đ nh n/hi n th d li u s .
- S d ng đi u khi n th i gian đ đáp ng s trôi đi c a th i gian.
- M t s đi u khi n khác.
Ki n th c có liên quan:
- Các c u trúc l p trình trong VB.
- Cách th c x lý s ki n.

I. Sử dụng các điều khiển
I.1 Điều khiển danh sách các lựa chọn (List Box)
I.1.1. Khái niệm:
Điều khiển này hiển thị một danh sách các đề mục mà ở đó người dùng có thể
chọn lựa một hoặc nhiều đề mục
Điều khiển này hiển thị một danh sách các đề mục mà ở đó người dùng có thể
chọn lựa một hoặc nhiều đề mục
List Box giới thiệu với người dùng một danh sách các lựa chọn. Một cách mặc
định, các lựa chọn hiển thị theo chiều dọc trên một cột và bạn có thể thiết lập là hiển thị
theo nhiều cột. Nếu số lượng các lựa chọn nhiều và không thể hiển thị hết trong danh
sách thì một thanh trượt sẽ tự động xuất hiện trên điều khiển. Dưới đây là một ví dụ về
danh sách các lựa chọn đơn cột.
I.1.2. Thuộc tính:
o Name: Đây là tên của danh sách lựa chọn, được sử dụng như một định
danh.
o SelectionMode: Thuộc tính này cho phép List Box có được phép có
nhiều lựa chọn khi thực thi hay không? Mặc định là One chỉ cho phép chọn một.
o Sort: List Box có sắp xếp hay không?
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

o Ngoài ra còn có một số thuộc tính thông dụng khác như: Font, Width,
Height…
I.1.3. Phương thức:
o Items.Add: Thêm một phần tử vào List Box. Cú pháp:
<Name>.Items.Add(Item As String, [Index])
Tham
số
Name
Item
Index

Diễn giải
Tên của List Box. Nên đặt là lstTên
Biểu thức chuỗi (đề mục) cần thêm vào.
Xác định vị trí đề mục mới được chèn vào, giá trị 0 xác định cho vị trí đầu
tiên. Khi không chỉ định rõ Index thì phần tử thêm vào là mục cuối cùng
trong List Box mới.

o Items.RemoveAt(<Index>): Xóa một phần tử ra khỏi List Box.
Cú pháp: <Name>.Items.RemoveAt (Index)
Tham số Name và Index giống như ở trường hợp thêm vào một đề mục.
o Items.Clear: Xóa tất cả các mục trong List Box. Cú pháp <Name>.Items.lear
o Text: Nhận giá trị từ List Box khi một đề mục được chọn.
o SelectedIndex: trả về vị trí index của mục đang được chọn. Nếu không chọn
mục nào trong ListBox thì giá trị trả về là -1.
o GetSelected(Index): Cho biết mục có vị trí Index có được chọn hay không nếu
được chọn thì trả về True ngược lại trả về False.
I.1.4. Sự kiện:
o Click & Double Click: Xảy ra khi người sử dụng nhấp chuột (hay nhấp đúp)
vào List Box.
Thông thường người sử dụng sẽ thiết kế một nút lệnh đi kèm để nhận về giá trị do
người dùng chọn. Khi đó công việc thực hiện sau khi nút lệnh được chọn sẽ phụ thuộc
vào giá trị người dùng chọn từ List Box.
Double Click lên một đề mục trong danh sách cũng có kết quả tương tự như việc
chọn một đề mục trong danh sách rồi ấn lên nút lệnh. Để thực hiện công việc như trên
trong sự kiện Double Click của List Box ta sẽ gọi đến sự kiện Click của nút lệnh.
Ví dụ: Viết chương trình gồm hai listbox. Một listbox chứa danh sách các loại trái
cây và một danh sách trống. Khi chọn một loại trái cây bất kỳ từ danh sách trái cây và
nhấn nút chuyển sang (> hay >> ) thì trái cây đó sẽ chuyển sang listbox kia và sẽ bị mất
đi trên listbox hiện tại. Như hình:
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

II.2 Điều khiển hộp lựa chọn (Combo Box)
Điều khiển ComboBox có thể được xem là tích hợp giữa hai điều khiển TextBox và
ListBox. Người dùng có thể chọn một đề mục bằng cách đánh chuỗi văn bản vào Combo
Box hoặc chọn một đề mục trong danh sách.
Điểm khác nhau cơ bản giữa ComboBox và ListBox là điều khiển Combo chỉ gợi ý
(hay đề nghị) các lựa chọn trong khi đó điều khiển List thì giới hạn các đề mục nhập vào
tức là người dùng chỉ có thể chọn những đề mục có trong danh sách. Điều khiển Combo
chứa cả ô nhập liệu nên người dùng có thể đưa vào một đề mục không có sẵn trong danh
sách.
Các dạng của điều khiển ComboBox: Có tất cả 3 dạng của điều khiển ComboBox.
Ta có thể chọn dạng của Combo tại thời điểm thiết kế.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

Kiểu
Giá trị
Hằng
Single
ComboBoxStyle.Single
0
Drop down
1
ComboBoxStyle.DropDown
Drop down List
2
ComboBoxStyle.DropDownList
- Single: Người dùng có thể chọn từ danh sách các đề mục đã được hiển thị sẵn ngay bên
dưới ComboBox. Để hiển thị tất cả các đề mục, bạn cần thiết kế Combo đủ lớn. Một
thanh trượt sẽ xuất hiện khi còn đề mục chưa được hiển thị hết.
- Drop down: Đây là dạng mặc nhiên của Combo. Người dùng có thể nhập vào trực tiếp
hoặc chọn từ danh sách các đề mục.
- Drop down List: Dạng này rất giống như một List box. Một điểm khác biệt đó là các đề
mục sẽ không hiển thị đến khi nào người dùng Click lên mũi tên phía phải của điều khiển.
Điểm khác biệt với dạng thứ 2 đó là người dùng không thể nhập vào trực tiếp một chuỗi
không có trong danh sách.
Các thuộc tính cũng như các phương thức áp dụng trên Combo Box giống như trên
List Box.

II.3 Điều khiển hộp đánh dấu (Check Box)
II.3.1. Khái niệm:
Đây là điều khiển hiển thị dấu
nếu như được chọn và dấu
bị xoá nếu như
không chọn. Dùng điều khiển Check Box để nhận thông tin từ người dùng theo dạng
Yes/No hoặc True/False. Ta cũng có thể dùng nhiều điều khiển trong một nhóm để hiển
thị nhiều khả năng lựa chọn trong khi chỉ có một được chọn. Khi Check Box được chọn,
nó có giá trị 1 và ngược lại có giá trị 0.
II.3.2. Thuộc tính:
o Name: thuộc tính tên.
o Checked: Giá trị hiện thời trên Check Box. Có thể nhận các giá trị: Checked
(True), Unchecked (False)
II.3.3. Sự kiện:
o Click: Xảy ra khi người sử dụng nhấp chuột trên Check Box.

II.4 Điều khiển nút lựa chọn (RadioButton)
II.4.1. Khái niệm:
Công dụng của điều khiển Radiobutton cũng tương tự như điều khiển Check Box.
Điểm khác nhau chủ yếu giữa hai loại điều khiển này đó là: Các RadioButton của cùng
một nhóm tại mỗi thời điểm chỉ có một điều khiển nhất định được chọn.
Cách sử dụng Radiobutton cũng tương tự như của Check Box.
Tạo nhóm Radion Button
Tất cả các Radion button đặt trực tiếp trên biểu mẫu (có nghĩa là không thuộc vào
Groupbox hoặc Picture Box) sẽ được xem như là một nhóm. Nếu người dùng muốn tạo
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

một nhóm các Radion button khác thì bắt buộc phải đặt chúng bên trong phạm vi của một
Groupbox hoặc Picture box.
II.4.2. Thuộc tính:
o Name: thuộc tính tên của điều khiển Radion Button.
o Checked: Giá trị hiện thời trên Radion Button. Có thể nhận các giá trị: True &
False.
II.4.3. Sự kiện:
• Click: Xảy ra khi người sử dụng nhấp chuột trên Option Button.

II.5 Điều khiển thanh cuộn ngang (HScrollBar)
II.5.1. Khái niệm:
Là điều khiển có thanh trượt cho phép cuộn ngang và người dùng có thể sử dụng
HScrollBar như một thiết bị nhập hoặc một thiết bị chỉ định cho số lượng hoặc vận tốc.
Ví dụ ta thiết kế volume cho một trò chơi trên máy tính hoặc để diễn đạt có bao nhiêu
thời gian trôi qua trong một khoảng định thời nhất định.
Khi người dùng sử dụng Scroll Bar như một thiết bị chỉ định số lượng thì người
dùng cần xác định giá trị cho hai thuộc tính Max và Min để đưa ra khoảng thay đổi thích
hợp.
II.5.2. Thuộc tính:
o Name: Tên của thanh cuộn.
o Min: Là giá trị nhỏ nhất trên thanh cuộn.
o Max:: Giá trị lớn nhất của thanh cuộn.
o Largechange: Thuộc tính này dùng để xác định khoảng thay đổi khi người
dùng ấn chuột lên Hscrollbar.
o Smallchange: Thuộc tính này dùng để xác định khoảng thay đổi khi người
dùng ấn lên mũi tên phía cuối thanh cuộn.
o Value: Thuộc tính này trả về giá trị tại một thời điểm của thanh cuộn nằm trong
khoảng giá trị [Min, Max] mà người dùng đã xác định.
II.5.3. Sự kiện:
o Scroll: Xảy ra mỗi khi ta di chuyển con trỏ thanh cuộn.
II.5.4. Ví dụ:
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

II.6 Điều khiển thời gian (Timer)
II.6.1. Khái niệm:
Điều khiển Timer đáp ứng lại sự trôi đi của thời gian. Nó độc lập với người sử
dụng và ta có thể lập trình để thực hiện một công việc nào đó cứ sau một khoảng thời
gian đều nhau.
Việc đưa một điều khiển Timer và trong một biểu mẫu cũng tương tự như
những điều khiển khác. Ở đây, ta chỉ có thể quan sát được vị trí của điều khiển Timer tại
giai đoạn thiết kế, khi chạy ứng dụng điều khiển Timer coi như không có thể hiện trên
biểu mẫu.
II.10.2. Thuộc tính:
o Name: tên của điều khiển Timer.
o Interval: Đây là thuộc tính chỉ rõ số ms giữa hai sự kiện kế tiếp nhau. Trừ khi
nó bị vô hiệu hóa, mỗi điều khiển Timer sẽ luôn nhận được một sự kiện sau một khoảng
thời gian đều nhau. Thuộc tính Interval được thiết lập là 1000 (tức 1 giây).
o Enabled: nếu giá trị là True nghĩa là điều khiển Timer được kích hoạt và ngược
lại.
II.10.3. Sự kiện:
o 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).
II.10.4. Sử dụng điều khiển Timer:
o Khởi tạo một điều khiển Timer: Nếu lập trình viên muốn điều khiển Timer
hoạt động ngay tại thời điểm biểu mẫu chứa nó được nạp thì đặt thuộc tính Enable là
TRUE hoặc có thể dùng một sự kiện nào đó từ bên ngoài để kích hoạt điều khiển Timer.
o Lập trình đáp ứng sự kiện trả về từ điều khiển Timer: Ta sẽ đưa mã lệnh của
công viêc cần thực hiện vào trong sự kiện Timer của điều khiển Timer. Sau đây là ví dụ
khởi tạo một đồng hồ số nhờ vào điều khiển Timer.

Đ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.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

II.11 Điều khiển danh sách ổ đĩa (DriveListbox), danh sách thư mục
(DirListbox), danh sách tập tin (FileListbox)
II.11.1. Khái niệm:
o Điều khiển DriveListbox trình bày những ổ đĩa của hệ thống và cho phép người
dùng chọn một trong những ổ đĩa đó.
o Điều khiển DirListbox cho phép trình bày những thư mục và đường dẫn tại thời
điểm chạy ứng dụng. Sử dụng điều khiển này để trình bày một danh sách có thứ bậc của
các thư mục, có nghĩa là người dùng có thể mở một tài liệu từ danh sách các tài liệu đã có
sẵn.
o Điều khiển FileListbox cho phép trình bày những tài liệu có sẵn trong thư mục
hiện hành. Bạn có thể dùng thuộc tính Partten để xác định kiểu tập tin nào được hiển thị
trong danh sách. Biểu tượng shortcut (FileListbox) trên hộp công cuï
Thông thường các ứng dụng sẽ sử dụng kết hợp cả ba loại điều khiển trên là
DriveListbox, DirListbox và FileListbox.
II.11.2. Ví dụ:
Các thuộc tính được thiết lập tại thời điểm thiết kế
FileListbox: Partten = "*.doc"
DriveListbox, DirListbox
FileListbox: FontName = "Vncourier New".
Tức là điều khiển FileListbox chỉ hiển thị các tập tin của Microsoft Word.
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. Cần chú ý rằng
đố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 ở đĩa
nếu không sẽ xảy ra lỗi tại thời điểm chạy ứng dụng.
Private Sub drilstDriver_SelectedIndexChanged(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles drilstDriver.SelectedIndexChanged
On Error GoTo Loi
dirDirectory.Path = drilstDriver.Drive
Exit Sub
Loi:
MsgBox("Không có CD hay ĩa m m")
End Sub
Private Sub dirDirectory_SelectedIndexChanged(ByVal sender As System.Object,
ByVal e As System.EventArgs) Handles dirDirectory.SelectedIndexChanged
fileListFile.Path = dirDirectory.Path
End Sub

Bên trên là những đoạn mã đáp ứng lại việc người dùng chọn việc thay đổi ổ đĩa và
thư mục. Trong danh sách các tập tin ta chỉ hiển thị những file *.doc.
Biên soạn: Nguyễn Vũ Duy Quang

Bài tập ví dụ: dùng Timer, ProgressBar, CheckBox và RadioButtom

Visual Basic .NET
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

CHƯƠNG 6: LẬP TRÌNH XỬ LÝ GIAO DIỆN
& ĐỒ HỌA
M c tiêu:
Chương này gi i thi u v cách t o menu cũng như m t s hàm x lý đ
h a, nh ng thành ph n quan tr ng trong các ng d ng ch y trên Windows.
H c xong chương này, sinh viên ph i n m b t đư c các v n đ sau:
- S d ng menu trong thi t k giao di n.
- S d ng các h p tho i trong thi t k

ng d ng.

- S d ng các phương th c đ h a cùng v i cách x lý m t s s ki n đ
t o các ng d ng đ h a.
Ki n th c có liên quan:
- Các c u trúc l p trình trong VB.
- Cách th c x lý s ki n.

I. Menu Drop-Down
I.1. Khái niệm
Menu là một loại điều khiển trong đó người sử dụng có thể 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): là dạng menu thông dụng nhất.
- Menu bật ra (Pop-Up Menu): thường hiển thị khi ta ấn nút phải chuột.

I.2. Các thuộc tính của Menu
- Text: Là chuỗi hiển thị trên menu.
- Name: Phải duy nhất và dễ nhớ. Đây là tên để nhận biết thành phần nào của Menu
được chọn.
- Shortcut: dùng để thiết lập các phím tắt (Shortcut key).
- CheckedOnClick: Nếu chọn thuộc tính này thì sẽ có một dấu hiển thị bên cạnh
trái, nhưng thuộc tính này không được áp dụng cho những mục menu có chứa menu con.
- Enabled: Nếu thuộc tính này không được chọn thì mục này sẽ bị xám đi và người
dùng không thể chọn.
- Visible: Nếu thuộc tính này không được chọn thì mục này sẽ không được hiển thị.

I.3. Các sự kiện
- Click: Xảy ra khi người sử dụng chương trình nhấp chuột vào một mục nào đó của
Menu.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

I.4. Cách tạo Drop-down Menu
Menu cũng là một loại điều khiển, nhưng Windows sẽ kiểm soát việc vẽ menu. Lập
trình viên chỉ quản lý việc điều hành các sự kiện mà thôi.
Nhấp vào biểu tượng MenuStrip trên Toolbox, một đối tượng Menu mới sẽ xuất
hiện dưới cửa sổ thiết kế Form. Xong nhấn vào vùng làm việc trong Form
Nhấp vào mục Type Here và nhập nội dung cho Menu. VB.NET sẽ từ động tạo
thêm các mục Type Here bên phải và dưới mục menu bạn vừa nhập để chờ bạn định
nghĩa các lệnh trên menu ngang và các tùy chọn trong menu xổ xuống ứng với từng lệnh.
Dấu “&” đứng trước ký tự nào cho biết ký tự đó sẽ là phím tắt (Nhấn Alt + ký tự sau
“&” coi như là chọn mục menu đó.

I.5. Cách tạo Pop-up Menu
Chọn control có tên ContextMenuStrip trên toolbox và nhấn vào vùng làm việc của
Form. Một popup menu xuất hiện có tên mặc định là ContextMenuStrip.
Nhấp vào mục Type Here và nhập nội dung cho Menu. VB.NET sẽ từ động tạo
thêm các mục Type Here bên phải và dưới mục menu bạn vừa nhập để chờ bạn định
nghĩa các lệnh trên menu ngang và các tùy chọn trong menu xổ xuống ứng với từng lệnh.
Dấu “&” đứng trước ký tự nào cho biết ký tự đó sẽ là phím tắt (Nhấn Alt + ký tự sau
“&” coi như là chọn mục menu đó.
Đối tượng khi click phải chuột muốn xuất hiện thì cần khai báo thêm ở thuộc tính
ContextMenuStrip là tên của Pop-up Menu muốn xuất hiện
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

II. Hộp thoại
II.1. Khái niệm
Hộp thoại (Dialog Box) là một trong những cách VB dùng để 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).

II.2. Hộp thông điệp
Hộp thông điệp cũng 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.
II.2.1 Loại chỉ xuất thông báo
- Lúc này ta dùng MsgBox như là một thủ tục.
- Cú pháp: MsgBox (message, style, title) as result
Message: nội dung thông báo sẽ hiển thị.
Style: Giá trị nguyên dương xác định kiểu hộp thông báo (số nút, biểu
tượng sẽ hiển thị bên trái hộp, nút nhận focus).
Title: Tiêu đề hộp thông báo.
Result: giá trị trả về của hàm MsgBox là một số nguyên dương xác định nút
được nhấn.
Bảng giá trị có thể sử dụng với tham số Style.
Tên hằng
MsgBoxStyle.OkOnly
MsgBoxStyle.OKCancel
MsgBoxStyle.AbortRetryIgnore

Giá trị
Diễn giải
0
Hộp thông báo chỉ có nút OK
1
Hộp thông báo có 2 nút OK, Cancel
2
Hộp thông báo có 3 nút Abort, Retry và
Ignore
MsgBoxStyle.YesNoCancel
3
Hộp thông báo có 3 nút Yes, No và Cancel
MsgBoxStyle.YesNo
4
Hộp thông báo có 2 nút Yes và No
MsgBoxStyle.RetryCancel
5
Hộp thông báo có 2 nút Retry, Cancel
MsgBoxStyle.MsgBoxHelp
16384 Hộp thông báo có nút help
MsgBoxStyle.Critical
16
Biểu tượng X
MsgBoxStyle.Question
32
Biểu tượng ?
MsgBoxStyle.Information
64
Biểu tượng !
MsgBoxStyle.Exclamation
48
Biểu tượng !
MsgBoxStyle.SystemModal
4096 Có thể làm việc khác khi chưa trả lời hộp
thông báo
MsgBoxStyle.ApplicationModal
0
Phải trả lời hộp thông báo trước khi làm việc
khác
MsgBoxStyle.DefaultButton1
0
Nút đầu tiên trong hộp mặc định được chọn
MsgBoxStyle.DefaultButton2
0
Nút thứ 2 trong hộp mặc định được chọn
MsgBoxStyle.DefaultButton3
0
Nút thứ 3 trong hộp mặc định được chọn
MsgBoxStyle.MsgBoxRight
524288 Canh phải văn bản trong hộp thông báo
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

Bảng giá trị Result trả về ứng với từng nút được nhấn.
Tên hằng
MsgBoxResult.Ok
MsgBoxResult.Abort
MsgBoxResult.Retry
MsgBoxResult.Ignore
MsgBoxResult.Yes
MsgBoxResult.No

Giá trị
1
3
4
5
6
7

Diễn giải
Nút OK được nhấn
Nút Abort được nhấn
Nút Retry được nhấn
Nút Ignore được nhấn
Nút Yes được nhấn
Nút No được nhấn

Ví dụ:
Dim result = MsgBox("B n có mu n thoát
kh i chương trình?", MsgBoxStyle.YesNo +
MsgBoxStyle.Question + MsgBoxStyle.MsgBoxHelp,
"Thông Báo")

II.3. Hộp nhập
Đây là loại hộp thông điệp cho phép nhận thông tin từ phía người sử dụng. Tuy
nhiên trong các ứng dụng, hộp nhập rất ít khi được dùng do:
- Ta không có cách nào để kiểm tra thông tin do người dùng nhập vào khi mà Enter chưa
được ấn.
- Thông tin được nhập là rất ít.
Sau đây là một ví dụ về hộp nhập:
Private Sub mniAddNew_Click(ByVal sender
As System.Object, ByVal e As
System.EventArgs) Handles
mniAddNew.Click
Dim tmp = Trim(InputBox("Nh p
giá tr mu n thêm.", "Thêm m i"))
If tmp <> "" Then
lstDanhSach.Items.Add(tmp)
End If
End Sub

II.4. Hộp thoại
Hộp thoại phục vụ cho các tác vụ trong window như mở file, lưu file, in ấn, chọn
màu, chọn font… Hầu hết bạn thường viết mã lệnh móc nối với hộp thoại để lấy thông tin
về xử lý.
II.4.1 Các hộp thoại thông dụng:
OpenFileDialog: Cho phép lấy tên file, tên folder đối với một file hay thư mục
đang tồn tại
Các thuộc tính quan trọng:
Name: Tên của hộp thoại khi viết code.

Filter: đây là một chuỗi xác định phần mở rộng của tên các tập tin mà hộp thoại có
thể mở hay lưu.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

FilterIndex: nếu có nhiều phần mở rộng của tên tập tin được mô tả trong thuộc tính
Filter thì thuộc tính này xác định mặc định loại tập tin nào được chọn (là một số nguyên).
FileName: trả về tên tập tin sau khi người sử dụng hộp thoại chọn một tập tin nào
đó.
SaveFileDialog: Cho phép đặt tên file, tên folder mới cho một file hay thư mục sắp
ghi hay tạo mới trên đĩa. Có chức năng và thể hiện tương tự như hộp thoại
OpenFileDialog.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
OpenFileDialog1.Filter = "*.txt|*.txt|All file|*.*"
OpenFileDialog1.FilterIndex = 1
If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
MsgBox("B n ch n file: " & OpenFileDialog1.FileName)
End If
End Sub

Ở ví dụ trên, ta thiết kế một hộp thoại mở tập tin, trong đó các tập tin được hiển thị
theo 2 nhóm tập tin đó là:
- All Files: (*.*)
- Text Files: (*.txt)
Các nhóm tập tin được thể hiện trong thuộc tính Filter. Mỗi nhóm tập tin cách
nhau bởi dấu phân cách |.
Thuộc tính FilterIndex = 1 tức là khi hộp thoại Open được mở lên, thì loại tập tin
hiển thị mặc định là Text Files.
Sau khi đã chọn một tập tin và nhấn nút Open, ta sử dụng thuộc tính FileName để
nhận về tên tập tin đã chọn.
Lệnh OpenFileDialog1.ShowDialog() trả về kết quả nút được chọn.
ColorDialog: Đây là hộp thoại cho phép người dùng chọn và hiển thị các màu có
sẵn trong bảng màu của Windows cũng như thiết lập thêm nhiều màu mới. Một thuộc
tính quan trọng đối với hộp thoại chọn màu đó là thuộc tính Color, thuộc tính này trả về
giá trị của màu đã được chọn. Ta sẽ dùng phương thức ShowDialog để hiển thị hộp thoại
chọn màu. Có 2 thuộc tính quan trọng
.Color: Trả về màu đã chọn.
.ShowDialog: Mở hộp thoại.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

Private Sub bttnColor_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles bttnColor.Click
If ColorDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
If chkDoiMau.Checked Then
Me.BackColor = ColorDialog1.Color
Else
txtNoiDung.BackColor = ColorDialog1.Color
End If
End If
End Sub

FontDialog: Cho phép người dùng chọn Font màn hình, máy in hay cả hai. Khi
dùng hộp thoại chọn Font ta phải dùng thuộc tính Flags quy định loại Font nào sẽ được
hiển thị.

Private Sub bttnFont_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles bttnFont.Click
If FontDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
If chkDoiMau.Checked Then
chkDoiMau.Font = FontDialog1.Font
Else
txtNoiDung.Font = FontDialog1.Font
End If
End If
End Sub
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

Chương 7 : TẬP TIN
M c tiêu:
Chương này gi i thi u v cách th c truy c p h th ng t p tin c a Windows trong
VB, thao tác thư ng g p trong các ng d ng ch y trên Windows.
H c xong chương này, sinh viên ph i n m b t đư c các v n đ sau:
- S d ng mô hình đ i tư ng h th ng t p tin đ thao tác v i
m c, t p tin trong Windows.

đĩa, thư

- S d ng các hàm xu t/nh p t p tin đ truy xu t t p tin văn b n, t p tin

I. Làm việc với thư mục
Đây là các phương thức có cách sử dụng rất đơn giản, vì thế ta chỉ xét qua phương
thức nào ứng với tác vụ gì (công việc gì) chứ không đi sâu phân tích từng phương thức.
Để sử dụng các hàm liên quan đến thư mục, tập tin thì ta cần imports thêm
System.IO để sử dụng các phương thức thao tác lên thư mục hay tập tin
Tác vụ
Tạo thư mục
Xóa thư mục

Phương thức
Directory.CreateDirectory(path As String)
Directory.Delete(path as string) ho c
Directory.Delete(path as string, true)

Di chuyển thư mục

Directory.Move(sourceDirName
destDirName As String)

Lấy các thư mục con
Kiểm tra thư mục có tồn tại
trên ổ đĩa
Lấy tên của thư mục cha
Lấy tên của thư mục hệ thống

Directory.GetDirectories(path As String)

As

String,

Directory.Exists(path As String)
Directory.GetParent (path As String).Name
Directory.GetDirectoryRoot(path As String)

Ví dụ 1: Viết chương trình di chuyển 1 thư mục.
Ví dụ 2: Viết chương trình copy 1 thư mục.
Gợi ý: Hàm Split ( Chuỗi, Chuỗi so sánh, Số lương chuỗi con)
Vd: Split(“C:TestVisualBasic”, “”)
Kết quả trả về của hàm trên làm một mảng kiểu String, mỗi phần tử trong mảng sẽ lần lượt
có giá trị “C:”, “Test”, “VisualBasic”
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

II. Làm việc với tập tin
II.1 Kiểm tra có tồn tại tập tin
File.Exists(path As String)
Dùng để kiểm tra một tập tin có tồn tại trên ổ đĩa hay không. Path: đường dẫn đến vị trí tập
tin cần kiểm tra. Trả về giá trị True (tập tin tồn tại) hoặc False (tập tin không tồn tại).

II.2 Tạo và xóa một tập tin
File.Create(path As String)
Ví dụ: Tạo tập tin có tên bai1.txt trong thư mục Baitap trên ổ đĩa C:
File.Create(“C:Baitapbai1.txt”)
Gợi ý: Cần sử dụng thêm một biến kiểu FileStream để giữ quá trình tạo tập tin. Khi tạo
xong thì đóng (không giữ quyền mở trên tập tin đó nữa).
Dim fStream as FileStream

fStream = File.Create("c:abc.txt")
fStream.Close()
File.Delete(path As String)
Ví dụ: Xóa tập tin vừa tạo ở trên.

II.3 Mở tập tin để đọc
File.OpenText(path As String)
Cần một biến kiểu StreamReader dùng để đọc tập tin cần mở.
Ví dụ: Mở một tập tin trên ổ đĩa C:Baitapbai1.txt
Dim noidung as String
Dim strReader As StreamReader
If File.Exists(“C:Baitapbai1.txt”) then
strReader = File.OpenText(“C:Baitapbai1.txt”)
noidung = strReader.ReadToEnd
Else
Msgbox(“Tập tin không tồn tại.”)
End if
Biến StreamReader dùng để đọc nội dung trong tập tin được mở
StreamReader.ReadToEnd: dùng để đọc tất cả nội dung trong tập tin được mở
StreamReader.ReadLine: dùng để đọc từng dòng trên tập tin được mở. Chú ý khi dùng
thuộc tính này thì cần thêm .EndOfStream để kiểm tra quá trình đọc hết tập tin chưa.

II.4 Ghi dữ liệu lên tập tin
File.AppendText(path As String)
Cần thêm một biến StreamWriter dùng để ghi dữ liệu vào.
Ví dụ: ghi nội dung “Bài tập Visual Basic” và tập tin bai1.txt ở trên.
Dim strWrite As StreamWriter
Dim fileStr As FileStream
fileStr = File.Create(“C:Baitapbai1.txt”)
fileStr.Close()
strWrite = File.AppendText(“C:Baitapbai1.txt”)
strWrite.Write(“Bài tập Visual Basic”)
strWrite.Close()
Gợi ý: Có thể dùng strWrite.WriteLine(“nội dung”) để ghi và xuống dòng trong trường hợp
muốn ghi thành nhiều dòng.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

Bài tập:
1. Viết chương trình như NotePad của Windows.

2. Viết chương trình copy một thư mục trong đó có các thư mục con và tập tin.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

III. Đóng gói chương trình
Sau khi đã hoàn tất quá trình viết chương trình. Bây giờ bạn muốn mang sản phNm
của mình đi giới thiệu thì cần phải đóng gói chương trình thành một file cài đặt. Bạn cũng
có thể copy file .exe để chạy. Tuy nhiên bạn nên cài đặt ứng dụng của mình chỉ sau khi
đóng gói bằng công cụ của Visual Studio.
Quá trình đóng gói được thực hiện qua các bước sau:
Tạo dự án Deployment. Tại chương trình muốn đóng gói. Vào menu File chọn Add
chọn New Project … Hộp thoại Add New Project xuất hiện

Tại khung Project types chọn Other Project Types => Setup and Deployment. Tại khung
templates chọn Setup Project. Đặt tên cho dự án cài đặt. Chọn thư mục lưu (nên để mặc định, lúc
này dự án mới sẽ được lưu cùng thư mục với dự án cần đóng gói) => nhấn OK.
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

Một dự án mới xuất hiện ngay bên dưới dự án cần đóng gói như hình dưới. Click chuột
phải vào dự án mới tạo chọn Add => Project Output để chọn dự án cần đóng gói.

Hộp thoại Add Project Output Group xuất hiện
Chọn tên dự án muốn đóng gói trong combo box Project (Lúc này có tên là Notepad)
Chọn Primary output
Chọn OK
Dự án có tên Notepad (Active) được đưa vào để đóng gói.

Click phải chuột lên Dự án mới tạo chọn Propertives để chỉnh sửa lại kiểu đóng gói và vị trí
lưu file đóng gói (nên để mặc định). Và chọn thêm các gói cần đóng gói kèm theo ứng dụng.
Hộp thoại Propertives xuất hiện
Biên soạn: Nguyễn Vũ Duy Quang

Visual Basic .NET

Để mặc định các thông số (Sau khi Build thì file đóng gói có tên ChuongTrinhVanBan.msi
trong thư mục Debug). Chọn Prerequisites… để thêm các gói kèm theo khi đóng gói.

Chọn các gói cần kèm theo khi đóng gói ứng dụng như .Net Framework môi trường cần
thiết để ứng dụng của bạn có thể chạy, nếu ứng dụng có sử dụng báo biểu Crystal Report của bộ
Visual Studio .NET thì cần phải chọn check thêm vào Crystal Reports … => nhấn OK.
Sau khi hoàn tất. Click phải chuột vào dự án và chọn Build, đợi trong ít giây tùy dung
lượng chương trình bạn viết để chương trình đóng gói. Sau khi đóng gói thành công trong thư
mục Debug sẽ có hai tập tin cài đặt .msi và setup.exe và một thư mục dotnetfx dùng để cài
bộ .Net Framework ngoài ra nếu bạn có chọn Crystal Reports thi sẽ có thêm một thư mục
CrystalReports dùng để cài bộ CrystalReport.
Bây giờ bạn đã có thể mang chương trình của mình đi trình làng.

Weitere ähnliche Inhalte

Was ist angesagt?

Thêm sửa-xóa-combobox - c#
Thêm sửa-xóa-combobox - c#Thêm sửa-xóa-combobox - c#
Thêm sửa-xóa-combobox - c#Văn Dũng
 
Lập trình C# 2008 cơ bản_Nhất Nghệ
Lập trình C# 2008 cơ bản_Nhất NghệLập trình C# 2008 cơ bản_Nhất Nghệ
Lập trình C# 2008 cơ bản_Nhất NghệTrần Thiên Đại
 
Open office & Microsoft office
Open office & Microsoft officeOpen office & Microsoft office
Open office & Microsoft officeA Dài
 
Bài 1 - Làm quen với C# - Lập trình winform
Bài 1 - Làm quen với C# - Lập trình winformBài 1 - Làm quen với C# - Lập trình winform
Bài 1 - Làm quen với C# - Lập trình winformMasterCode.vn
 
Lập trình Android cơ bản bằng tiếng Việt
Lập trình Android cơ bản bằng tiếng ViệtLập trình Android cơ bản bằng tiếng Việt
Lập trình Android cơ bản bằng tiếng Việtlaptrinhandroid
 
Tìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành androidTìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành androidTÓc Đỏ XuÂn
 
ứng dụng cntt qltb-truongmamnon
ứng dụng cntt qltb-truongmamnonứng dụng cntt qltb-truongmamnon
ứng dụng cntt qltb-truongmamnonxuan thanh
 
Chuyên đề OpenOffice toàn tập
Chuyên đề OpenOffice toàn tậpChuyên đề OpenOffice toàn tập
Chuyên đề OpenOffice toàn tậpTran Long
 
Bài 1: Giới thiệu Android
Bài 1: Giới thiệu AndroidBài 1: Giới thiệu Android
Bài 1: Giới thiệu Androidhoccungdoanhnghiep
 
Cs lab04 win-form assignment
Cs lab04   win-form assignmentCs lab04   win-form assignment
Cs lab04 win-form assignmentHoangbach Nguyen
 
IT120-1. Giới thiệu về Android SDK
IT120-1. Giới thiệu về Android SDKIT120-1. Giới thiệu về Android SDK
IT120-1. Giới thiệu về Android SDKMultiUni
 
BÀI 1: Làm quen với lập trình - Giáo trình FPT
BÀI 1: Làm quen với lập trình - Giáo trình FPTBÀI 1: Làm quen với lập trình - Giáo trình FPT
BÀI 1: Làm quen với lập trình - Giáo trình FPTMasterCode.vn
 
Tìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành androidTìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành androidPhuong Ngo
 

Was ist angesagt? (17)

Thêm sửa-xóa-combobox - c#
Thêm sửa-xóa-combobox - c#Thêm sửa-xóa-combobox - c#
Thêm sửa-xóa-combobox - c#
 
Lập trình C# 2008 cơ bản_Nhất Nghệ
Lập trình C# 2008 cơ bản_Nhất NghệLập trình C# 2008 cơ bản_Nhất Nghệ
Lập trình C# 2008 cơ bản_Nhất Nghệ
 
access
accessaccess
access
 
Windows history (tổ 2)
Windows history (tổ 2)Windows history (tổ 2)
Windows history (tổ 2)
 
Open office & Microsoft office
Open office & Microsoft officeOpen office & Microsoft office
Open office & Microsoft office
 
Bài 1 - Làm quen với C# - Lập trình winform
Bài 1 - Làm quen với C# - Lập trình winformBài 1 - Làm quen với C# - Lập trình winform
Bài 1 - Làm quen với C# - Lập trình winform
 
Lập trình Android cơ bản bằng tiếng Việt
Lập trình Android cơ bản bằng tiếng ViệtLập trình Android cơ bản bằng tiếng Việt
Lập trình Android cơ bản bằng tiếng Việt
 
Tìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành androidTìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành android
 
ứng dụng cntt qltb-truongmamnon
ứng dụng cntt qltb-truongmamnonứng dụng cntt qltb-truongmamnon
ứng dụng cntt qltb-truongmamnon
 
Windows history
Windows historyWindows history
Windows history
 
Chuyên đề OpenOffice toàn tập
Chuyên đề OpenOffice toàn tậpChuyên đề OpenOffice toàn tập
Chuyên đề OpenOffice toàn tập
 
Bài 1: Giới thiệu Android
Bài 1: Giới thiệu AndroidBài 1: Giới thiệu Android
Bài 1: Giới thiệu Android
 
Cs lab04 win-form assignment
Cs lab04   win-form assignmentCs lab04   win-form assignment
Cs lab04 win-form assignment
 
IT120-1. Giới thiệu về Android SDK
IT120-1. Giới thiệu về Android SDKIT120-1. Giới thiệu về Android SDK
IT120-1. Giới thiệu về Android SDK
 
BÀI 1: Làm quen với lập trình - Giáo trình FPT
BÀI 1: Làm quen với lập trình - Giáo trình FPTBÀI 1: Làm quen với lập trình - Giáo trình FPT
BÀI 1: Làm quen với lập trình - Giáo trình FPT
 
Tìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành androidTìm hiểu về hệ điều hành android
Tìm hiểu về hệ điều hành android
 
Bon nuoc win_cc
Bon nuoc win_ccBon nuoc win_cc
Bon nuoc win_cc
 

Ähnlich wie Bai giangvb.net

Hướng dẫn lập trình với visual basic
Hướng dẫn lập trình với visual basicHướng dẫn lập trình với visual basic
Hướng dẫn lập trình với visual basicnataliej4
 
Giáo trình tổng quan về Vb
Giáo trình tổng quan về VbGiáo trình tổng quan về Vb
Giáo trình tổng quan về VbSun Down
 
Về Visual Basic 20 5
Về Visual Basic 20 5Về Visual Basic 20 5
Về Visual Basic 20 5Phong Lữ
 
Chuong vb.net
Chuong vb.netChuong vb.net
Chuong vb.netkienbom
 
Bài tập Lập trinh viên thiết bị di động
Bài tập Lập trinh viên thiết bị di độngBài tập Lập trinh viên thiết bị di động
Bài tập Lập trinh viên thiết bị di độngRobert Commando
 
Module 2 : Sử Dụng Máy Tính Cơ Bản
Module 2 : Sử Dụng Máy Tính Cơ BảnModule 2 : Sử Dụng Máy Tính Cơ Bản
Module 2 : Sử Dụng Máy Tính Cơ BảnLong Nguyen
 
Huong dan su dung windows 8
Huong dan su dung windows 8Huong dan su dung windows 8
Huong dan su dung windows 8phamvan39
 
Huong dansudungwindows8 tech24.vn
Huong dansudungwindows8 tech24.vnHuong dansudungwindows8 tech24.vn
Huong dansudungwindows8 tech24.vnpl Chau
 
Tailieu.vncty.com huong dan su dung windows 8
Tailieu.vncty.com   huong dan su dung windows 8Tailieu.vncty.com   huong dan su dung windows 8
Tailieu.vncty.com huong dan su dung windows 8Trần Đức Anh
 
IT120-2. Bắt đầu với Hello World
IT120-2. Bắt đầu với Hello WorldIT120-2. Bắt đầu với Hello World
IT120-2. Bắt đầu với Hello WorldMultiUni
 
Báo cáo tuần 1
Báo cáo tuần 1Báo cáo tuần 1
Báo cáo tuần 1ThongErik
 
Tìm hiểu về microsoft expression encoder 4
Tìm hiểu về microsoft expression encoder 4Tìm hiểu về microsoft expression encoder 4
Tìm hiểu về microsoft expression encoder 4Đăng Khôi
 
Biginginventor2008 120719205845-phpapp01
Biginginventor2008 120719205845-phpapp01Biginginventor2008 120719205845-phpapp01
Biginginventor2008 120719205845-phpapp01Hội Trần
 
Báo cáo thực tập hàng tuần
Báo cáo thực tập hàng tuầnBáo cáo thực tập hàng tuần
Báo cáo thực tập hàng tuầnlan huynh
 
Bài giảng inventor 2008 document transcript
Bài giảng inventor 2008 document transcriptBài giảng inventor 2008 document transcript
Bài giảng inventor 2008 document transcript1100493
 

Ähnlich wie Bai giangvb.net (20)

Bai giangvb.net
Bai giangvb.netBai giangvb.net
Bai giangvb.net
 
Cac bai tap .net
Cac bai tap .netCac bai tap .net
Cac bai tap .net
 
Hướng dẫn lập trình với visual basic
Hướng dẫn lập trình với visual basicHướng dẫn lập trình với visual basic
Hướng dẫn lập trình với visual basic
 
Giáo trình tổng quan về Vb
Giáo trình tổng quan về VbGiáo trình tổng quan về Vb
Giáo trình tổng quan về Vb
 
Về Visual Basic 20 5
Về Visual Basic 20 5Về Visual Basic 20 5
Về Visual Basic 20 5
 
Chuong vb.net
Chuong vb.netChuong vb.net
Chuong vb.net
 
Vb6 16 (2)
Vb6 16 (2)Vb6 16 (2)
Vb6 16 (2)
 
Bài tập Lập trinh viên thiết bị di động
Bài tập Lập trinh viên thiết bị di độngBài tập Lập trinh viên thiết bị di động
Bài tập Lập trinh viên thiết bị di động
 
Module 2 : Sử Dụng Máy Tính Cơ Bản
Module 2 : Sử Dụng Máy Tính Cơ BảnModule 2 : Sử Dụng Máy Tính Cơ Bản
Module 2 : Sử Dụng Máy Tính Cơ Bản
 
Huong dan su dung windows 8
Huong dan su dung windows 8Huong dan su dung windows 8
Huong dan su dung windows 8
 
Huong dansudungwindows8 tech24.vn
Huong dansudungwindows8 tech24.vnHuong dansudungwindows8 tech24.vn
Huong dansudungwindows8 tech24.vn
 
Tailieu.vncty.com huong dan su dung windows 8
Tailieu.vncty.com   huong dan su dung windows 8Tailieu.vncty.com   huong dan su dung windows 8
Tailieu.vncty.com huong dan su dung windows 8
 
Asp.net 3.5 _1
Asp.net 3.5 _1Asp.net 3.5 _1
Asp.net 3.5 _1
 
IT120-2. Bắt đầu với Hello World
IT120-2. Bắt đầu với Hello WorldIT120-2. Bắt đầu với Hello World
IT120-2. Bắt đầu với Hello World
 
Báo cáo tuần 1
Báo cáo tuần 1Báo cáo tuần 1
Báo cáo tuần 1
 
Tìm hiểu về microsoft expression encoder 4
Tìm hiểu về microsoft expression encoder 4Tìm hiểu về microsoft expression encoder 4
Tìm hiểu về microsoft expression encoder 4
 
Biginginventor2008 120719205845-phpapp01
Biginginventor2008 120719205845-phpapp01Biginginventor2008 120719205845-phpapp01
Biginginventor2008 120719205845-phpapp01
 
Báo cáo thực tập hàng tuần
Báo cáo thực tập hàng tuầnBáo cáo thực tập hàng tuần
Báo cáo thực tập hàng tuần
 
Asp control
Asp controlAsp control
Asp control
 
Bài giảng inventor 2008 document transcript
Bài giảng inventor 2008 document transcriptBài giảng inventor 2008 document transcript
Bài giảng inventor 2008 document transcript
 

Bai giangvb.net

  • 1. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET Chương I: T ng Quan V Visual Basic .NET M c tiêu: Gi i thi u v môi trư ng phát tri n Visua Basic .NET, giúp cho sinh viên có cái nhìn t ng quan v VB .NET K t thúc chương này sinh viên c n ph i n m b t các v n đ sau: S d ng môi trư ng VB .NET đ phát tri n m t s ng d ng cơ b n Cách t o d án m i trong VB .NET 1. Cài đặt Visual Studio .Net Bạn nên có CPU Pentium III, 500MHz trở lên, với 256 MB RAM và ít nhất 10GB Harddisk. Về OS bạn nên dùng Windows 2000 (Professional hay Server) hay Windows XP. Lý do chính là các versions Windows nầy hổ trợ Unicode và có Internet Information Server (IIS) hổ trợ ASPX để ta dùng cho ASP.NET. Visual Studio.NET nằm trong 3 CDs, gồm có 4 files: • EN_VS_NET_BETA2_WINCUP.exe • EN_VS_NET_BETA2_CD1.exe • EN_VS_NET_BETA2_CD2.exe • EN_VS_NET_BETA2_CD3.exe Chạy EN_VS_NET_BETA2_WINCUP.exe để Unzip nó vào một folder trong một harddisk (eg: E:CDWINCUP) . Lần lượt chạy EN_VS_NET_BETA2_CD1.exe, EN_VS_NET_BETA2_CD2.exe và EN_VS_NET_BETA2_CD3.exe để Unzip chúng vào chung một folder trong một harddisk (eg: E:CD ). Việc Unzip files có thể rất lâu, bạn phải kiên nhẫn chờ cho đến khi nó kết thúc. Nếu không, khi cài đặt có thể bị báo lỗi là thiếu files. Kế đó, trước hết chạy Setup.exe của Windows Component Update như dưới đây, click No khi Warning dialog hiện ra: Tiếp theo, chạy Setup.exe của Visual Studio.NET để cài đặt. Đây là Visual Studio .Net 2003 Cài đặt Visua Studio .Net 2005. Phiên bản này có 3 đĩa CD. Ta cũng chạy các file trên 3 đĩa để giải nén vào một thư mục trên ổ đĩa cứng. Sau khi giải nén xong sẽ có hai thư mục chính: thư mục VS (chứa các file cài đặt bộ Visual Studio .Net 1.17GB) và thư mục MSDN (chứa các thư viện hỗ trợ cho việc sử dụng Visual Studio .Net 1.55GB).
  • 2. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET Để cài đặt ta vào thư mục VS chạy file Setup.exe để cài đặt, quá trình cài chiếm một khoảng thời gian tùy vào cấu hình máy (trung bình từ 15 – 20 phút). Ở đây chúng ta nên cài đặt bộ Visual Studio 2005
  • 3. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET 2. .NET Framework .NET được developed từ đầu năm 1998, lúc đầu có tên là Next Generation Windows Services (NGWS). Nó được thiết kế hoàn toàn từ con số không để dùng cho Internet. .NET đại diện cho toàn bộ các công nghệ và các khái niệm cấu thành một nền tảng để người lập trình xây dựng các ứng dụng trên nó. Có thể hiểu .NET là một lớp tồn tại bên dưới các ứng dụng và cung cấp một tập các chức năng và dịch vụ cơ bản. .NET framework cung cấp 2 thành phần chính: các lớp cơ sở (NET. Framework base class) và sử dụng ngôn ngữ chung (Common Language Runtime). .NET framework cũng cung cấp một tập các hàm API của riêng nó để giúp cho lập trình tận dụng được hết khả năng của nó. • Gi i h n c a VB 6.0
  • 4. Biên soạn: Nguyễn Vũ Duy Quang • Các thành phần chính của .Net FrameWork Visual Basic .NET
  • 5. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET .NET application được chia ra làm hai loại: cho Internet gọi là ASP.NET, gồm có Web Forms và Web Services và cho desktop gọi là Windows Forms. Windows Forms giống như Forms của VB6. Nó hổ trợ Unicode hoàn toàn, rất tiện cho chữ Việt và thật sự Object Oriented. Web Forms có những Server Controls làm việc giống như các Controls trong Windows Forms, nhất là có thể dùng codes để xử lý Events y hệt như của Windows Forms. Điểm khác biệt chánh giữa ASP (Active Server Pages) và ASP.NET là trong ASP.NET, phần đại diện visual components và code nằm riêng nhau, không lộn xộn như trong ASP. Ngoài ra ASP.NET code hoàn toàn Object Oriented. Web Services giống như những Functions mà ta có thể gọi dùng từ các URL trên Internet, thí dụ như Credit Card authorisation. ADO.NET là một loại cache database nho nhỏ (gọi là disconnected database) để thay thế ADO. Thay vì application connects vĩnh viễn với database mẹ qua ADO, application trong .NET làm việc với portable 9 database chỉ chứa một hai tables, là copy từ database mẹ. Khi nào cần, portable database nầy (ADO.NET) sẽ được reconciled với database mẹ để update các thay đổi. Hai tables trong ADO.NET có thể được related nhau trong Master/Details relationship. Vì ADO.NET có chứa original data lẫn data mới nhất nên Rollback trong ADO.NET rất dễ dàng và nhẹ ký. XML được yểm trợ tối đa. Nằm phía sau ADO.NET là XML. XML có thể là Table of records trong ADO.NET hay Tree of nodes trong DOM (Document Object Model). IO được hổ trợ bằng toàn bộ Stream kể cả Memory Stream và StreamReader/StreamWriter. Thêm vào là DataFormatting cho Serialisation để chứa Object xuống binary file hay text file. TCP/IP và http là hai protocols thông dụng nhất trong .NET, nhưng chúng làm việc phía sau sân khấu giúp ta gọi một remote procedure (nằm trên computer khác) dễ dàng như một local procedure. Kỹ thuật ấy gọi là Remoting. Security hổ trợ Cryptography, Permissions và Policy. Diagnostics cho ta Debug và Trace. Threading rất tiện và đơn giản để implement Lightweight Process. Vấn đề Timing trong .NET program rất linh động, hiệu quả và chính xác. Việc thiết kế Common Language Runtime nhắm vào các mục tiêu chính sau đây: • Việc triển khai đơn giản và nhanh hơn: developers sẽ dành thì giờ quyết định ráp những software components nào lại với nhau nhiều hơn là lập trình thật sự.
  • 6. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET • Các công tác thiết yếu ("plumbing") như memory management, process communication .v.v. được lo liệu tự động. • Các công cụ hổ trợ rất đầy đủ (no more API): .NET Framework Base classes rất phong phú cho file, network, serialisation, mã hóa, XML, database, v.v.. • Cài đặt đơn giản và an toàn (no more DLL "hell"): chỉ cần xcopy files, giống như thời vàng son của DOS. Lý do là .NET application chạy trên .NET framework, một khi ta đã cài .NET framework vào máy rồi thì có đầy đủ mọi .DLL cần thiết. Có lẽ trong tương lai Microsoft cài .NET framework chung với Windows. 3. Bắt đầu dự án mới: Vào Start => Programs => Microsoft Visual Studio 2005 => Microsoft Visual Studio 2005 (như hình trên). Visual Studio sẽ khởi động, nếu là lần đầu tiên khởi động thì chương trình sẽ hỏi bạn sử dụng ngôn ngữ gì (ở đây chọn Visual Basic). Nếu là lần thứ 2 trở đi thì sẽ xuất hiện giao diện như hình dưới. Vào File = > New Project. Xuất hiện hộp thoại sau:
  • 7. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET chọn loại ứng dụng sẽ viết đặt tên cho dự án Chọn Visual Basic => Windows => chọn Windows Application trong cửa sổ bên phải => đặt tên cho Project mới (tên mặc định là WindowsApplication1) => OK Cửa sổ Solution chứa các file chươn trình trình Cửa sổ Propertive của các đối tượng Các component trong Toolbox Form Designer dùng để thiết kế chương trình Hộp công cụ (toolbox): chứa các biểu tượng tương ứng với những đối tượng điều khiển chuNn bao gồm nhãn (label), hộp văn bản (textbox), nút lệnh (button)… Để bật tắt hộp công cụ ta vào Menu View => Toolbox (Ctrl + Alt + X) Thực đơn (Menu Bar): cho phép truy cập đến hầu hết các lệnh dùng điều khiển môi trường phát triển. Menu và các lệnh trên menu làm việc tương ứng như hầu hết nhưng chương trình Windows thông thường khác. Thiết kế chương trình (Form Designer): Đây là đối tượng xây các màn hình giao tiếp của ứng dụng. Khi vừa tạo mới, màn hình giao tiếp sẽ có tên mặc định là Form1.vb và không chứa đối tượng điểu khiển nào cả, nhiệm vụ của người lập trình là thiết kế các
  • 8. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET đối tượng điều khiển trên màn hình giao tiếp và sử dụng các dòng lệnh để xử lý các sự kiện thích hợp cho các đối tượng điều khiển đó. Solution Explorer: Quản lý các ứng dụng hiển thị các màn hình giao tiếp (Forms), các Reports và các Module … hiện có của ứng dụng. Ngoài ra, còn cho phép người lập trình thực hiện nhanh những thao tác như thêm, xóa các đối tượng này khỏi ứng dụng. Cửa sổ thuộc tính (Propertives): Cho phép định thuộc tính ban đầu cho các đối tượng bao gồm màn hình giao tiếp (Forms) và các điều khiển (Control) Cửa sổ lệnh (Code window): Đây là cửa sổ cho phép khai báo các dòng lệnh xử lý biến cố cho màn hình giao tiếp và các đối tượng trên màn hình giao tiếp. Mặc nhiên cửa sổ này không được hiển thị, người lập trình có thể nhân nút chuột phải lên màn hình giao tiếp và chọn View Code để hiển thị khi cần Lưu chương trình: File => Save All (Click vào biểu tượng 3 đĩa mềm đè lên nhau). Xuất hiện cửa sổ sau: Đặt tên cho dự án trong ô Name, chọn đường dẫn lưu dự án trong ô Location, đặt tên cho Solution (mặc định tên Solution là tên của dự án). Chọn Save để lưu lại
  • 9. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET 4. Mở một dự án đã tồn tại: Khởi động Visual Studio 2005 Vào menu File => Open Project Chọn Project muốn mở trong hộp thoại dialog Open => chọn OK. 5. Viết chương trình Visual Basic đầu tay: Ứng dụng mà chúng ta sắp xây dựng dưới đây mang tên Lucky Seven (số 7 may mắn), một chương trình mô phỏng máy chơi lô tô. Giao diện người dùng gồm: Nút Spin (quay số) khi nhấn vào nút này thì chương trình sẽ chọn ngẫu nhiên 3 số. Nút End (Kết thúc) khi nhấn nút này thì sẽ thoát khỏi ứng dụng. Ba đối tượng nhãn (label) có tên lblSoThu1, lblSoThu2, lblSoThu3 dùng để chứa ba số ngẫu nhiên khi nhấn nút Spin Một nhãn mang nội dung “Lucky Seven” Một nhãn dùng để thông báo. Và một hình (picture) được gán thuộc tính Visible = False (tức là Nn) Khi nhấn nút Spin sẽ chọn 3 số ngẫu nhiên gán vào 3 nhãn lblSoThu1, lblSoThu2, lblSoThu3 nếu một trong 3 nhãn này có chứa số 7 thì thông báo “YOU WIN”, cho hiện hình lên và phát ra một tiếng bíp. Ngược lại, không cho hiện hình và thông báo “YOU LOSE”
  • 10. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET 6. Chạy chương trình ứng dụng Visual Basic .NET 6.1 Chạy chương trình: Nhấp chuột vào nút Start (hoặc nhấn F5) trên thanh công cụ chuNn 6.2 File thực thi .exe Khi chạy chương trình bằng cách nhấn nút Start (hoặc nhấn F5) thì chương trình sẽ tự động tạo file thực thi .exe trong thư mục Debug chứa trong dự án đã tạo Hoặc vào menu Build => Build + TênDựÁn để dịch thử chương trình vừa tạo • Lưu ý: Khi chạy chương trình hoặc Build mà còn có lỗi khi viết code (mã lệnh) thì chương trình sẽ báo lỗi và chỉ ra dòng lệnh có chứa lỗi. Đến khi nào không còn lỗi thì chương trình mới có thể chạy hoặc Build • Câu hỏi: Khi tạo ra một file thực thi .exe đem qua một máy khác thì có thể chạy file .exe này không 7. Bài tập: a. Thiết kế giao diện b. Yêu cầu chức năng: Chương trình gồm 1 ô nhập liệu (textbox) và 3 nút lệnh (button) khi nhấn nút: Display: ô nhập liệu hiện lên câu: “Welcome to VB.NET” Clear: xóa nội dung trong ô nhập liệu Exit: thoát chương trình.
  • 11. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET Chương II: Bi u M u Và M t S Đi u Khi n Thông D ng M c tiêu: Chương này gi i thi u v m t s đi u khi n cơ b n đ t o nên giao di n cho các ng d ng cũng như m t s khái ni m trong l p trình v i VB.NET, nh ng yêu c u t i thi u c n có trong vi c “l p trình s ki n” v i VB.NET H c xong chương này, sinh viên ph i n m b t đư c các v n đ sau: • Khái ni m v đi u khi n, thu c tính, phương th c, s ki n. • Quy t c đ t tên danh bi u trong VB. • S d ng bi u m u trong thi t k giao di n. • S d ng đi u khi n ô nh p li u, nút nh n, nhãn, khung. I. Các khái niệm: Điều khiển: Các thành phần có sẵn để người lập trình tạo giao diện tương tác với người dùng. Mỗi điều khiển thực chất là một đối tượng, do vậy nó sẽ có một số điểm đặc trưng cho đối tượng, chẳng hạn như các thuộc tính, các phương thức & các sự kiện. Thuộc tính: Các đặc trưng của một điều khiển tạo nên dáng vẻ riêng của mỗi điều khiển đó. Phương thức: Các điều khiển có thể thực thi một số tác vụ nào đó, các tác vụ này được định nghĩa sẵn bên trong các phương thức (còn gọi là chương trình con: hàm & thủ tục), người lập trình có thể gọi thực thi các phương thức này nếu cần. Sự kiện: là hành động của người dùng tác động lên ứng dụng đang thực thi. Thí dụ: - Nhấn phím bất kỳ trên bàn phím. - Nhấp chuột. Các thành phần giao diện có khả năng đáp ứng lại sự kiện. Chẳng hạn khi chúng ta nhấp chuột vào button, lúc đó button nhận biết được sự kiện này; hay như textbox nhận biết được sự kiện bàn phím tác động lên nó. Một ứng dụng trên Windows thường được thực hiện nhờ vào việc đáp ứng lại các sự kiện của người dùng. Lập trình sự kiện: Các thành phần giao diện có khả năng nhận biết được các sự kiện từ phía người dùng. Tuy nhiên khả năng đáp ứng lại các sự kiện được thực hiện bởi người lập trình. Khi một thành phần giao diện được sử dụng, người lập trình phải xác định chính xác hành động của thành phần giao diện đó để đáp ứng lại một sự kiện cụ thể. Lúc đó người lập trình phải viết đoạn mã lệnh mà đoạn mã lệnh này sẽ được thực thi khi sự kiện xảy ra. Chẳng hạn, trong ứng dụng Paint của Windows; khi người sử dụng nhấp chuột vào nút vẽ hình elip sau đó dùng chuột vẽ nó trên cửa sổ vẽ, một hình elip được vẽ ra. Trong lập trình sự kiện, một ứng dụng được xây dựng là một chuỗi các đáp ứng lại sự kiện. Tất cả các hành động của ứng dụng là đáp ứng lại các sự kiện. Do vậy người lập
  • 12. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET trình cần phải xác định các hành động cần thiết của ứng dụng; phân loại chúng; sau đó viết các đoạn mã lệnh tương ứng. Cách xác lập các thuộc tính & các phương thức trong chương trình <Name của điều khiển>.<Tên thuộc tính> <Name của điều khiển>.<Tên phương thức>[(<Các tham số>)] Tên điều khiển (thuộc tính Name) Đây là thuộc tính xác định tên của điều khiển trong ứng dụng. Tên này được đặt theo quy tắc: o Tên có thể dài từ 1 - 256 ký tự. o Tên phải bắt đầu với ký tự chữ, có thể chữ hoa hay thường. o Sau ký tự đầu tiên, tên có thể chứa ký tự, số hay dấu gạch dưới. Ví dụ: Num, StudentCode, Class12A2 là những tên hợp lệ. 345, 7Class là nhữg tên không hợp lệ. • Gợi ý cách đặt tên: nên đặt tên theo từng nhóm đối tượng ví dụ textbox thì đặt tên bắt đầu là txtTenCanDat, label là lblTen, buttom là bttnTen, ComboBox là cboTen, Form là frmTenForm … để dễ phân biệt khi lập trình.
  • 13. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET II. Biểu mẫu (Form) II.1. Khái niệm: Chương trình ứng dụng giao tiếp với người dùng thông qua các biểu mẫu (hay còn gọi là cửa sổ, xuất phát từ chữ Form hay Windows); các điều khiển (Control) được đặt lên bên trên giúp cho biểu mẫu thực hiện được công việc đó. Biểu mẫu là các cửa số được lập trình nhằm hiển thị dữ liệu và nhận thông tin từ phía người dùng. II.2. Thuộc tính o Name: thuộc tính này như là một định danh nhằm xác định tên của biểu mẫu là gì? Ta sẽ sử dụng thuộc tính này để truy xuất đến các thuộc tính khác cùng với phương thức có thể thao tác được trên biểu mẫu. o Icon: hình icon được dùng trong thanh tiêu đề của form, nhất là khi form thu nhỏ lại. o StartPosition: xác định vị trí ban đầu của form trên màn hình khi form vừa nạp (Manual, CenterScreen, WindowsDefaultLocation, WindowsDefaultBounds, CenterParent). o WindowState: xác định trạng thái ban đầu của form (Normal, Minimized, Maximized ). o Text: Văn bản hiển thị trên thanh tiêu đề của form (tương ứng với thuộc tính cation trong VB6) o BackgroundImage: xác định tập tin làm hình nền cho form (tương ứng thuộc tính picture trong VB6). o BackColor: Màu nền form. o FormBorderStyle: Kiểu đường viền form. o Opacity: Cho phép thay đổi độ sáng tối của form, có thể làm mờ form khi hiển thị. Giá trị mặc định là 100%. Đây là thuộc tính mới so với VB6. o ControlBox: Cho phép bật/tắt hộp điều khiển thu nhỏ, phóng lớn và đóng. Mặc định có giá trị là True. o Cursor: Kiểu con trỏ khi thao tác trên form. o Font: Chọn Font chữ cho form. o ForceColor: Chọn màu cho font chữ. o KeyPreview: Mặc định có thuộc tính là False. Cho phép form nhận các giá trị nhấn từ bàn phím. o MaximizeBox: Cho phép bật/tắt nút phóng to trên ControlBox. o MinimizeBox: Cho phép bật/tắt nút thu nhỏ trên ControlBox. o Size: thay đổi kích thước form.
  • 14. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET II.3. Phương thức o Location: di chuyển biểu mẫu đến tọa độ X,Y: Location = new point(X, Y) II.4. Sự kiện o Form_Load: Sự kiện này xảy ra mỗi lần ta gọi thể hiện một biểu mẫu. Ta dùng sự kiện Form_Load để khởi tạo các biến, điều khiển cho các thể hiện của biểu mẫu này. o Form_Activate: Mỗi lần một biểu mẫu được kích hoạt (active) thì một sự kiện Activate phát sinh. Ta thường dùng sự kiện này để cập nhật lại giá trị các điều khiển trên biểu mẫu. o Form_FormClosing: Mỗi lần form đóng lại thì sự kiện FormClosing sẽ được phát sinh. Ta thường dùng sự kiện này để thao tác đến các thành phần khác đang mở trước khi form được đóng lại. o Form_Resize: Sự kiện này xảy ra mỗi khi form thay đổi kích thước. o Form_KeyPress: Sự kiện này xảy ra khi ta nhấn một phím bất kỳ. Ta thường dùng để kiểm tra các phím vừa nhấn từ bàn phím
  • 15. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET III. Nhãn (Label) III.1. 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 họ không thể thay đổi chuỗi ký tự đó một cách trực tiếp. III.2. Thuộc tính: o Name: Đây là một tên xác định một định danh, người lập trình có thể thay đổi tên này theo cách của mình để tiện sử dụng. o Text: Thuộc tính quy định chuỗi ký tự hiển thị khi ta tạo một điều khiển nhãn. Khi ta tạo mới một điều khiển thì thuộc tính text có giá trị mặc nhiên là “Label…”. Ví dụ: Ta muốn tạo một nhãn là “Chào mừng bạn đến với Visual Basic”, ta thay đổi giá trị của thuộc tính text thành “Chào mừng bạn đến với Visual Basic”. Ta có thể thay đổi giá trị của thuôc tính text tại thời điểm ứng dụng đang chạy nhờ vào đoạn mã lệnh đơn giản như sau: lblThongBao.text = " ã của điều khiển nhãn mà ta muốn đổi. i giá tr text" với lblThongBao là tên o TextAlign: Vị trí hiển thị chuỗi trên nút. o BorderStyle: Xác định kiểu đường viền cho nhãn (none, fixsingle, fix3d) o Font, Fore Color: Quy định kiểu chữ, kích thước, màu hiển thị. o BackColor: Quy định màu nền của nhãn trong trường hợp không trong suốt. Chọn backcolor là Transparent trong tab Web của cửa sổ chọn màu để có màu nền giống với màu đối tượng hoặc đang chứa label. o Image: Chọn hình cho nhãn. o Visible: Có giá trị mặc định là True, dùng để Nn hiện khung. o TabIndex: Số thứ tự của đối tượng trên Form. Ta có thể nhấn phím Tab trên bàn phím để chuyến đổi qua lại giữa các đối tượng bằng chỉ số Tabindex. Chỉ số nào được tự động tạo ra khi ta thêm một đối tượng vào Form. III.3. Phương thức: o Location: di chuyển nhãn đến tọa độ X,Y: Location = new point( X, Y) III.4. Sự kiện: o TextChanged: Xảy ra mỗi khi nhãn thay đổi giá trị. o Click: Mỗi khi nhãn được chuột nhấp lên, sự kiện này xảy ra. o DoubleClick: Xảy ra khi người sử dụng nhấp đúp chuột lên điều khiển nhãn.
  • 16. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET IV. Khung (GroupBox) IV.1. Khái niệm: Khung là một điều khiển dùng trong việc bố trí giao diện của biểu mẫu một cách trong sáng và rõ nét. Thông thường các điều khiển cùng phục vụ cho một công việc nào đó sẽ được đặt trong một khung nhằm làm nổi bật vai trò của chúng. Khi chúng ta tạo mới một khung để chứa các điều khiển khác, ta có hai cách thực hiện: - Tạo khung chứa trước, sau đó đưa các điều khiển vào trong khung chứa. Đây là cách đơn giản nhất. - Tạo khung chứa sau khi đã tạo mới các điều khiển, khi đó khung chứa sẽ che mất các điều khiển, vì vậy ta cần phải đưa khung chứa ra sau các điều khiển bằng cách nhấp chuột phải và chọn Send to Back. Nhưng đối với cách này, các điều khiển khác không nằm trên khung chứa. Do vậy ta có thể giải quyết bằng cách cắt (Cut) các điều khiển này đi, sau đó dán (Paste) vào trong khung chứa. Hình II.1: Ví dụ về khung chứa Groupbox IV.2. Thuộc tính: Khung cũng có các thuộc tính thông dụng như của điều khiển nhãn chẳng hạn như: Name, Caption,... o Name: Đây là một tên xác định một định danh, người lập trình có thể thay đổi tên này theo cách của mình để tiện sử dụng. o Text: Chuỗi ký tự hiển thị khi ta tạo một điều khiển khung. Khi ta tạo mới một điều khiển thì thuộc tính text có giá trị mặc nhiên là “GroupBox…”. o Font, Fore Color: Quy định kiểu chữ, kích thước, màu hiển thị. o BackColor: Quy định màu nền của khung trong trường hợp không trong suốt. Chọn backcolor là Transparent trong tab Web của cửa sổ chọn màu để có màu nền giống với màu đối tượng hoặc đang chứa khung.
  • 17. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET o BackgroundImage: Chọn hình nền cho khung. o Enable: có giá trị mặc định là True, cho phép hoặc không cho phép kích hoạt vào khung. o Visible: có giá trị mặc định là True, dùng để Nn hiện khung. o TabIndex: Số thứ tự của đối tượng trên Form. Ta có thể nhấn phím Tab trên bàn phím để chuyến đổi qua lại giữa các đối tượng bằng chỉ số Tabindex. Chỉ số nào được tự động tạo ra khi ta thêm một đối tượng vào Form. IV.3. Phương thức: o Location: di chuyển khung đến tọa độ X,Y: location = new point(X, Y) IV.4. Sự kiện: o Click, DblClick: xảy ra khi khung nhận được một thao tác nhấp (nhấp đúp) chuột. V. Nút lệnh (Command Button) V.1. Khái niệm: Nút lệnh là một điều khiển dùng để bắt đầu, ngắt hoặc kết thúc một quá trình. Khi nút lệnh được chọn thì nó trông như được nhấn xuống, do đó nút lệnh còn được gọi là nút nhấn (Push Button). Người sử dụng luôn có thể chọn một nút lệnh nào đó bằng cách nhấn chuột trên nút lệnh đó. V.2. Thuộc tính: o Name: sử dụng như một định danh nhằm xác định tên của nút lệnh. o Text: Dùng văn bản hiển thị trên nút lệnh. o TextAlign: Canh vị trí hiển thị chuỗi trên nút. o BackColor: Định màu nền cho nút. o Enabled: Trong một biểu mẫu, có thể có nhiều nút lệnh để thực hiện nhiều công việc khác nhau và tại một thời điểm nào đó ta chỉ được phép thực hiện một số công việc. Nếu giá trị thuộc tính Enabled là False thì nút lệnh đó không có tác dụng. Giá trị mặc định của thuộc tính này là True. Ta có thể thay đổi giá trị của thuộc tính tại thời điểm chạy ứng dụng. o TabIndex: Số thứ tự của đối tượng trên Form. Ta có thể nhấn phím Tab trên bàn phím để chuyến đổi qua lại giữa các đối tượng bằng chỉ số Tabindex. Chỉ số nào được tự động tạo ra khi ta thêm một đối tượng vào Form. o Font, Fore Color: Quy định kiểu chữ, kích thước, màu hiển thị. o Image: Chọn hình icon cho nút. o ImageAlign: Vị trí hiển thị hình trên nút. o Locked: Khóa hay không khóa điều khiển Button.
  • 18. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET o BackgroundImage: Chọn hình nền cho nút. o Visible: có giá trị mặc định là True, dùng để Nn hiện nút. V.3. Phương thức o Location: di chuyển khung đến tọa độ X,Y: location = new point(X, Y) V.4. Phương thức o Click: đây là sự kiện thường xảy ra với nút lệnh. Mỗi khi một nút lệnh được chọn, sự kiện này được kích hoạt. Do đó, người sử dụng sẽ viết mã các lệnh để đáp ứng lại sự kiện này. Ví dụ: Tạo một biểu mẫu có một ô nhập liệu với nhãn là họ tên và một nút lệnh cho phép đưa ra câu chào người dùng đó. Private Sub bttnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttnOK.Click MsgBox("Chào mừng bạn " & Trim(txtHoTen.Text) & " đến với VB.Net 2005") End Sub Hình II.2: Sử dụng nút lệnh VI. Ô nhập liệu (TextBox) VI.1. Khái niệm: Ô nhập liệu là một điều khiển cho phép nhận thông tin do người dùng nhập vào. Đối với ô nhập liệu ta cũng có thể dùng để hiển thị thông tin, thông tin này được đưa vào tại thời điểm thiết kế hay thậm chí ở thời điểm thực thi ứng dụng. Còn thao tác nhận thông tin do người dùng nhập vào dĩ nhiên là được thực hiện tại thời điểm chạy ứng dụng. VI.2. Thuộc tính: o Name: Tên điều khiển textbox. o BackColor: Định màu nền cho nút. o Font, Fore Color: Quy định kiểu chữ, kích thước, màu hiển thị.
  • 19. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET o Text: Dùng văn bản hiển thị trên textbox. o Wordwrap: giá trị True cho phép văn bản dài tự động xuống dòng. o ReadOnly: Giá trị True chỉ có thể xem văn bản mà không được chỉnh sửa. o PasswordChar: Ký tự thay thế cho những ký tự được nhập vào textbox. Thường để nhập mật khNu. o CharacterCasing: Normal (mặc định), Upper (tự động đổi thành chữ hoa), Lower (tự động đổi thành chữ thường). o Multiline: Giá trị True cho phép nhập, hiển thị văn bản trên nhiều dòng. o Scrollbars: None (mặc định), Horizontal (thanh cuộn ngang) và Vertical (thanh cuộn dọc), both (cả hai thanh cuộn). o BorderStyle: Xác định kiểu đường viền bao quanh textbox. VI.3. Phương thức o Location: di chuyển khung đến tọa độ X,Y: location = new point(X, Y) o Focus: Phương thức này nhằm mục đích thiết lập cho điều khiển ô nhập liệu nhận được Focus, nghĩa là nó sẵn sàng được tương tác bởi người sử dụng. VI.4. Sự kiện: o KeyPress: xảy ra khi người sử dụng chương trình nhấn một phím. Đối với điều khiển TextBox, ta 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. Trong ví dụ dưới đây, TextBox Text1 sẽ chỉ nhận biết các phím là số (0 - 9), không nhận biết các phím khác: Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress If (e.KeyChar < ChrW(48) Or e.KeyChar > ChrW(57)) Then e.KeyChar = ChrW(0) End If End Sub e As o KeyDown, KeyUp: mỗi sự kiện KeyPress lại cho ta một cặp sự kiện KeyDown/KeyUp. 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. Trong ví dụ dưới đây, ta hiển thị tên các phím chức năng mà người sử dụng chương trình nhấn vào: Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown If e.KeyCode >= Keys.F1 And e.KeyCode <= Keys.F12 Then MsgBox("B n v a nh n phím ch c năng: F" & e.KeyCode - 111) End If End Sub e As
  • 20. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET CHƯƠNG 3: LẬP TRÌNH CẤU TRÚC TRONG VISUAL BASIC M c tiêu: Chương này gi i thi u v các c u trúc l p trình trong VB; đây là các c u trúc c t lõi đ xây d ng nên m t chương trình VB. H c xong chương này, sinh viên ph i n m b t đư c các v n đ sau: - S d ng môi trư ng l p trình VB đ vi t mã l nh. - Các ki u d li u trong VB. - Cách khai báo h ng, bi n trong VB. - Bi u th c trong VB. - Các câu l nh đơn cũng như các câu l nh có c u trúc. - Chương trình con trong VB. - B y l i trong VB. Ki n th c có liên quan: - Cách s d ng môi trư ng phát tri n c a VB. I. Môi trường lập trình I.1. Soạn thảo chương trình: Trong lập trình Visual Basic .NET, cửa sổ mã lệnh (Code) cho phép soạn thảo chương trình. Cửa sổ này có một số chức năng nổi bật: o Đánh dấu (Bookmarks): Chức năng này cho phép đánh dấu các dòng lệnh của chương trình trong cửa sổ mã lệnh để dễ dàng xem lại về sau này. Để bật tắt khả năng này, chọn Bookmarks từ menu Edit, hoặc chọn từ thanh công cụ Edit. o Các phím tắt trong cửa sổ mã lệnh: Chöùc naêng Xem cửa sổ Code Xem cửa sổ Object Browser Tìm kiếm Thay thế Tìm tiếp Tìm ngược Chuyển đến thủ tục kế tiếp Chuyển đến thủ tục trước đó Xem định nghĩa Cuộn xuống một màn hình Cuộn lên một màn hình Phím taét F7 F2 CTRL+F CTRL+H SHIFT+F4 SHIFT+F3 CTRL+DOWN ARROW CTRL+UP ARROW SHIFT+F2 CTRL+PAGE DOWN CTRL+PAGE UP
  • 21. Biên soạn: Nguyễn Vũ Duy Quang Nhảy về vị trí trước đó Trở về đầu của mô-đun Đến cuối mô-đun Visual Basic .NET CTRL+SHIFT+F2 CTRL+HOME CTRL+END I.2. Các chức năng tự động: o Tự động kiểm tra cú pháp (Auto Syntax Check) Nếu chức năng này không được bật thì khi ta viết một dòng mã có chứa lỗi, VB chỉ hiển thị dòng chương trình sai với màu đỏ nhưng không kèm theo chú thích gì và tất nhiên ta có thể viết tiếp các dòng lệnh khác. Còn khi chức năng này được bật, VB sẽ cho ta biết một số thông tin về lỗi và hiển thị con trỏ ngay dòng chương trình lỗi để chờ ta sửa. o Gợi nhớ mã lệnh (Code): Khả năng Auto List Members: Tự động hiển thị danh sách các thuộc tính và phương thức của 1 điều khiển hay một đối tượng khi ta gõ vào tên của chúng. Chọn thuộc tính hay phương thức cần thao tác và nhấn phím Tab hoặc Space để đưa nó vào chương trình. II. Kiểu dữ liệu II.1. Khái niệm: Kiểu dữ liệu là một tập hợp các giá trị mà một biến của kiểu có thể nhận và một tập hợp các phép toán có thể áp dụng trên các giá trị đó. II.2. Các kiểu dữ liệu cơ sở trong Visual Basic Kiểu dữ liệu Mô tả Boolean Gồm 2 giá trị: TRUE & FALSE. Byte Các giá trị số nguyên từ 0 đến 255 Short Các giá trị số nguyên từ -32.678 đến 32.767 Integer Các giá trị số nguyên từ -2.147.483.648 đến 2.147.483.647 Long Các giá trị số nguyên từ -9.223.372.036.854.775.808 đến 9.223.372.036.854.775.807 . Kiểu dữ liệu này thường được gọi là số nguyên dài. Single Các giá trị số thực từ -3,402823E+38 đến 1,401298E-45 cho số âm. 1,401298E-45 đến 3,402823E+38 cho các số dương.
  • 22. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET Double Các giá trị số thực từ -1.79769313486232E+308 đến 1.79769313486232E+308. Kiểu dữ liệu này được gọi là độ chính xác kép. Char Lưu trữ một ký tự. String Lưu trữ các chuỗi văn bản, lên đến 2 tỉ ký tự. Date Dữ liệu kiểu ngày tháng, có giá trị từ 01/01/100 đến 31/12/9999. III. Hằng số III.1. Khái niệm Hằng số (Constant) là giá trị dữ liệu không thay đổi trong chương trình vào bất cứ thời điểm nào. Người lập trình có thể định nghĩa một giá trị là một hằng khi khai báo nó. III.2. Khai báo hằng Const <tên hằng> [As <kiểu dữ liệu>] = <biểu thức> Trong đó, tên hằng được đặt giống theo quy tắc đặt tên của điều khiển. Ví dụ: Const g = 9.8 Const Num As Integer = 4*5 III) Biến III.1. 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. Biến có 2 đăc điểm: o Mỗi biến có một tên. o Mỗi biến có thể chứa duy nhất một loại dữ liệu. III.2. Khai báo [Public|Private|Static|Dim] <tên biến> [ As <kiểu dữ liệu> ] Trong đó, tên biến: là một tên được đặt giống quy tắc đặt tên điều khiển. Nếu cần khai báo nhiều biến trên một dòng thì mỗi khai báo cách nhau dấu phNy (,). Nếu khai báo biến không xác định kiểu dữ liệu thì biến đó có kiểu Variant. Khai báo ngầm: Đây là hình thức không cần phải khai báo một biến trước khi sử dụng. Cách dùng này có vẻ thuận tiện nhưng sẽ gây một số sai sót, chẳng hạn khi ta đánh nhầm tên biến, VB sẽ hiểu đó là một biến mới dẫn đến kết quả chương trình sai mà rất khó phát hiện.
  • 23. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET Ví dụ: Dim Num As Long, a As Single Dim Age As Integer Khai báo tường minh: Để tránh rắc rối như đã nêu ở trên, ta nên quy định rằng VB sẽ báo lỗi khi gặp biến chưa được khai báo bằng dòng lệnh: IV. Biểu thức IV.1. Khái niệm Toán tử hay phép toán (Operator): là từ hay ký hiệu nhằm thực hiện phép tính và xử lý dữ liệu. Toán hạng: là giá trị dữ liệu (biến, hằng…). Biểu thức: 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 đó. IV.2. Các loại phép toán a. Các phép toán số học: Thao tác trên các giá trị có kiểu dữ liệu số. Phép toán + * Phép lấy số đối Phép cộng hai số Phép trừ hai số Phép nhân hai số Kiểu số (Integer, Single…) Kiểu số (Integer, Single…) Kiểu số (Integer, Single…) Kiểu số (Integer, Single…) / Phép chia hai số Kiểu số (Integer, Single…) Mod ^ Ý nghĩa Kiểu của đối số Phép chia lấy phần nguyên Phép chia lấy phần dư Tính lũy thừa Integer, Long Kiểu của kết quả Như kiểu đối số Như kiểu đối số Như kiểu đối số Như kiểu đối số Single hay Double Integer, Long Integer, Long Integer, Long Kiểu số (Integer, Single…) Như kiểu đối số b. Các phép toán quan hệ Đây là các phép toán mà giá trị trả về của chúng là một giá trị kiểu Boolean (TRUE hay FALSE). Phép toán = <> > < >= <= Ý nghĩa So sánh bằng nhau So sánh khác nhau So sánh lớn hơn So sánh nhỏ hơn So sánh lớn hơn hoặc bằng So sánh nhỏ hơn hoặc bằng
  • 24. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET c. Các phép toán Logic: là các phép toán tác động trên kiểu Boolean và cho kết quả là kiểu Boolean. Các phép toán này bao gồm AND (và), OR (hoặc), NOT (phủ định). Sau đây là bảng giá trị của các phép toán: X TRUE TRUE FALSE FALSE Y TRUE FALSE TRUE FALSE X AND Y TRUE FALSE FALSE FALSE X OR Y TRUE TRUE TRUE FALSE NOT X FALSE FALSE TRUE TRUE IV.3. Các hàm xây dựng sẵn: a. Hàm chuyển đổi: Hàm Cbool Cbyte Cchar Cdate CDbl Cint CLng CSht CStr Ctype Mô tả Chuyển đổi thành một giá trị Boolean. Tất cả các giá trị là False hay 0 sẽ được chuyển thành False; Các giá trị khác sẽ chuyển thành True Chuyển thành một byte. Tất cả các giá trị lớn hơn 255, hay phần thập phân sẽ bị mất. Chuyển thành một ký tự đơn. Nếu giá trị lớn hơn 65.535 thì nó sẽ bị mất. Nếu chuyển một chuỗi, thì chỉ có ký tự đầu tiên được chuyển. Chuyển thành một ngày. Chuyển thành giá trị Double. Chuyển thành một số Interger. Phần thập phân được làm tròn. Chuyển thành một số Long. Phần thập phân được làm tròn. Chuyển thành một số Short. Phần thập phân được làm tròn. Chuyển thành một chuỗi. Nếu giá trị là Date thì kết quả là chuỗi định dạng là Short Date. Chuyển thành bất kỳ kiểu nào. Cú pháp của hàm này hơi khác so với các hàm trên. NewVariable = Ctype(OldVariable, NewType) OldVariable là biến chứa giá trị cần chuyển, NewVariable là biến lưu giá trị sau khi chuyển đổi, NewType là kiễu dữ liệu mới cần chuyển. b. Hàm toán học Các hàm này được cung cấp trong lớp System.Math. Để sử dụng được lớp này ta phải khai báo phía trên đầu của cửa sổ Code Editor, bên trên phát biểu Public Class TênForm dòng lệnh sau: Imports System.Math ABS(n) : Trả về trị tuyệt đối của n. Atan(n) : Trả về Artang của n (n tính bằng radian). Cos(n) : Trả về cos của góc n (n tính bằng radian). Sin(n) : Trả về sin của góc n (n tính bằng radian). Tan(n) : Trả về tan của góc n (n tính bằng radian). Exp(n) : Trả về e mũ n. Sign(n) : Trả về -1 nếu n<0, 1 nếu n>0 và 0 nếu n=0. Sqrt(n) : Trả về căn bậc 2 của n.
  • 25. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET c. Hàm xử lý chuỗi: Len(S) : Trả về độ dài của chuỗi S. N = len(“Hello”) => N =5. Chr(N) : Trả về ký tự có giá trị ASCII hay Unicode là N. S = chr(65) => S=“A” Asc(Ch) : Trả về giá trị ASCII hay Unicode của ký tự Ch. N=Asc(“A”) => N=65 Lcase(S) : Chuyển tất cả các ký tự trong chuỗi thành chữ thường. Ucase(S) : Chuyển tất cá các ký tự trong chuỗi thành chữ in hoa. Ltrim(S) : Bỏ tất cả các khoản trắng đứng trước chuỗi. S = Ltrim(“ Hello ”) => S = “Hello ” Rtrim(S) : Bỏ tất cả các khoản trắng đứng sau chuỗi. S = Rtrim(“ Hello ”) => S = “ Hello” Trim(S) : Bỏ tất cả các khoản trắng đứng trước và sau chuỗi. S = Trim(“ Hello ”) => S = “Hello” d. Các hàm hữu dụng khác: IsArray : Trả về True nếu tham số truyền vào là một mảng N = IsArray(a) => N = True nếu a là mảng. IsDate : Trả về True nếu thám số truyền vào là một ngày. IsNumeric : Trả về True nếu tham số truyền vào là một số. IsObject : Trả vể True nếu tham số truyền vào là một kiểu đối tượng. TypeName : Trả về tên kiểu dữ liệu của tham số. Now : Trả về ngày giờ hiện tại. Today : Trả về ngày hiện tại với thời gian là 0:00:00 am. V. Câu lệnh Một câu lệnh (statement) xác định một công việc mà chương trình phải thực hiện để xử lý dữ liệu đã được mô tả và khai báo. Các câu lệnh được ngăn cách với nhau bởi ký tự xuống dòng. Ký tự xuống dòng báo hiệu kết thúc một câu lệnh. V.1. Lệnh gán Cú pháp: <Tên biến> = <Biểu thức> Ví dụ: Giả sử ta có khai báo sau: Dim TodayTemp As Single, MinAge As Integer Dim Sales, NewSales As Single, FullName As String Các lệnh sau gán giá trị cho các biến trên: TodayTemp = 30.5 MinAge = 18 Sales = 200000 NewSales = Sales * 1.2 Giả sử người dùng cần nhập họ và tên vào ô nhập liệu TextBox có thuộc tính Name là txtName, câu lệnh dưới đây sẽ lưu giá trị của ô nhập liệu vào trong biến FullName: FullName = txtName.Text Lưu ý: Kiểu dữ liệu của biểu thức (vế phải của lệnh gán) phải phù hợp với biến ta cần gán trị.
  • 26. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET V.2. Lệnh rẽ nhánh If o Một dòng lệnh: If <điều kiện> Then <Lệnh 1> [Else <Lệnh 2>] o Nhiều dòng lệnh: If <điều kiện> Then Nhóm lệnh 1 [Else Nhóm lệnh 2] End If o Dạng đầy đủ If <điều kiện 1> Then Nhóm lệnh 1 ElseIf <điều kiện 2> Then Nhóm lệnh 2 … ElseIf <điều kiện n> Then Nhóm lệnh n [Else Nhóm lệnh n+1] End If Lưu đồ cú pháp: Đúng Đ.Kiện Sai Sai (Không có Else) Nhóm lệnh1 Nhóm lệnh 2 Trong đó, <điều kiện>: biểu thức mà kết quả trả về kiểu Boolean. Ý nghĩa câu lệnh: Nhóm lệnh hay lệnh sẽ được thi hành nếu như điều kiện là đúng. Còn nếu như điều kiện là sai thì VB sẽ kiểm tra các điều kiện, nếu điều kiện nào đúng thì khối lệnh tương ứng sẽ được thi hành. Ngược lại nếu không có điều kiện nào đúng thì khối lệnh sau từ khóa Else sẽ được thi hành. Ví dụ: Tính số lớn nhất trong hai số (Như hình)
  • 27. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET Yêu cầu: Hoàn thành bài tập Giải PT bậc 1 và Giải PT bậc 2 V.3. Lệnh lựa chọn Select Case Trong trường hợp có quá nhiều các điều kiện cần phải kiểm tra, nếu ta dùng cấu trúc rẽ nhánh If…Then thì đoạn lệnh không được trong sáng, khó kiểm tra, sửa đổi khi có sai sót. Ngược lại với cấu trúc Select…Case, biểu thức điều kiện sẽ được tính toán một lần vào đầu cấu trúc, sau đó VB sẽ so sánh kết quả với từng trường hợp (Case). Nếu bằng nó thi hành khối lệnh trong trường hợp (Case) đó. Select Case <biểu thức kiểm tra> Case <Danh sách kết quả biểu thức 1> [Khối lệnh 1] Case <Danh sách kết quả biểu thức 2> [Khối lệnh 2] ... [Case Else [Khối lệnh n]] End Select Mỗi danh sách kết quả biểu thức sẽ chứa một hoặc nhiều giá trị. Trong trường hợp có nhiều giá trị thì mỗi giá trị cách nhau bởi dấu phNy (,). Nếu có nhiều Case cùng thỏa điều kiện thì khối lệnh của Case đầu tiên sẽ được thực hiện. Toán tử Is & To Toán tử Is: Được dùng để so sánh <Biểu thức kiểm tra> với một biểu thức nào đó. Toán tử To: Dùng để xác lập miền giá trị của <Biểu thức kiểm tra>. Ví dụ: Select Case Tuoi Case Is < 18 MsgBox("V thành niên.") Case 18 To 30 MsgBox(" ã trư ng thành, l p gia ình ư c r i.") Case 31 To 60 MsgBox("B n ang l a tu i trung niên") Case Else MsgBox("B n ã l n tu i, ngh hưu ư c r i y!") End Select Lưu ý: Trong ví dụ trên không thể viết Case Tuoi < 18.
  • 28. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET Ví dụ: Tính số ngày trong tháng của năm. Select Case Thang Case 1, 3, 5, 7, 8, 10, 12 MsgBox("Có 31 ngày.") Case 2 If nam Mod 4 = 0 Then MsgBox("Có 29 ngày.") Else MsgBox("Có 28 ngày.") End If Case 4, 6, 9, 11 MsgBox("Có 30 ngày.") Case Else MsgBox("Giá tr không h p l !") End Select Bài tập làm thêm: Viết chương trình nhập vào một năm dương lịch và đổi thành năm âm lịch. V.4. Cấu trúc lặp Các cấu trúc lặp cho phép thi hành một khối lệnh nào đó nhiều lần. a. Lặp không biết trước số lần lặp Do ... Loop: Đây là cấu trúc lặp không xác định trước số lần lặp, trong đó, số lần lặp sẽ được quyết định bởi một biểu thức điều kiện. Biểu thức điều kiện phải có kết quả là True hoặc False. Cấu trúc này có 4 kiểu: o Kiểu 1: Do While <điều kiện> <khối lệnh> Loop Khối lệnh sẽ được thi hành đến khi nào điều kiện không còn đúng nữa. Do biểu thức điều kiện được kiểm tra trước khi thi hành khối lệnh, do đó có thể khối lệnh sẽ không được thực hiện một lần nào cả. o Kiểu 2: Do <khối lệnh> Loop While <điều kiện>
  • 29. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET Khối lệnh sẽ được thực hiện, sau đó biểu thức điều kiện được kiểm tra, nếu điều kiện còn đúng thì, khối lệnh sẽ được thực hiện tiếp tục. Do biểu thức điều kiện được kiểm tra sau, do đó khối lệnh sẽ được thực hiện ít nhất một lần. o Kiểu 3: Do Until <điều kiện> <khối lệnh> Loop Cũng tương tự như cấu trúc Do While ... Loop nhưng khác biệt ở chỗ là khối lệnh sẽ được thi hành khi điều kiện còn sai. o Kiểu 4: Do <khối lệnh> Loop Until <điều kiện> Khối lệnh được thi hành trong khi điều kiện còn sai và có ít nhất là một lần lặp. Ví dụ: Đoạn lệnh dưới đây cho phép kiểm tra một số nguyên N có phải là số nguyên tố hay không? Dim i As Integer i = 2 Do While (i <= Sqrt(N)) And (N Mod i = 0) i = i + 1 Loop If (i > Sqrt(N)) And (N <> 1) Then MsgBox(N & " la so nguyen to") Else MsgBox(N & " khong la so nguyen to") End If b. Lặp biết trước số lần lặp For ... Next Đây là cấu trúc biết trước số lần lặp, ta dùng biến đếm tăng dần hoặc giảm dần để xác định số lần lặp. For <biến đếm> = <điểm đầu> To <điểm cuối> [Step <bước nhảy>] [khối lệnh] Next Biến đếm, điểm đầu, điểm cuối, bước nhảy là những giá trị số (Integer, Single,…). Bước nhảy có thể là âm hoặc dương. Nếu bước nhảy là số âm thì điểm đầu phải lớn hơn điểm cuối, nếu không khối lệnh sẽ không được thi hành. Khi Step không được chỉ ra, VB sẽ dùng bước nhảy mặc định là một. Ví dụ: Tính N!
  • 30. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET For Each ... Next Tương tự vòng lặp For ... Next, nhưng nó lặp khối lệnh theo số phần tử của một tập các đối tượng hay một mảng thay vì theo số lần lặp xác định. Vòng lặp này tiện lợi khi ta không biết chính xác bao nhiêu phần tử trong tập hợp. For Each <phần tử> In <nhóm> <khối lệnh> Next <phần tử> 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. VI. Biến: o khái niệm Module: - Một ứng dụng đơn giản có thể chỉ có một biểu mẫu, lúc đó tất cả mã lệnh của ứng dụng đó được đặt trong cửa sổ mã lệnh của biểu mẫu đó (gọi là Form Module). Khi ứng dụng được phát triển lớn lên, chúng ta có thể có thêm một số biểu mẫu nữa và lúc này khả năng lặp đi lặp lại nhiều lần của một đoạn mã lệnh trong nhiều biểu mẫu khác nhau là rất lớn. - Để tránh việc lặp đi lặp lại trên, ta tạo ra một Module riêng rẽ chứa các chương trình con được dùng chung. VI.1. Biến toàn cục o Khái niệm: Biến toàn cục là biến có phạm vi hoạt động trong toàn bộ ứng dụng. o Khai báo: Global <Tên biến> [As <Kiểu dữ liệu>] VI.2. Biến cục bộ o Khái niệm: Biến cục bộ là biến chỉ có hiệu lực trong những chương trình mà chúng được định nghĩa. o Khai báo: Dim <Tên biến> [As <Kiểu dữ liệu>] o Lưu ý: Biến cục bộ được định nghĩa bằng từ khóa Dim sẽ kết thúc ngay khi việc thi hành thủ tục kết thúc. Xét VD: Public Class Form1 Dim KQ As Double = 1 Dim i As Integer Function GiaiThua(ByVal n As Integer) As Double For i = n To 1 Step -1 KQ *= i Next
  • 31. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET Return KQ End Function Private Sub bttnGiaiThua_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttnGiaiThua.Click txtKQ.Text = txtSoN.Text & "! = " & GiaiThua(txtSoN.Text) End Sub Private Sub bttnTongGiaiThua_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttnTongGiaiThua.Click For i = 1 To CInt(txtSoN.Text) KQ = KQ + GiaiThua(i) Next txtKQ.Text = "T ng các giai th a t 1 n " & txtSoN.Text & " = " & KQ End Sub End Class Tìm xem các lỗi có thể xảy ra với đoạn mã trên. VI.3. Biến Module o Khái niệm: Biến Module là biến được định nghĩa trong phần khai báo (General|Declaration) của Module và mặc nhiên phạm vi hoạt động của nó là toàn bộ Module ấy. o Khai báo: - Biến Module được khai báo bằng từ khóa Dim hay Private & đặt trong phần khai báo của Module. Ví dụ: Private Num As Integer - Tuy nhiên, các biến Module này có thể được sử dụng bởi các chương trình con trong các Module khác. Muốn thế chúng phải được khai báo là Public trong phân Khai báo (General|Declaration) của Module. Ví dụ: Public Num As Integer Lưu ý: Không thể khai báo biến với từ khóa là Public trong chương trình con. Bài tập: Viết một chương trình mã hóa nội dung văn bản. VI.4. Truyền tham số cho chương trình con o Khái niệm Một chương trình con đôi lúc cần thêm một vài thông tin về trạng thái của đoạn mã lệnh mà nó định nghĩa để thực thi. Những thông tin này là các biến được truyền vào khi gọi chương trình con, các biến này gọi là tham số của 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ị (tham trị) & truyền bằng địa chỉ (tham chiếu). o Truyền tham số bằng giá trị Với cách truyền tham số theo cách này, mỗi khi một tham số được truyền vào, một bản sao của biến đó được tạo ra. Nếu chương trình con có thay đổi giá trị, những thay đổi này chỉ tác động lên bản sao của biến. Từ khóa ByVal được dùng để xác định tham số được truyền bằng giá trị.
  • 32. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET Ví dụ: Sub Twice(ByVal Num As Integer) Num = Num * 2 MsgBox(Num) End Sub Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click Dim A As Integer A = 4 MsgBox(A) Twice(A) MsgBox(A) End Sub Kết quả thực hiện của đoạn chương trình trên: ? ? ? o Truyền tham số bằng địa chỉ Truyền tham số theo đị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ớ. Vì thế, giá trị của biến có thể sẽ bị thay đổi bởi đoạn mã lệnh trong chương trình con. Từ khóa ByRef được dùng để xác định tham số được truyền theo địa chỉ. Ví dụ: Sub Twice(ByRef Num As Integer) Num = Num * 2 MsgBox(Num) End Sub Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click Dim A As Integer A = 4 MsgBox(A) Twice(A) MsgBox(A) End Sub Kết quả thực hiện của đoạn chương trình trên: ? ? ? VII. Bẫy lỗi trong Visual Basic Các thao tác bẫy các lỗi thực thi của chương trình là cần thiết đối với các ngôn ngữ lập trình. Người lập trình khó kiểm soát hết các tình huống có thể gây ra lỗi. Chẳng hạn người ta khó có thể kiểm tra chặt chẽ việc người dùng đang chép dữ liệu từ đĩa mềm (hay CD) khi chúng không có trong ổ đĩa. Nếu có các thao tác bẫy lỗi ở đây thì tiện cho người lập trình rất nhiều. Visual Basic cũng cung cấp cho ta một số cấu trúc để bẫy các lỗi đang thực thi. Cú pháp: Dạng 1: On Error GoTo <Tên nhãn> <Các câu lệnh có thể gây ra lỗi> <Tên nhãn>: <Các câu lệnh xử lý lỗi>
  • 33. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET Ý nghĩa: - <Tên nhãn>: là một tên được đặt theo quy tắc của một danh biểu. - Nếu một lệnh trong <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 đó, chương trình sẽ tự động nhảy đến đoạn chương trình định nghĩa bên dưới <Tên nhãn> để thực thi. Dạng 2: On Error Resume Next <Các câu lệnh có thể gây ra lỗi> Ý 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 đó, chương trình sẽ tự động bỏ qua câu lệnh bị lỗi và thực thi câu lệnh kế tiếp. Dạng 3: Try <Các câu lệnh có thể gây ra lỗi> Catch ex as exception <Các câu lệnh xử lý lỗi> End Ý nghĩa: - ex: là một biến chứa các mã lỗi và câu thông báo lỗi. - 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 đó, chương trình sẽ tự động nhảy đến đoạn chương trình sau Catch <Các câu lệnh xử lý lỗi> để thực thi. Nếu có xảy ra lỗi thì chương trình sẽ không thực thi các đoạn lệnh sau Catch và kết thúc End. VIII. Kiểu Mảng VIII.1. 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 mảng sẽ làm cho chương trình đơn giản và gọn hơn vì ta có thể sử dụng vòng lặp. 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. VIII.2. Khai báo o Mảng có chiều dài cố định: Dim <Tên biến mảng>(<Kích thước>) [As <Kiểu>] Lúc này phần tử đầu tiên có chỉ số là 0 & phần tử cuối cùng có chỉ số là <Kích thước>. Dim <Tên biến mảng>(<Chỉ số đầu> To <Chỉ số cuối>) [As <Kiểu>] Ví dụ: Khai báo một biến mảng 15 phần tử kiểu Integer Dim Counters(14)As Integer Khai báo một biến mảng 10 phần tử kiểu chuỗi ký tự
  • 34. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET Dim List (1 To 10) As String - Hàm UBound trả về biên trên của một mảng. - Hàm LBound trả về biên dưới của một mảng. o Mảng động: - Đây là mảng có kích thước thay đổi, đó là một trong những ưu điểm của mảng động vì nó giúp ta tiết kiệm tài nguyên hệ thống. Ta có thể sử dụng một mảng có kích thước lớn trong một thời gian nào đó rồi xoá bỏ để trả lại vùng nhớ cho hệ thống. - Khai báo một mảng động bằng cách cho nó một danh sách không theo chiều nào cả. Cú pháp: Dim <Tên mảng> () [As <Kiểu>] Ví dụ: Dim DynArray() As Integer Sau đó ta có thể cấp phát số phần tử thật sự bằng lệnh ReDim. ReDim <Tên mảng>(N) ' Trong đó N là một biểu thức kiểu Integer. ReDim dùng để xác định hay thay đổi kích thước của một mảng động. Ta có thể dùng ReDim để thay đổi số phần tử, số chiều của một mảng nhiều lần nhưng không thể thay đổi kiểu dữ liệu của mảng ngoại trừ kiểu mảng là kiểu Variant. Mỗi lần gọi ReDim tất cả các giá trị chứa trong mảng sẽ bị mất. VB khởi tạo lại giá trị cho chúng (Empty đối với mảng Variant, 0 cho mảng kiểu số, chuỗi rỗng cho mảng chuổi hoặc Nothing cho mảng các đối tượng). Nhưng đôi khi ta muốn tăng kích cỡ của mảng nhưng không muốn làm mất dữ liệu, ta dùng ReDim đi kèm với từ khoá Preserve. Ta xem ví dụ dưới đây: ReDim Preserve DynArray (UBound(DynArray) +10) Tuy nhiên chỉ có biên trên của chiều cuối cùng trong mảng được thay đổi khi ta dùng Preserve. Nếu ta cố tình thay đổi chiều khác hoặc biên dưới thì VB sẽ báo lỗi. VIII.3. Một số thao tác trên mảng o Truy xuất từng phần tử trong mảng: <Tên mảng>(<Vị trí>) o Sao chép mảng: Đối với VB6, ta có thể gán một mảng cho một mảng khác, hoặc kết quả trả về của một hàm có thể là một mảng. Ví dụ: Sub ByteCopy (old () As Byte, New () As Byte) New = old End Sub Tuy nhiên, cách này cũng chỉ áp dụng được cho mảng khai báo động mà thôi. Khi gán biến, có một số quy luật mà ta cần lưu ý: Đó là quy luật về kiểu dữ liệu và quy luật về kích thước và số chiều của mảng. Bài tập: 1. Sửa lại bài đổi một năm dương lịch sang năm âm lịch dùng mảng. 2. Thiết kế chương trình cho phép nhập vào một số nguyên N; sau đó phân tích số nguyên này ra thừa số nguyên tố sử dụng mảng động.
  • 35. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET VII. Kiểu do người dùng định nghĩa - Kiểu m u tin Cú pháp: Structure <tên kiểu> Dim <Tên trường 1> : <Kiểu trường 1> Dim <Tên trường 2> : <Kiểu trường 2> : <Tên trường n> : <Kiểu trường n> End Structure Ví dụ: Structure TEmployee Dim Fullname As String Dim Salary As Single Dim Age As Integer End Structure Chúng ta vừa định nghĩa một kiểu dữ liệu mới có tên là TEmployee. Kiểu này có nét tương tự như một lớp. Về mặt chức năng, cả hai là như nhau, nhưng một lớp có thể chứa trong DLL và sẵn sàng cho việc dùng chung với các ứng dụng khác, trong khi đó kiểu dữ liệu do người dùng định nghĩa phải được khai báo lại trong từng dự án. Do vậy, kiểu lớp có nhiều mặt tiện lợi hơn. Cách truy xuất từng trường của kiểu mNu tin: <Tên biến m u tin>.<Tên trường> Ví dụ: Giả sử ta có khai báo biến sau: Dim e As TEmployee Ta có thể gán: e.Fullname = “Nguyen Van An” e.Salary = 300000.00 e.Age = 26 Câu lệnh With: - Được sử dụng để viết gọn hơn khi thao tác với dữ liệu kiểu mNu tin. - Cú pháp: With <Tên biến mNu tin> .<Tên trường> End With Ví dụ: Dim e As TEmployee Ta có thể gán: With e .Fullname = “Nguyen Van An” .Salary = 300000.00 .Age = 26 End With
  • 36. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET CHƯƠNG 5 THIẾT KẾ BIỂU MẪU DÙNG CÁC ĐIỀU KHIỂN M c tiêu: Chương này gi i thi u v các đi u khi n dùng trong vi c t o giao di n cho các ng d ng ch y trên Windows. Vi c n m b t đư c các v n đ này làm cho công vi c t o giao di n cho ng d ng đư c nhanh chóng. H c xong chương này, sinh viên ph i n m b t đư c các v n đ sau: -S d ng các đi u khi n h p danh sách, h p l a ch n đ lưu các danh sách. - S d ng các đi u khi n h p đánh d u, nút l a ch n đ nh n/hi n th d li u d ng Yes/No. - S d ng các đi u khi n h p hình nh, đi u khi n nh đ hi n th nh. - S d ng đi u khi n thanh cu n đ nh n/hi n th d li u s . - S d ng đi u khi n th i gian đ đáp ng s trôi đi c a th i gian. - M t s đi u khi n khác. Ki n th c có liên quan: - Các c u trúc l p trình trong VB. - Cách th c x lý s ki n. I. Sử dụng các điều khiển I.1 Điều khiển danh sách các lựa chọn (List Box) I.1.1. Khái niệm: Điều khiển này hiển thị một danh sách các đề mục mà ở đó người dùng có thể chọn lựa một hoặc nhiều đề mục Điều khiển này hiển thị một danh sách các đề mục mà ở đó người dùng có thể chọn lựa một hoặc nhiều đề mục List Box giới thiệu với người dùng một danh sách các lựa chọn. Một cách mặc định, các lựa chọn hiển thị theo chiều dọc trên một cột và bạn có thể thiết lập là hiển thị theo nhiều cột. Nếu số lượng các lựa chọn nhiều và không thể hiển thị hết trong danh sách thì một thanh trượt sẽ tự động xuất hiện trên điều khiển. Dưới đây là một ví dụ về danh sách các lựa chọn đơn cột. I.1.2. Thuộc tính: o Name: Đây là tên của danh sách lựa chọn, được sử dụng như một định danh. o SelectionMode: Thuộc tính này cho phép List Box có được phép có nhiều lựa chọn khi thực thi hay không? Mặc định là One chỉ cho phép chọn một. o Sort: List Box có sắp xếp hay không?
  • 37. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET o Ngoài ra còn có một số thuộc tính thông dụng khác như: Font, Width, Height… I.1.3. Phương thức: o Items.Add: Thêm một phần tử vào List Box. Cú pháp: <Name>.Items.Add(Item As String, [Index]) Tham số Name Item Index Diễn giải Tên của List Box. Nên đặt là lstTên Biểu thức chuỗi (đề mục) cần thêm vào. Xác định vị trí đề mục mới được chèn vào, giá trị 0 xác định cho vị trí đầu tiên. Khi không chỉ định rõ Index thì phần tử thêm vào là mục cuối cùng trong List Box mới. o Items.RemoveAt(<Index>): Xóa một phần tử ra khỏi List Box. Cú pháp: <Name>.Items.RemoveAt (Index) Tham số Name và Index giống như ở trường hợp thêm vào một đề mục. o Items.Clear: Xóa tất cả các mục trong List Box. Cú pháp <Name>.Items.lear o Text: Nhận giá trị từ List Box khi một đề mục được chọn. o SelectedIndex: trả về vị trí index của mục đang được chọn. Nếu không chọn mục nào trong ListBox thì giá trị trả về là -1. o GetSelected(Index): Cho biết mục có vị trí Index có được chọn hay không nếu được chọn thì trả về True ngược lại trả về False. I.1.4. Sự kiện: o Click & Double Click: Xảy ra khi người sử dụng nhấp chuột (hay nhấp đúp) vào List Box. Thông thường người sử dụng sẽ thiết kế một nút lệnh đi kèm để nhận về giá trị do người dùng chọn. Khi đó công việc thực hiện sau khi nút lệnh được chọn sẽ phụ thuộc vào giá trị người dùng chọn từ List Box. Double Click lên một đề mục trong danh sách cũng có kết quả tương tự như việc chọn một đề mục trong danh sách rồi ấn lên nút lệnh. Để thực hiện công việc như trên trong sự kiện Double Click của List Box ta sẽ gọi đến sự kiện Click của nút lệnh. Ví dụ: Viết chương trình gồm hai listbox. Một listbox chứa danh sách các loại trái cây và một danh sách trống. Khi chọn một loại trái cây bất kỳ từ danh sách trái cây và nhấn nút chuyển sang (> hay >> ) thì trái cây đó sẽ chuyển sang listbox kia và sẽ bị mất đi trên listbox hiện tại. Như hình:
  • 38. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET II.2 Điều khiển hộp lựa chọn (Combo Box) Điều khiển ComboBox có thể được xem là tích hợp giữa hai điều khiển TextBox và ListBox. Người dùng có thể chọn một đề mục bằng cách đánh chuỗi văn bản vào Combo Box hoặc chọn một đề mục trong danh sách. Điểm khác nhau cơ bản giữa ComboBox và ListBox là điều khiển Combo chỉ gợi ý (hay đề nghị) các lựa chọn trong khi đó điều khiển List thì giới hạn các đề mục nhập vào tức là người dùng chỉ có thể chọn những đề mục có trong danh sách. Điều khiển Combo chứa cả ô nhập liệu nên người dùng có thể đưa vào một đề mục không có sẵn trong danh sách. Các dạng của điều khiển ComboBox: Có tất cả 3 dạng của điều khiển ComboBox. Ta có thể chọn dạng của Combo tại thời điểm thiết kế.
  • 39. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET Kiểu Giá trị Hằng Single ComboBoxStyle.Single 0 Drop down 1 ComboBoxStyle.DropDown Drop down List 2 ComboBoxStyle.DropDownList - Single: Người dùng có thể chọn từ danh sách các đề mục đã được hiển thị sẵn ngay bên dưới ComboBox. Để hiển thị tất cả các đề mục, bạn cần thiết kế Combo đủ lớn. Một thanh trượt sẽ xuất hiện khi còn đề mục chưa được hiển thị hết. - Drop down: Đây là dạng mặc nhiên của Combo. Người dùng có thể nhập vào trực tiếp hoặc chọn từ danh sách các đề mục. - Drop down List: Dạng này rất giống như một List box. Một điểm khác biệt đó là các đề mục sẽ không hiển thị đến khi nào người dùng Click lên mũi tên phía phải của điều khiển. Điểm khác biệt với dạng thứ 2 đó là người dùng không thể nhập vào trực tiếp một chuỗi không có trong danh sách. Các thuộc tính cũng như các phương thức áp dụng trên Combo Box giống như trên List Box. II.3 Điều khiển hộp đánh dấu (Check Box) II.3.1. Khái niệm: Đây là điều khiển hiển thị dấu nếu như được chọn và dấu bị xoá nếu như không chọn. Dùng điều khiển Check Box để nhận thông tin từ người dùng theo dạng Yes/No hoặc True/False. Ta cũng có thể dùng nhiều điều khiển trong một nhóm để hiển thị nhiều khả năng lựa chọn trong khi chỉ có một được chọn. Khi Check Box được chọn, nó có giá trị 1 và ngược lại có giá trị 0. II.3.2. Thuộc tính: o Name: thuộc tính tên. o Checked: Giá trị hiện thời trên Check Box. Có thể nhận các giá trị: Checked (True), Unchecked (False) II.3.3. Sự kiện: o Click: Xảy ra khi người sử dụng nhấp chuột trên Check Box. II.4 Điều khiển nút lựa chọn (RadioButton) II.4.1. Khái niệm: Công dụng của điều khiển Radiobutton cũng tương tự như điều khiển Check Box. Điểm khác nhau chủ yếu giữa hai loại điều khiển này đó là: Các RadioButton của cùng một nhóm tại mỗi thời điểm chỉ có một điều khiển nhất định được chọn. Cách sử dụng Radiobutton cũng tương tự như của Check Box. Tạo nhóm Radion Button Tất cả các Radion button đặt trực tiếp trên biểu mẫu (có nghĩa là không thuộc vào Groupbox hoặc Picture Box) sẽ được xem như là một nhóm. Nếu người dùng muốn tạo
  • 40. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET một nhóm các Radion button khác thì bắt buộc phải đặt chúng bên trong phạm vi của một Groupbox hoặc Picture box. II.4.2. Thuộc tính: o Name: thuộc tính tên của điều khiển Radion Button. o Checked: Giá trị hiện thời trên Radion Button. Có thể nhận các giá trị: True & False. II.4.3. Sự kiện: • Click: Xảy ra khi người sử dụng nhấp chuột trên Option Button. II.5 Điều khiển thanh cuộn ngang (HScrollBar) II.5.1. Khái niệm: Là điều khiển có thanh trượt cho phép cuộn ngang và người dùng có thể sử dụng HScrollBar như một thiết bị nhập hoặc một thiết bị chỉ định cho số lượng hoặc vận tốc. Ví dụ ta thiết kế volume cho một trò chơi trên máy tính hoặc để diễn đạt có bao nhiêu thời gian trôi qua trong một khoảng định thời nhất định. Khi người dùng sử dụng Scroll Bar như một thiết bị chỉ định số lượng thì người dùng cần xác định giá trị cho hai thuộc tính Max và Min để đưa ra khoảng thay đổi thích hợp. II.5.2. Thuộc tính: o Name: Tên của thanh cuộn. o Min: Là giá trị nhỏ nhất trên thanh cuộn. o Max:: Giá trị lớn nhất của thanh cuộn. o Largechange: Thuộc tính này dùng để xác định khoảng thay đổi khi người dùng ấn chuột lên Hscrollbar. o Smallchange: Thuộc tính này dùng để xác định khoảng thay đổi khi người dùng ấn lên mũi tên phía cuối thanh cuộn. o Value: Thuộc tính này trả về giá trị tại một thời điểm của thanh cuộn nằm trong khoảng giá trị [Min, Max] mà người dùng đã xác định. II.5.3. Sự kiện: o Scroll: Xảy ra mỗi khi ta di chuyển con trỏ thanh cuộn. II.5.4. Ví dụ:
  • 41. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET II.6 Điều khiển thời gian (Timer) II.6.1. Khái niệm: Điều khiển Timer đáp ứng lại sự trôi đi của thời gian. Nó độc lập với người sử dụng và ta có thể lập trình để thực hiện một công việc nào đó cứ sau một khoảng thời gian đều nhau. Việc đưa một điều khiển Timer và trong một biểu mẫu cũng tương tự như những điều khiển khác. Ở đây, ta chỉ có thể quan sát được vị trí của điều khiển Timer tại giai đoạn thiết kế, khi chạy ứng dụng điều khiển Timer coi như không có thể hiện trên biểu mẫu. II.10.2. Thuộc tính: o Name: tên của điều khiển Timer. o Interval: Đây là thuộc tính chỉ rõ số ms giữa hai sự kiện kế tiếp nhau. Trừ khi nó bị vô hiệu hóa, mỗi điều khiển Timer sẽ luôn nhận được một sự kiện sau một khoảng thời gian đều nhau. Thuộc tính Interval được thiết lập là 1000 (tức 1 giây). o Enabled: nếu giá trị là True nghĩa là điều khiển Timer được kích hoạt và ngược lại. II.10.3. Sự kiện: o 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). II.10.4. Sử dụng điều khiển Timer: o Khởi tạo một điều khiển Timer: Nếu lập trình viên muốn điều khiển Timer hoạt động ngay tại thời điểm biểu mẫu chứa nó được nạp thì đặt thuộc tính Enable là TRUE hoặc có thể dùng một sự kiện nào đó từ bên ngoài để kích hoạt điều khiển Timer. o Lập trình đáp ứng sự kiện trả về từ điều khiển Timer: Ta sẽ đưa mã lệnh của công viêc cần thực hiện vào trong sự kiện Timer của điều khiển Timer. Sau đây là ví dụ khởi tạo một đồng hồ số nhờ vào điều khiển Timer. Đ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.
  • 42. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET II.11 Điều khiển danh sách ổ đĩa (DriveListbox), danh sách thư mục (DirListbox), danh sách tập tin (FileListbox) II.11.1. Khái niệm: o Điều khiển DriveListbox trình bày những ổ đĩa của hệ thống và cho phép người dùng chọn một trong những ổ đĩa đó. o Điều khiển DirListbox cho phép trình bày những thư mục và đường dẫn tại thời điểm chạy ứng dụng. Sử dụng điều khiển này để trình bày một danh sách có thứ bậc của các thư mục, có nghĩa là người dùng có thể mở một tài liệu từ danh sách các tài liệu đã có sẵn. o Điều khiển FileListbox cho phép trình bày những tài liệu có sẵn trong thư mục hiện hành. Bạn có thể dùng thuộc tính Partten để xác định kiểu tập tin nào được hiển thị trong danh sách. Biểu tượng shortcut (FileListbox) trên hộp công cuï Thông thường các ứng dụng sẽ sử dụng kết hợp cả ba loại điều khiển trên là DriveListbox, DirListbox và FileListbox. II.11.2. Ví dụ: Các thuộc tính được thiết lập tại thời điểm thiết kế FileListbox: Partten = "*.doc" DriveListbox, DirListbox FileListbox: FontName = "Vncourier New". Tức là điều khiển FileListbox chỉ hiển thị các tập tin của Microsoft Word. 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. Cần chú ý rằng đố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 ở đĩa nếu không sẽ xảy ra lỗi tại thời điểm chạy ứng dụng. Private Sub drilstDriver_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles drilstDriver.SelectedIndexChanged On Error GoTo Loi dirDirectory.Path = drilstDriver.Drive Exit Sub Loi: MsgBox("Không có CD hay ĩa m m") End Sub Private Sub dirDirectory_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dirDirectory.SelectedIndexChanged fileListFile.Path = dirDirectory.Path End Sub Bên trên là những đoạn mã đáp ứng lại việc người dùng chọn việc thay đổi ổ đĩa và thư mục. Trong danh sách các tập tin ta chỉ hiển thị những file *.doc.
  • 43. Biên soạn: Nguyễn Vũ Duy Quang Bài tập ví dụ: dùng Timer, ProgressBar, CheckBox và RadioButtom Visual Basic .NET
  • 44. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET CHƯƠNG 6: LẬP TRÌNH XỬ LÝ GIAO DIỆN & ĐỒ HỌA M c tiêu: Chương này gi i thi u v cách t o menu cũng như m t s hàm x lý đ h a, nh ng thành ph n quan tr ng trong các ng d ng ch y trên Windows. H c xong chương này, sinh viên ph i n m b t đư c các v n đ sau: - S d ng menu trong thi t k giao di n. - S d ng các h p tho i trong thi t k ng d ng. - S d ng các phương th c đ h a cùng v i cách x lý m t s s ki n đ t o các ng d ng đ h a. Ki n th c có liên quan: - Các c u trúc l p trình trong VB. - Cách th c x lý s ki n. I. Menu Drop-Down I.1. Khái niệm Menu là một loại điều khiển trong đó người sử dụng có thể 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): là dạng menu thông dụng nhất. - Menu bật ra (Pop-Up Menu): thường hiển thị khi ta ấn nút phải chuột. I.2. Các thuộc tính của Menu - Text: Là chuỗi hiển thị trên menu. - Name: Phải duy nhất và dễ nhớ. Đây là tên để nhận biết thành phần nào của Menu được chọn. - Shortcut: dùng để thiết lập các phím tắt (Shortcut key). - CheckedOnClick: Nếu chọn thuộc tính này thì sẽ có một dấu hiển thị bên cạnh trái, nhưng thuộc tính này không được áp dụng cho những mục menu có chứa menu con. - Enabled: Nếu thuộc tính này không được chọn thì mục này sẽ bị xám đi và người dùng không thể chọn. - Visible: Nếu thuộc tính này không được chọn thì mục này sẽ không được hiển thị. I.3. Các sự kiện - Click: Xảy ra khi người sử dụng chương trình nhấp chuột vào một mục nào đó của Menu.
  • 45. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET I.4. Cách tạo Drop-down Menu Menu cũng là một loại điều khiển, nhưng Windows sẽ kiểm soát việc vẽ menu. Lập trình viên chỉ quản lý việc điều hành các sự kiện mà thôi. Nhấp vào biểu tượng MenuStrip trên Toolbox, một đối tượng Menu mới sẽ xuất hiện dưới cửa sổ thiết kế Form. Xong nhấn vào vùng làm việc trong Form Nhấp vào mục Type Here và nhập nội dung cho Menu. VB.NET sẽ từ động tạo thêm các mục Type Here bên phải và dưới mục menu bạn vừa nhập để chờ bạn định nghĩa các lệnh trên menu ngang và các tùy chọn trong menu xổ xuống ứng với từng lệnh. Dấu “&” đứng trước ký tự nào cho biết ký tự đó sẽ là phím tắt (Nhấn Alt + ký tự sau “&” coi như là chọn mục menu đó. I.5. Cách tạo Pop-up Menu Chọn control có tên ContextMenuStrip trên toolbox và nhấn vào vùng làm việc của Form. Một popup menu xuất hiện có tên mặc định là ContextMenuStrip. Nhấp vào mục Type Here và nhập nội dung cho Menu. VB.NET sẽ từ động tạo thêm các mục Type Here bên phải và dưới mục menu bạn vừa nhập để chờ bạn định nghĩa các lệnh trên menu ngang và các tùy chọn trong menu xổ xuống ứng với từng lệnh. Dấu “&” đứng trước ký tự nào cho biết ký tự đó sẽ là phím tắt (Nhấn Alt + ký tự sau “&” coi như là chọn mục menu đó. Đối tượng khi click phải chuột muốn xuất hiện thì cần khai báo thêm ở thuộc tính ContextMenuStrip là tên của Pop-up Menu muốn xuất hiện
  • 46. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET II. Hộp thoại II.1. Khái niệm Hộp thoại (Dialog Box) là một trong những cách VB dùng để 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). II.2. Hộp thông điệp Hộp thông điệp cũng 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. II.2.1 Loại chỉ xuất thông báo - Lúc này ta dùng MsgBox như là một thủ tục. - Cú pháp: MsgBox (message, style, title) as result Message: nội dung thông báo sẽ hiển thị. Style: Giá trị nguyên dương xác định kiểu hộp thông báo (số nút, biểu tượng sẽ hiển thị bên trái hộp, nút nhận focus). Title: Tiêu đề hộp thông báo. Result: giá trị trả về của hàm MsgBox là một số nguyên dương xác định nút được nhấn. Bảng giá trị có thể sử dụng với tham số Style. Tên hằng MsgBoxStyle.OkOnly MsgBoxStyle.OKCancel MsgBoxStyle.AbortRetryIgnore Giá trị Diễn giải 0 Hộp thông báo chỉ có nút OK 1 Hộp thông báo có 2 nút OK, Cancel 2 Hộp thông báo có 3 nút Abort, Retry và Ignore MsgBoxStyle.YesNoCancel 3 Hộp thông báo có 3 nút Yes, No và Cancel MsgBoxStyle.YesNo 4 Hộp thông báo có 2 nút Yes và No MsgBoxStyle.RetryCancel 5 Hộp thông báo có 2 nút Retry, Cancel MsgBoxStyle.MsgBoxHelp 16384 Hộp thông báo có nút help MsgBoxStyle.Critical 16 Biểu tượng X MsgBoxStyle.Question 32 Biểu tượng ? MsgBoxStyle.Information 64 Biểu tượng ! MsgBoxStyle.Exclamation 48 Biểu tượng ! MsgBoxStyle.SystemModal 4096 Có thể làm việc khác khi chưa trả lời hộp thông báo MsgBoxStyle.ApplicationModal 0 Phải trả lời hộp thông báo trước khi làm việc khác MsgBoxStyle.DefaultButton1 0 Nút đầu tiên trong hộp mặc định được chọn MsgBoxStyle.DefaultButton2 0 Nút thứ 2 trong hộp mặc định được chọn MsgBoxStyle.DefaultButton3 0 Nút thứ 3 trong hộp mặc định được chọn MsgBoxStyle.MsgBoxRight 524288 Canh phải văn bản trong hộp thông báo
  • 47. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET Bảng giá trị Result trả về ứng với từng nút được nhấn. Tên hằng MsgBoxResult.Ok MsgBoxResult.Abort MsgBoxResult.Retry MsgBoxResult.Ignore MsgBoxResult.Yes MsgBoxResult.No Giá trị 1 3 4 5 6 7 Diễn giải Nút OK được nhấn Nút Abort được nhấn Nút Retry được nhấn Nút Ignore được nhấn Nút Yes được nhấn Nút No được nhấn Ví dụ: Dim result = MsgBox("B n có mu n thoát kh i chương trình?", MsgBoxStyle.YesNo + MsgBoxStyle.Question + MsgBoxStyle.MsgBoxHelp, "Thông Báo") II.3. Hộp nhập Đây là loại hộp thông điệp cho phép nhận thông tin từ phía người sử dụng. Tuy nhiên trong các ứng dụng, hộp nhập rất ít khi được dùng do: - Ta không có cách nào để kiểm tra thông tin do người dùng nhập vào khi mà Enter chưa được ấn. - Thông tin được nhập là rất ít. Sau đây là một ví dụ về hộp nhập: Private Sub mniAddNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mniAddNew.Click Dim tmp = Trim(InputBox("Nh p giá tr mu n thêm.", "Thêm m i")) If tmp <> "" Then lstDanhSach.Items.Add(tmp) End If End Sub II.4. Hộp thoại Hộp thoại phục vụ cho các tác vụ trong window như mở file, lưu file, in ấn, chọn màu, chọn font… Hầu hết bạn thường viết mã lệnh móc nối với hộp thoại để lấy thông tin về xử lý. II.4.1 Các hộp thoại thông dụng: OpenFileDialog: Cho phép lấy tên file, tên folder đối với một file hay thư mục đang tồn tại Các thuộc tính quan trọng: Name: Tên của hộp thoại khi viết code. Filter: đây là một chuỗi xác định phần mở rộng của tên các tập tin mà hộp thoại có thể mở hay lưu.
  • 48. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET FilterIndex: nếu có nhiều phần mở rộng của tên tập tin được mô tả trong thuộc tính Filter thì thuộc tính này xác định mặc định loại tập tin nào được chọn (là một số nguyên). FileName: trả về tên tập tin sau khi người sử dụng hộp thoại chọn một tập tin nào đó. SaveFileDialog: Cho phép đặt tên file, tên folder mới cho một file hay thư mục sắp ghi hay tạo mới trên đĩa. Có chức năng và thể hiện tương tự như hộp thoại OpenFileDialog. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load OpenFileDialog1.Filter = "*.txt|*.txt|All file|*.*" OpenFileDialog1.FilterIndex = 1 If OpenFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then MsgBox("B n ch n file: " & OpenFileDialog1.FileName) End If End Sub Ở ví dụ trên, ta thiết kế một hộp thoại mở tập tin, trong đó các tập tin được hiển thị theo 2 nhóm tập tin đó là: - All Files: (*.*) - Text Files: (*.txt) Các nhóm tập tin được thể hiện trong thuộc tính Filter. Mỗi nhóm tập tin cách nhau bởi dấu phân cách |. Thuộc tính FilterIndex = 1 tức là khi hộp thoại Open được mở lên, thì loại tập tin hiển thị mặc định là Text Files. Sau khi đã chọn một tập tin và nhấn nút Open, ta sử dụng thuộc tính FileName để nhận về tên tập tin đã chọn. Lệnh OpenFileDialog1.ShowDialog() trả về kết quả nút được chọn. ColorDialog: Đây là hộp thoại cho phép người dùng chọn và hiển thị các màu có sẵn trong bảng màu của Windows cũng như thiết lập thêm nhiều màu mới. Một thuộc tính quan trọng đối với hộp thoại chọn màu đó là thuộc tính Color, thuộc tính này trả về giá trị của màu đã được chọn. Ta sẽ dùng phương thức ShowDialog để hiển thị hộp thoại chọn màu. Có 2 thuộc tính quan trọng .Color: Trả về màu đã chọn. .ShowDialog: Mở hộp thoại.
  • 49. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET Private Sub bttnColor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttnColor.Click If ColorDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then If chkDoiMau.Checked Then Me.BackColor = ColorDialog1.Color Else txtNoiDung.BackColor = ColorDialog1.Color End If End If End Sub FontDialog: Cho phép người dùng chọn Font màn hình, máy in hay cả hai. Khi dùng hộp thoại chọn Font ta phải dùng thuộc tính Flags quy định loại Font nào sẽ được hiển thị. Private Sub bttnFont_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bttnFont.Click If FontDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then If chkDoiMau.Checked Then chkDoiMau.Font = FontDialog1.Font Else txtNoiDung.Font = FontDialog1.Font End If End If End Sub
  • 50. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET Chương 7 : TẬP TIN M c tiêu: Chương này gi i thi u v cách th c truy c p h th ng t p tin c a Windows trong VB, thao tác thư ng g p trong các ng d ng ch y trên Windows. H c xong chương này, sinh viên ph i n m b t đư c các v n đ sau: - S d ng mô hình đ i tư ng h th ng t p tin đ thao tác v i m c, t p tin trong Windows. đĩa, thư - S d ng các hàm xu t/nh p t p tin đ truy xu t t p tin văn b n, t p tin I. Làm việc với thư mục Đây là các phương thức có cách sử dụng rất đơn giản, vì thế ta chỉ xét qua phương thức nào ứng với tác vụ gì (công việc gì) chứ không đi sâu phân tích từng phương thức. Để sử dụng các hàm liên quan đến thư mục, tập tin thì ta cần imports thêm System.IO để sử dụng các phương thức thao tác lên thư mục hay tập tin Tác vụ Tạo thư mục Xóa thư mục Phương thức Directory.CreateDirectory(path As String) Directory.Delete(path as string) ho c Directory.Delete(path as string, true) Di chuyển thư mục Directory.Move(sourceDirName destDirName As String) Lấy các thư mục con Kiểm tra thư mục có tồn tại trên ổ đĩa Lấy tên của thư mục cha Lấy tên của thư mục hệ thống Directory.GetDirectories(path As String) As String, Directory.Exists(path As String) Directory.GetParent (path As String).Name Directory.GetDirectoryRoot(path As String) Ví dụ 1: Viết chương trình di chuyển 1 thư mục. Ví dụ 2: Viết chương trình copy 1 thư mục. Gợi ý: Hàm Split ( Chuỗi, Chuỗi so sánh, Số lương chuỗi con) Vd: Split(“C:TestVisualBasic”, “”) Kết quả trả về của hàm trên làm một mảng kiểu String, mỗi phần tử trong mảng sẽ lần lượt có giá trị “C:”, “Test”, “VisualBasic”
  • 51. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET II. Làm việc với tập tin II.1 Kiểm tra có tồn tại tập tin File.Exists(path As String) Dùng để kiểm tra một tập tin có tồn tại trên ổ đĩa hay không. Path: đường dẫn đến vị trí tập tin cần kiểm tra. Trả về giá trị True (tập tin tồn tại) hoặc False (tập tin không tồn tại). II.2 Tạo và xóa một tập tin File.Create(path As String) Ví dụ: Tạo tập tin có tên bai1.txt trong thư mục Baitap trên ổ đĩa C: File.Create(“C:Baitapbai1.txt”) Gợi ý: Cần sử dụng thêm một biến kiểu FileStream để giữ quá trình tạo tập tin. Khi tạo xong thì đóng (không giữ quyền mở trên tập tin đó nữa). Dim fStream as FileStream fStream = File.Create("c:abc.txt") fStream.Close() File.Delete(path As String) Ví dụ: Xóa tập tin vừa tạo ở trên. II.3 Mở tập tin để đọc File.OpenText(path As String) Cần một biến kiểu StreamReader dùng để đọc tập tin cần mở. Ví dụ: Mở một tập tin trên ổ đĩa C:Baitapbai1.txt Dim noidung as String Dim strReader As StreamReader If File.Exists(“C:Baitapbai1.txt”) then strReader = File.OpenText(“C:Baitapbai1.txt”) noidung = strReader.ReadToEnd Else Msgbox(“Tập tin không tồn tại.”) End if Biến StreamReader dùng để đọc nội dung trong tập tin được mở StreamReader.ReadToEnd: dùng để đọc tất cả nội dung trong tập tin được mở StreamReader.ReadLine: dùng để đọc từng dòng trên tập tin được mở. Chú ý khi dùng thuộc tính này thì cần thêm .EndOfStream để kiểm tra quá trình đọc hết tập tin chưa. II.4 Ghi dữ liệu lên tập tin File.AppendText(path As String) Cần thêm một biến StreamWriter dùng để ghi dữ liệu vào. Ví dụ: ghi nội dung “Bài tập Visual Basic” và tập tin bai1.txt ở trên. Dim strWrite As StreamWriter Dim fileStr As FileStream fileStr = File.Create(“C:Baitapbai1.txt”) fileStr.Close() strWrite = File.AppendText(“C:Baitapbai1.txt”) strWrite.Write(“Bài tập Visual Basic”) strWrite.Close() Gợi ý: Có thể dùng strWrite.WriteLine(“nội dung”) để ghi và xuống dòng trong trường hợp muốn ghi thành nhiều dòng.
  • 52. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET Bài tập: 1. Viết chương trình như NotePad của Windows. 2. Viết chương trình copy một thư mục trong đó có các thư mục con và tập tin.
  • 53. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET III. Đóng gói chương trình Sau khi đã hoàn tất quá trình viết chương trình. Bây giờ bạn muốn mang sản phNm của mình đi giới thiệu thì cần phải đóng gói chương trình thành một file cài đặt. Bạn cũng có thể copy file .exe để chạy. Tuy nhiên bạn nên cài đặt ứng dụng của mình chỉ sau khi đóng gói bằng công cụ của Visual Studio. Quá trình đóng gói được thực hiện qua các bước sau: Tạo dự án Deployment. Tại chương trình muốn đóng gói. Vào menu File chọn Add chọn New Project … Hộp thoại Add New Project xuất hiện Tại khung Project types chọn Other Project Types => Setup and Deployment. Tại khung templates chọn Setup Project. Đặt tên cho dự án cài đặt. Chọn thư mục lưu (nên để mặc định, lúc này dự án mới sẽ được lưu cùng thư mục với dự án cần đóng gói) => nhấn OK.
  • 54. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET Một dự án mới xuất hiện ngay bên dưới dự án cần đóng gói như hình dưới. Click chuột phải vào dự án mới tạo chọn Add => Project Output để chọn dự án cần đóng gói. Hộp thoại Add Project Output Group xuất hiện Chọn tên dự án muốn đóng gói trong combo box Project (Lúc này có tên là Notepad) Chọn Primary output Chọn OK Dự án có tên Notepad (Active) được đưa vào để đóng gói. Click phải chuột lên Dự án mới tạo chọn Propertives để chỉnh sửa lại kiểu đóng gói và vị trí lưu file đóng gói (nên để mặc định). Và chọn thêm các gói cần đóng gói kèm theo ứng dụng. Hộp thoại Propertives xuất hiện
  • 55. Biên soạn: Nguyễn Vũ Duy Quang Visual Basic .NET Để mặc định các thông số (Sau khi Build thì file đóng gói có tên ChuongTrinhVanBan.msi trong thư mục Debug). Chọn Prerequisites… để thêm các gói kèm theo khi đóng gói. Chọn các gói cần kèm theo khi đóng gói ứng dụng như .Net Framework môi trường cần thiết để ứng dụng của bạn có thể chạy, nếu ứng dụng có sử dụng báo biểu Crystal Report của bộ Visual Studio .NET thì cần phải chọn check thêm vào Crystal Reports … => nhấn OK. Sau khi hoàn tất. Click phải chuột vào dự án và chọn Build, đợi trong ít giây tùy dung lượng chương trình bạn viết để chương trình đóng gói. Sau khi đóng gói thành công trong thư mục Debug sẽ có hai tập tin cài đặt .msi và setup.exe và một thư mục dotnetfx dùng để cài bộ .Net Framework ngoài ra nếu bạn có chọn Crystal Reports thi sẽ có thêm một thư mục CrystalReports dùng để cài bộ CrystalReport. Bây giờ bạn đã có thể mang chương trình của mình đi trình làng.