You are on page 1of 184

CHUYÊN ĐỀ VỀ 1 NNLT -

VISUAL BASIC.NET
Mục tiêu
- Vận dụng bộ công cụ lập trình Visual
Basic.NET để xây dựng ứng dụng (từ
đơn giản đến phức tạp).
- Có khả năng tìm hiểu sâu hơn các kỹ
thuật lập trình Visual Basic.NET nâng
cao (hệ thống, mạng…).
Cán bộ phụ trách
Lâm Hoài Bảo
(lhbao@cit.ctu.edu.vn)
1
CHUYÊN ĐỀ VỀ 1 NNLT -
VISUAL BASIC.NET
Nội dung chủ yếu
- Giới thiệu về .NET Framework.
- Giao diện người dùng.
- Các kiểu dữ liệu của Visual Basic.NET.
- Lập trình hướng đối tượng.

2
CHUYÊN ĐỀ VỀ 1 NNLT -
VISUAL BASIC.NET
Kiến thức liên quan
Kỹ năng sử dụng máy tính
(Windows), Lập trình căn bản.

Kỹ năng sử dụng máy Sử dụng HĐH Windows.


tính
Lập trình căn bản Kỹ năng lập trình tốt

3
CHUYÊN ĐỀ VỀ 1 NNLT -
VISUAL BASIC.NET
Tài liệu tham khảo
Developing Windows-Based Applications with
Visual Basic .NET and Visual C Sharp .NET;
Microsoft Press A Division of Microsoft Corporation
One Microsoft Way Redmond; 2002.
Programming Visual Basic .NET; Dave
Grundgeiger; Publisher: O'Reilly, First Edition January;
2002.
Programming and Problem Solving with Visual Basic
.NET; Nell Dale, Michael McMillan, Chip Weems and Mark
Headington; Jones and Bartlett Publishers; 2003.
www.elcit.ctu.edu.vn

4
Chương 1: Giới thiệu về
.Net Framework

.NET Framework & Common


Language Runtime.
Ngôn ngữ Visual Basic.Net
Khai báo lớp
Tạo đối tượng từ lớp

5
Bài 1: Giới thiệu về
.NET & VISUAL
BASIC.NET

Khái niệm và các thành phần của


.Net Framework.
Cấu trúc 1 ứng dụng .NET
Giới thiệu về Visual Basic.NET
Chương trình Visual Basic.Net đầu
tiên.

6
.NET FRAMEWORK
Là một môi trường an toàn cho
việc quản lý vấn đề phát triển và
thực thi ứng dụng.
Gồm 2 phần:
- Common Language Runtime
(CLR): quản lý việc thực thi mã
lệnh.
- Thư viện lớp .NET Framework: tập
hợp các kiểu của CLR.
7
CÁC THÀNH PHẦN CỦA
.NET FRAMEWORK

8
NGÔN NGỮ & .NET
FRAMEWORK
Tương thích giữa các ngôn ngữ với
nhau (do CLR).

Microsoft
App VB.NET (C#) Intermediate CLR
(VB.NET, Language
C#) compiler (MSIL hay IL)
đọc &
thực thi
Common Language
Specification (CLS) 9
VISUAL BASIC.NET
Một phần của Visual Studio.NET
Thuần hướng đối tượng.
Ngôn ngữ duy nhất trong VS.NET
hỗ trợ ràng buộc trễ.
Ngôn ngữ duy nhất trong VS.NET
hỗ trợ chế độ dịch nền.
Không phân biệt chữ hoa và chữ
thường.

10
ỨNG DỤNG .NET ĐẦU
TIÊN
Dịch: vbc <Tên tập tin>
Sau khi dịch xong, ta nhận được tập tin thực thi
(exe). Thực hiện tập tin này.
TD: Tập tin HelloWorld.vb:
Public Module Hello
Public Sub Main()
System.Console.WriteLine("hello world")
End Sub
End Module
Dịch tập tin: vbc HelloWorld.vb
Thực thi tập tin HelloWorld.exe
11
Bài 2: Ngôn ngữ lập
trình VISUAL BASIC.NET

Kiểu dữ liệu, biến & hằng trong


VB.NET.
Câu lệnh đơn trong VB.NET
Các lệnh có cấu trúc của VB.NET

12
KIỂU DỮ LIỆU & ĐỊNH
DANH
Kiểu giá trị (cấu trúc): Boolean, Char, Byte,
Date, Decimal, Double, Integer, Long, Short,
Single, Structure.
Kiểu tham chiếu (lớp): Object, String.
Định danh (danh biểu): là tên dùng để đặt cho
biến, hằng, kiểu, lớp, phương thức… theo quy
tắc:
- Bắt đầu là 1 ký tự từ A-Z.
- Theo sau là các ký tự, hoặc ký số (0-9)
hay dấu gạch dưới.
- Tên có độ dài tối đa là 40.
- Không phân biệt chữ hoa và chữ thường.
TD tên: TH_K30, Dt_k31 13
BIẾN (VARIABLE)
Là đại lượng dùng để chứa dữ liệu
trong quá trình tính toán.
Cú pháp khai báo biến:
Dim|Private|Public|Friend|Protected _
<Tên biến> [As <Kiểu>] [= <Biểu
thức>]

14
BIẾN (VARIABLE)
Biến cục bộ: là biến được khai báo
trong một khối lệnh (Dim)
TD: Tìm giá trị nghịch đảo của x
If x <> 0 Then
Dim rec As Integer
rec = 1/x
End If
MsgBox CStr(rec)

15
BIẾN (VARIABLE)
Biến cấp module: là biến được khai báo
trong phần khai báo toàn cục của một
module (Public, Friend, Private).
Private: là biến chỉ có hiệu lực trong
module đó (mặc định).
Friend: là biến chỉ có hiệu lực trong dự
án đó.
Public: biến có hiệu lực không chỉ trong
dự án nó được khai báo mà còn trong
các dự án khác có tham chiếu đến dự án
này.
16
BIẾN (VARIABLE)
Giả sử Project1, ta có Module sau:
Public Module Module1
Public iModulePublic As Integer
Friend iModuleFriend As Integer
End Module
Nếu Project2 tham chiếu đến Project1, ta
viết:
Project1.Module1.iModulePublic = 100
Nhưng Lỗi "not accessible" khi:
Project1.Module1.iModuleFriend = 100
17
THÍ DỤ VỀ KHAI BÁO
BIẾN
Dim x As Integer
Khi muốn khai báo nhiều biến cùng kiểu,
sử dụng dấu phẩy (,) phân cách:
Dim x As Long, i, j, k As Integer, _
s As String
Vừa khai báo vừa khởi tạo giá trị:
Dim x As Integer = 5
Dim x As Integer = 6, _
y As Integer = 9

18
HẰNG (CONSTANT)
Là đại lượng có giá trị không đổi
trong quá trình tính toán.
Private|Public|Friend|Protected Const
_ <Tên hằng> [As <Kiểu>]= <Biểu
thức>
TD:
Public Const Pi = 3.14
Private Const g As Single = 9.8
19
BIỂU THỨC
Các phép toán số học (+, -, *, /,
Mod, \, ^).
Các phép toán quan hệ: And, Not,
Or.
Các phép toán so sánh: =, >=,
<=, <, >, <>.
Ngoài ra, ta có thể sử dụng cặp
dấu ngoặc đơn để tăng độ ưu tiên.
20
CHUYỂN ĐỔI KIỂU
Tùy chọn Option Strict: xác định cách
thức trình biên dịch xác định sự tương
thích kiểu trong biểu thức (On: BT phải
tương thích kiểu, Off: VB tự động
chuyển đổi kiểu).
TD: Dim A as Long=6
Dim b As Integer=A
sẽ có lỗi xuất hiện nếu đặt Option
Strict On
Một số hàm chuyển đổi kiểu: CBool,
CChar, CDate, CDbl, CDec, CInt, CLng,21
CObj, CSng, CStr.
CÂU LỆNH OPTION
Tác động đến quá trình thực thi của
trình biên dịch.
Option Compare [Binary | Text]:
cách thức so sánh chuỗi.
Option Explicit [On | Off]: xác định
các biến sử dụng bắt buộc phải khai báo
hay không?
Option Strict [On | Off]: tự động
chuyển đổi kiểu trong biểu thức.

22
CÂU LỆNH GÁN
Cú pháp: <Tên biến> = <Biểu thức>
TD: Tính diện tích hình tròn biết bán kính là 5.
Imports System
Public Module Hello
Public Sub Main( )
Const Pi = 3.14
Dim R As Single = 5, S As Single
S = Pi*R*R ‘ Gán trị tính diện tích
Console.WriteLine("Dien tich " & _
CStr(S))
End Sub
End Module
23
CÂU LỆNH IF
If expression Then If expression Then
statements statements
Else
End If
statements
End If
If expression Then
statements
ElseIf expression Then Có 3 dạng chính:
statements
ElseIf expression Then - If đơn giản.
statements - If có phần Else
[Else
statements] - If và ElseIf nhiều
End If lần.
24
THÍ DỤ VỀ IF
If m=1 Or m=3 Or m=5 Or m=7 Or m=8 Or m=10 Or m=12
Then
System.Console.WriteLine(“31 days“)
ElseIf m=4 Or m=6 Or m=9 Or m=11 Then
System.Console.WriteLine(“30 days“)
Else
System.Console.WriteLine(“28 or 29 days”)
End If

25
CÂU LỆNH SELECT 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
Từ khóa Is: So sánh <biểu thức kiểm tra> với
1 giá trị
Từ khóa To: Xác lập miền giá trị của <biểu 26
thức kiểm tra>
THÍ DỤ SELECT CASE
Select Case Tuoi
Case Is <18
System.Console.WriteLine(“Vi thanh nien”)
Case 18 To 30
System.Console.WriteLine(“Ban da truong thanh, lap gia
dinh di”)
Case 31 To 60
System.Console.WriteLine(“Ban dang o lua tuoi trung
nien”)
Case Else
System.Console.WriteLine(“Ban da lon tuoi, nghi huu
duoc roi!”)
End Select

Lưu ý: Trong thí dụ trên, không thể viết Case Tuoi<18


27
VÒNG LẶP DO…LOOP
Do While <Expression> Do Until <Expression>
<Statements> <Statements>
Loop Loop
Thực thi Staments Thực thi Staments cho
trong khi Expression đến khi Expression
đúng đúng thì dừng lại
TD: Tìm USLN của 2 số a & TD: Tìm USLN của 2 số a &
b b

Do While (a Mod b <>0) Do Until (a Mod b=0)


r = a Mod b r = a Mod b
a=b a =b
b=r b= r
Loop Loop
UCLN = b UCLN = b 28
VÒNG LẶP FOR
Lặp xác định chính xác số lần lặp.
For variable = expression1 To expression2 [Step
expression ]
Statements
Next [ variable_list ]

TD: Tính n!
Dim i As Integer, K As Long = 1
For i = 1 To n
K=K*i
Next
29
VÒNG LẶP FOR EACH
Lặp qua một tập hợp các giá trị.
For Each variable In expression
Statements
Next [ variable ]

TD: Dùng For Each đi qua toàn bộ các phần tử của 1


mảng.
Dim a( ) As Integer = {1, 2, 3, 4, 5}
Dim b As Integer
For Each b In a
System.Console.WriteLine(b)
Next

30
Bài 3: Thư viện lớp cơ sở
.NET

- Mô tả về thư viện lớp cơ sở .NET.


- Thiết lập một tham chiếu đến không gian
tên.
- Tạo một thể hiện của 1 lớp của .NET
Framework hay của1 kiểu giá trị.

31
KHÔNG GIAN TÊN
(NAMESPACE)
Các thư viện lớp được tổ chức trong không
gian tên; đây là một nhóm các lớp có liên quan
với nhau.
TD: System.Windows.Forms là kgt chứa các
lớp tạo nên cửa sổ và các thành phần trên cửa
sổ của trình ứng dụng.
Kgt của .NET Framework được tổ chức phân
cấp với gốc là kgt System.
Một số kgt trong .NET Framework: System,
System.Collections, System.ComponentModel,
System.Data, System.Drawing, System.IO,
System.Math, System.Reflection,
System.Security, System.Threading,
System.Windows.Forms… 32
KHAI BÁO BIẾN KIỂU THAM
CHIẾU

Gồm 2 bước: khai báo và khởi tạo đối


tượng
TD: Khai báo biến đối tượng thuộc lớp
Form trong System.Windows.Forms
Dim f As System.Windows.Forms.Form
f = New System.Windows.Forms.Form()

33
CÂU LỆNH IMPORTS
Dùng để tham chiếu đến namespace nào đó.
Đặt ở đầu module chương trình.
Làm viết gọn trong việc truy xuất đến 1 lớp
của namespace.
TD: Giả sử đầu module nào đó ta viết:
Imports System.Windows.Forms
ta chỉ cần khai báo biến đối tượng Form trong
module đó
Dim f As Form
f = New Form()

34
Bài 4: LỚP

Nội dung chính:

Tạo 1 lớp mới.


Tạo một thể hiện (đối tượng) của 1
lớp.

35
KHÁI NIỆM LỚP
Những thuộc tính và hành động chung của
các thực thể được nhóm lại để tạo nên 1 đơn
vị duy nhất là lớp.
TD: Lớp Con người có các thuộc tính và hành
động sau:
- Tên
- Chiều cao
- Màu tóc.
- Nói năng
- Viết
….
Những thuộc tính và hành động chung gọi là
thành viên (member) 36
KHÁI NIỆM ĐỐI TƯỢNG
Một đối tượng là một trường hợp cụ thể của
một lớp.
TD: Đối tượng 1 con người thực tế của lớp Con
người:
- Tên: Đan Tú
- Tuổi: 29
- Trọng lượng: 46 kg
Hành động:
- Đi
- Nói
- Suy nghĩ
37
TẠO MỘT LỚP MỚI
Sử dụng từ khóa Class
Class <Tên lớp>
<Các thành viên của lớp>
End Class
TD: Khai báo lớp Person
Class Person
Public Name As String
Public Age As Integer
Public Weight As Single
End Class

38
TẠO ĐỐI TƯỢNG TỪ LỚP

Việc tạo 1 đối tượng chính là khai


báo và khởi tạo biến đối tượng từ
lớp.
TD: Tạo đối tượng p thuộc lớp
Person
Dim p As Person
p = New Person()
Dim p As New Person()
39
PHƯƠNG THỨC
(METHOD)
Các hành động của lớp được thể hiện qua
phương thức (chương trình con).
Trong VB.NET, phương thức có 2 loại: hàm
(Function) và thủ tục (Sub).
Khai báo hàm:
[Public | Private | Friend | Protected] Function _
<Tên hàm>(<Khai báo các tham số>) _
As <Kiểu trả về>
<Các khai báo và câu lệnh định nghĩa
hàm>
End Function
<Khai báo các tham số>: giống như khai báo
biến.
Lời gọi hàm thực thi là 1 biểu thức: 40
PHƯƠNG THỨC
(METHOD)
Khai báo thủ tục:
[Public | Private | Friend | Protected] Sub _
<Tên thủ tục> (<Khai báo các tham số>)
<Các khai báo và câu lệnh định nghĩa thủ tục>
End Sub
Gọi thực thi thủ tục
<Tên thủ tục> (<Danh sách tham số thực tế>)
TD:
Public Sub MySub()
MessageBox.Show(“Thi du ve Sub")
End Sub
Function Add(ByVal first As Integer, ByVal
second As _
Integer) As Integer
Add = first + second
41
End Function
TRUYỀN THAM SỐ CHO
PHƯƠNG THỨC

2 cách truyền tham số:


Truyền theo giá trị: mặc định hay
từ khóa ByVal.
Truyền theo địa chỉ: từ khóa
ByRef.

42
THÍ DỤ TRUYỀN THAM
SỐ
Public Sub Demo1()
Dim x, y As Integer
x = 15
y = 20
' Gọi phương thức Demo2
Demo2(x, y)
' x=? y= ?
MessageBox.Show("X = " & x.ToString & "Y = " & _
y.ToString)
End Sub

Public Sub Demo2(ByVal p1 As Integer, ByRef p2


As _
Integer)
p1 = p1 + p2
p2 = p2 + p1 43
PHƯƠNG THỨC XÂY
DỰNG
Là phương thức được gọi thực hiện đầu tiên mỗi khi 1
đối tượng của 1 lớp được tạo ra.
Trong VB.NET, phương thức xây dựng luôn là Sub New()
TD:
Class Person
Public Name As String
Public Age As Integer
Public Weight As Single
Public Sub New() ‘ Phương thức xây dựng
Name =“”
Age = 0
Weight = 0
End Sub
End Class 44
PHƯƠNG THỨC HỦY
Là phương thức được gọi thực hiện cuối cùng khi
đối tượng bị thu hồi.
Phương thức này có nhiệm vụ giải phóng tài
nguyên được dùng cho đối tượng.
Trong VB.NET, phương thức này phải là Overrides
Sub Finalize()
TD:
Class Person

Protected Overrides Sub Finalize()
‘ Thu hồi các thuộc tính
Name = “”
End Sub
End Class 45
Chương 2: Giao diện
người dùng (User
Interface)
Tạo giao diện người dùng.
Lập trình hướng sự kiện (Event
Programming).
Sử dụng cửa sổ (biểu mẫu, Form).
Sử dụng các điều khiển (Controls)
khác để thiết kế giao diện.

46
Bài 1: Lập trình sự kiện
(Event Programming)

Các tập tin của 1 ứng dụng


VB.NET.
Sự kiện & lập trình hướng sự kiện

47
CÁC TẬP TIN CỦA 1 ỨNG
DỤNG WINDOWS FORM
Ứng dụng thiết kế & lập trình được quản lý
trong VB.NET bằng Solution.
1 Solution có thể chứa nhiều dự án (Project).
Các tập tin khi tạo 1 ứng dụng VB.NET:
*.sln Tập tin Solution (văn bản)
*.vb Tập tin chứa định nghĩa về
form & mã lệnh bên trong đó
*.resx Tập tin tài nguyên
*.vbproj Tập tin dự án
… Các tập tin khác
48
TẠO ỨNG DỤNG
WINDOWS FORM

49
50
51
(EVENT
PROGRAMMING)
Sự kiện (event): là hành động của người
dùng tác động vào ứng dụng đang thực
thi.
TD: Nhấn phím bất kỳ trên bàn
phím.
Nhấp chuột.
Khả năng đáp ứng lại sự kiện của ứng
dụng phụ thuộc người lập trình.
Người lập trình phải viết đoạn mã lệnh,
đoạn lệnh này sẽ thực thi khi sự kiện
tương ứng xảy ra. 52
Mã lệnh cho sự kiện Click của Ghi
đĩa

………………………………
……
Mã lệnh cho sự kiện Click của In
giấy

………………………………
……
Vấn đề gì xảy ra nếu:
………………………………
- Người dùng không tác động
……gì vào ứng dụng?
- Người dùng nhập dữ liệu vào các ô nhập?
- Người dùng nhấp chọn Ghi đĩa?
- Người dùng nhấp chọn In giấy?
53
Bài 2: Cửa sổ (Biểu
mẫu, Form)

Khái niệm biểu mẫu.


Thêm biểu mẫu vào ứng dụng.
Thiết lập startup form & vị trí form
lúc startup.
Các thuộc tính, phương thức, sự
kiện của biểu mẫu.

54
CỬA SỔ (BIỂU MẪU,
FORM)
Là cửa sổ được lập trình để hiển thị dữ
liệu & nhận thông tin phía người dùng.
Thêm biểu mẫu vào dự án (khi thiết
kế):
- Trên mục menu Project, chọn Add
Windows Form. Hộp thoại Add New
Item bật ra.
- Chọn Windows Form, nhấp Open.
Thêm biểu mẫu bằng mã lệnh: Khai
báo và khởi tạo đối tượng biểu mẫu.
TD: Dim f As DialogForm
f = New DialogForm() 55
BIỂU MẪU THỪA KẾ
(INHERITED FORM)
Là biểu mẫu được tạo ra và kế thừa các thuộc tính,
phương thức, sự kiện của biểu mẫu cha.
Thêm biểu mẫu thừa kế vào ứng dụng (bằng mã
lệnh):
- Thêm 1 biểu mẫu vào ứng dụng.
- Cho biểu mẫu này thừa kế 1 biểu mẫu cha nào đó
bằng cách sử dụng từ khóa Inherits trong khai báo
lớp.
TD: Tạo biểu mẫu myForm thừa kế từ biểu mẫu
MainForm:
Public Class myForm
Inherits MainForm
‘ Cài đặt của lớp myForm
End Class 56
BIỂU MẪU - THUỘC
TÍNH
Thuộc tính: đặc tính tạo nên vẻ bề
ngoài của điều khiển.
- BackColor: màu nền.
- ForeColor: màu chữ.
- Text: Tiêu đề biểu mẫu.
- Font: Font chữ của biểu mẫu.
……………..
Ta có thể thiết lập các thuộc tính này
bằng mã lệnh hay nhờ vào cửa sổ thuộc
tính.
TD: Me.BackColor =
57
BẰNG CỬA SỔ THUỘC
TÍNH

58
BIỂU MẪU – PHƯƠNG
THỨC
Form.Show : thể hiện form lên màn hình.
Form.ShowDialog : thể hiện form lên màn hình hình
dạng Dialog.
Form.Activate : form được kích hoạt (active)
Form.Hide : ẩn form đi.
Form.Close : đóng lại form và giải phóng tài nguyên.
TD:
Dim myForm As New DialogForm()
myForm.Show() ‘ Thể hiện Form trạng thái bình
thường
myForm.ShowDialog() ‘ Thể hiện Form dạng Dialog
myForm.Activate()
myForm.Hide()
myForm.Close()
59
BIỂU MẪU - SỰ KIỆN
(EVENT)
Tạo đoạn mã xử lý sự kiện trong
VB.NET:

60
BIỂU MẪU - SỰ KIỆN
(EVENT)
Load : Xảy ra khi thể hiện đầu tiên của Form được
Load lên màn hình.
Activated : Xảy ra khi Form được kích hoạt.
Deactivated: Xảy ra khi Form mất kích hoạt.
VisibleChanged : Xảy ra khi Form có thay đổi trạng
thái (ẩn/hiện).
Closing: Xảy ra khi Form đang trong quá trình
đóng lại.
Closed : Xảy ra sau sự kiện Closing.
Lưu ý:
- Sự kiện Load được sử dụng để khởi tạo giá trị của
các thành phần trong Form.
- Sự kiện Closing & Closed thường được sử dụng để
thu hồi tài nguyên được cấp phát cho Form.
61
THÍ DỤ XỬ LÝ SỰ KIỆN
CỦA FORM
Giả sử ta muốn ngăn thao tác
đóng Form của người dùng:
Sự kiện Form_Closing(), ta thiết
lập:
CancelEventArgs.Cancel = True
Private Sub myForm_Closing(ByVal sender As Object,
_
ByVal e As
System.ComponentModel.CancelEventArgs) _
Handles MyBase.Closing
e.Cancel = True
End Sub 62
Bài 3: Các điều khiển
trong VB.NET

Khái niệm điều khiển.


Một số thao tác với các điều khiển
khi thiết kế ứng dụng.
Một số điều khiển thường sử dụng.

63
ĐIỀU KHIỂN (CONTROL)

Điều khiển: Các thành phần có sẵn để


tạo giao diện tương tác với người dùng.
Một số điều khiển: Label, TextBox,
Button, ListBox, ComboBox,
OptionButton, CheckBox, PictureBox…

64
ĐIỀU KHIỂN NHÃN -
LABEL

Dùng để hiển thị dữ liệu cho người dùng.


Thuộc tính:
- Name: Tên của Label
- Text: Chuỗi hiển thị trên Label.
- BorderStyle: Kiểu viền của điều khiển Label
(None, FixedSingle, Fixed3D)
- Image: hình ảnh của Label

TD: Thay đổi Text của Label


có Name là lblTest1 thành ‘None’:
lblTest1.Text = “None”
65
ĐIỀU KHIỂN Ô NHẬP
LIỆU - TEXT BOX
Dùng để nhận/hiển thị dữ liệu về phía người
dùng.
Thuộc tính:
- Name: Tên của ô nhập liệu TextBox.
- Text: Chuỗi hiển thị trên ô nhập liệu
TextBox.
- Multiline: TextBox có nhận nhiều dòng văn
bản hay không? (Mặc định giá trị này là
False).
- CharacterChasing: tự động chuyển đổi dữ
liệu nhập của TextBox thành dạng tương ứng
(Normal, Upper, Lower).
- PasswordChar: Ký tự hiển thị thay thế khi
66
ĐIỀU KHIỂN Ô NHẬP
LIỆU - TEXT BOX
Sự kiện:
- KeyPress: Xảy ra khi người dùng nhấn phím có mã
Ascii từ bàn phím.
Để kiểm chứng ký tự người dùng nhập từ bàn
phím người ta sử dụng 1 số hàm Char.IsDigit,
Char.IsLetter, Char.IsLetterOrDigit,
Char.IsPunctuation , Char.IsLower , Char.IsUpper.
TD: Sự kiện KeyPress
Private Sub TextBox1_KeyPress (ByVal sender As Object, ByVal
e As _
System.Windows.Forms.KeyPressEventArgs) Handles _
TextBox1.KeyPress
If Char.IsDigit(e.KeyChar) = True Then
MessageBox.Show("You pressed a number key")
End If
End Sub 67
ĐIỀU KHIỂN Ô NHẬP
LIỆU - TEXT BOX
Sự kiện Validating:
- Xảy ra trước khi TextBox mất kích hoạt, dùng để
kiểm tra dữ liệu nhập có hợp lệ hay không?
- Chỉ thực hiện khi người lập trình thiết lập thuộc tính
CausesValidation của Text Box là True.

TD:
Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e
As _
System.ComponentModel.CancelEventArgs) Handles
TextBox1.Validating
' Kiểm tra giá trị của TextBox
If TextBox1.Text = "" Then
' Bắt buộc TextBox phải nhập lại, TextBox phải được
kích hoạt
e.Cancel = True 68
ĐIỀU KHIỂN NÚT NHẤN
- BUTTON
Dùng để xác nhận 1 hành động hay thao tác
của người dùng.
Thuộc tính:
- Name: Tên của Button.
- Text: Chuỗi hiển thị trên Button.
- Image: Hình ảnh trên Button.
- FlatStyle: Hình dạng của Button (Flat, Popup,
Standard, and System.)
- Font: Xác lập Font chữ cho Button.

69
ĐIỀU KHIỂN NÚT NHẤN
- BUTTON
Sự kiện
- Click: Xảy ra khi người dùng nhấp chuột vào
Button.
SựNkiện
TD: Tính N! với nhậpButton_Click()
từ bản phím.
Private Sub btnTinh_Click(ByVal sender As
System.Object, _
ByVal e As System.EventArgs) Handles
btnTinh.Click
Dim N, i As Integer, K As Long = 1
N = CInt(txtN.Text)
For i = 1 To N
K=K*i
Next
lblKQ.Text = CStr(K) 70
SÁCH LỰA CHỌN -
LISTBOXES
Sử dụng để hiển thị một danh sách cho
người dùng lựa chọn.
WinForms hỗ trợ 2 loại list box:
- ListBox

- CheckedListBox

Sự khác biệt chính là những phần tử


của CheckedListBox được hiển thị có
dấu check trước đó.
71
SÁCH LỰA CHỌN -
LISTBOX
Thuộc tính
- Items: tập các phần tử trong ListBox.
- SelectedIndex: xác định chỉ số của mục đang
hiện thời được chọn trong ListBox, phần tử đầu
tiên có chỉ số 0.
- SelectedItems: tập các mục đang được chọn.
- SelectedValue: giá trị của mục đang được chọn.
- Text: chuỗi trên mục được chọn.
Phương thức
- ClearSelected: xóa hết các lựa chọn trên
ListBox.
- FindString: tìm mục đầu tiên trong danh sách
mà phần tử đó có giá trị bắt đầu là một chuỗi cho
trước. 72
SÁCH LỰA CHỌN -
LISTBOX
Sự kiện
- SelectedIndexChanged: xảy
ra khi giá trị của thuộc tính
SelectedIndex thay đổi.
- SelectedValueChanged: xảy
ra khi giá trị của thuộc tính
SelectedValue thay đổi.
TD: Sử dụng thuộc tính đối
tượng Items để thêm các
mục vào ListBox. Xử lý sự
kiện Load của Form để viết
mã lệnh xử lý.

73
SÁCH LỰA CHỌN -
LISTBOX
Private Sub myForm_Load(ByVal sender As _
System.Object, ByVal e As
System.EventArgs) _
Handles MyBase.Load
Me.lstTen.Items.Add("Nguyễn Văn
Cường")
Me.lstTen.Items.Add("Lâm Quang Hà")
Me.lstTen.Items.Add("Trần Trung Trực")
Me.lstTen.Items.Add("Lê Quang Trãi")
End Sub
Ngoài ra thuộc tính đối tượng Items còn có
một số thuộc tính & phương thức khác:
74
Count, Clear, Insert, RemoveAt, Item…
ĐIỀU KHIỂN DANH SÁCH
LỰA CHỌN -
CHECKEDLISTBOX
CheckedListBox cũng hỗ trợ các thuộc tính, phương
thức, sự kiện giống như ListBox; bên cạnh đó điều
khiển này còn có những đặc điểm riêng:
Thuộc tính
- CheckedIndies: tập các chỉ số của các phần tử
được lựa chọn (checked).
- CheckedItems: tập hợp các phần tử được chọn
(checked).
TD: Cho hình bên, ta có:
- CheckedIndies={1,2}
- CheckedItems={Lâm Quang Hà,
Trần Trung Trực}

75
ĐIỀU KHIỂN DANH SÁCH
LỰA CHỌN -
CHECKEDLISTBOX
Phương thức
- SetItemChecked: thiết lập mục có chỉ số xác định
được chọn (checked).
- SetItemCheckState: xác lập trạng thái checked
của 1 mục xác định.
TD: Sử dụng phương thức SetItemCheckState
Sự kiện Click của Button Trạng
thái
Me.lstNuoc.SetItemCheckState(1, _
CheckState.Checked)
Me.lstNuoc.SetItemCheckState(2, _
CheckState.Indeterminate)
Me.lstNuoc.SetItemCheckState(3, _
76
ĐIỀU KHIỂN HỘP DANH
SÁCH - COMBOBOX
Là điều khiển kết hợp giữa 2 điều khiển
TextBox & ListBox. Điều khiển này hỗ trợ các
tính năng như ListBox; tuy nhiên chúng vẫn có
phần mở rộng so với ListBox.
Thuộc tính
- DropDownStyle: kiểu của ComboBox, gồm có
Simple, DropDownList & DropDown.

Simple DropDown DropDownList 77


ĐIỀU KHIỂN LISTVIEW
Cho phép hiển thị một danh sách các phần tử ở dạng
thức đặc biệt. ListView có 4 kiểu sau:
- Text only: mặc định.
- Text with small icon.
- Text with large icon.
- Detail view: các phần tử hiển thị nhiều cột.
ListView kế thừa các tính năng của CheckedListBox.
Thuộc tính
- CheckBoxes: mỗi phần tử trong ds có 1 checkbox
đứng trước.
- Items: tập các phần tử trong ds.
- MultiSelect: ds có nhiều lựa chọn không?
78
LISTVIEW - THÍ DỤ

79
LISTVIEW - THÍ DỤ
Dim lsvTen As New ListView
lsvTen.Width = 300
lsvTen.Height = 200
' Hiển thị chi tiết
lsvTen.View = View.Details
' Sửa giá trị của Text
lsvTen.LabelEdit = True
lsvTen.FullRowSelect = True
' Hiển thị lưới
lsvTen.GridLines = True
Dim item1 As New ListViewItem("Nguyễn Văn
An", 0)
item1.SubItems.Add("1")
item1.SubItems.Add("2")
item1.SubItems.Add("3")
80
Dim item2 As New ListViewItem("Lê Chí Công", 1)
item2.SubItems.Add("4")
item2.SubItems.Add("5")
item2.SubItems.Add("6")
Dim item3 As New ListViewItem("Huỳnh Văn
Hảo", 0)
item3.SubItems.Add("7")
item3.SubItems.Add("8")
item3.SubItems.Add("9")
' Tạo các cột cho các mục
lsvTen.Columns.Add("Họ tên", -2,
HorizontalAlignment.Left)
lsvTen.Columns.Add("Toán", -2,
HorizontalAlignment.Left)
lsvTen.Columns.Add("Lý", -2,
HorizontalAlignment.Left)
lsvTen.Columns.Add("Hóa", -2,
HorizontalAlignment.Center)
‘ Thêm các mục vào ListView 81
ĐIỀU KHIỂN TREEVIEW
Cho phép hiển thị dữ liệu ở dạng phân cấp.
TreeView hỗ trợ hầu hết các thuộc tính, phương thức
& sự kiện của ListView.
Thuộc tính
- ImageList: ds các ảnh được hiển thị ở mỗi nút.
- Nodes: ds các nút.
- SeletedNode: nút hiện thời được lựa chọn.
Phương thức
- GetNodeAt: truy xuất 1 nút ở vị trí xác định trong
TreeView.
- GetNodeCount: tổng số nút.
Sự kiện
- BeforeSelect, AfterSelect: xảy ra trước/sau khi 1 nút
được chọn.
- BeforeCollapse, AfterCollapse: xảy ra trước/sau khi thu
hẹp 1 nút.
82
- BeforeExpand, AfterExpand: xảy ra trước/sau khi 1 mở
ĐIỀU KHIỂN TREEVIEW - THÍ
DỤ

Hiển thị 10 khách


hàng, mỗi khách
hàng có 5 đơn đặt
hàng.
Thiết kế các lớp
Khách hàng & Đặt
hàng.
Tạo TreeView
như hình

83
Public Class Customer Public Class Orders
Public CustomerName As Public OrderID As String
String Public Sub New(ByVal _
Public CustomerOrder As _ id As String)
ArrayList OrderID = id
Public Sub New(ByVal Name End Sub
_ End Class
As String)
CustomerName = Name
CustomerOrder = New _
ArrayList(0)
End Sub
End Class
Sự kiện Load của Form được xử lý

Dim customerArray As New ArrayList


' Thêm khách hàng
Dim x As Integer
For x = 0 To 9
customerArray.Add(New Customer("Customer " +
x.ToString()))
Next x 84
‘ Thêm đơn đặt hàng
Dim customer1 As Customer
For Each customer1 In customerArray
Dim y As Integer
For y = 0 To 4
customer1.CustomerOrder.Add(New Orders("Order" +
y.ToString()))
Next y
Next customer1
' Xóa TreeView
TreeView1.Nodes.Clear()
' Tạo các nút cha là các khách hàng

For Each customer1 In customerArray


TreeView1.Nodes.Add(New
TreeNode(customer1.CustomerName))
' Các nút con là các đơn đặt hàng
Dim order1 As Orders
For Each order1 In customer1.CustomerOrder

TreeView1.Nodes(customerArray.IndexOf(customer1)).Nodes.Ad
d( _
New TreeNode(customer1.CustomerName + ".“ + 85
order1.OrderID))
ĐIỀU KHIỂN CHECKBOX
Được sử dụng để nhận thông tin dạng Yes/No.
Thuộc tính
- Checked: Xác định điều khiển đang ở trạng thái nào
(True/False).
Sự kiện
- CheckedChanged: Xảy ra khi giá trị của thuộc tính
Checked bị thay đổi.
Private Sub chkDam_CheckedChanged(ByVal
sender _
As System.Object, ByVal e As System.EventArgs)
_
Handles chkDam.CheckedChanged
If Me.chkDam.Checked Then
Me.txtTen.Font = New Font("Arial", 9.0!, _
System.Drawing.FontStyle.Bold)
Else
Me.txtTen.Font = New Font("Arial", 9.0!, _
System.Drawing.FontStyle.Regular) 86
End If
ĐIỀU KHIỂN RADIO
BUTTON

- Là điều khiển cho phép nhận dữ liệu


Yes/No, nhưng các radio button cùng 1
nhóm thì không thể chọn đồng thời.
- Các thuộc tính, phương thức, sự kiện
tương tự CheckBox.

87
ĐIỀU KHIỂN NHÓM -
GROUPBOX

Là điều khiển được


dùng để nhóm các
điều khiển khác.
Thuộc tính:
- Text: Chuỗi trên tiêu
đề của GroupBox.
TD (hình bên)

88
ĐIỀU KHIỂN PICTURE
BOX
Được sử dụng để hiển thị hình ảnh.
Thuộc tính
- Image: Xác định hình ảnh cần hiển thị.
- SizeMode: xác định cách thức ảnh được hiển
thị (AutoSize, CenterImage, Normal,
StretchImage)
Sự kiện
- SizeModeChange: xảy ra khi thuộc tính
SizeMode thay đổi giá trị.

89
ĐIỀU KHIỂN IMAGELIST

Dùng để lưu các hình ảnh và cho phép


chúng hiển thị ở các điều khiển khác
nhau.
Thuộc tính
- Images: tập hợp các ảnh của
ImageList.
- ImageSize: kích thước của các ảnh có
trong ImageList.
Phương thức
- Draw: vẽ một ảnh xác định. 90
ĐIỀU KHIỂN TIMER

Là điều khiển đáp ứng lại sự trôi đi của thời


gian.
Thuộc tính
- Enabled: cho phép điều khiển thời gian thực
thi.
- Interval: Khoảng thời gian giữa 2 sự kiện.
Phương thức
- Start: khởi động điều khiển thời gian.
- Stop: ngưng điều khiển thời gian.
Sự kiện
- Tick: Xảy ra sau 1 khoảng thời gian được chỉ
trong Interval
91
ĐIỀU KHIỂN TIMER - Thí
dụ

Thiết kế ứng dụng cho phép hiển thị đồng hồ


số.

Thuộc tính: Enable = True


Interval=1000
Xử lý sự kiện Tick
Private Sub Timer1_Tick(ByVal sender As
System.Object, _
ByVal e As System.EventArgs) Handles
Timer1.Tick
Me.lblTG.Text = CStr(Now) ‘ Now: hàm lấy thời
92
Bài 4: Các điều khiển
khác

Hộp thoại (Dialog).


Hộp thông điệp (MessageBox)

93
HỘP THOẠI
(DIALOGBOX)
Là 1 cửa sổ tạm chứa các điều khiển khác để
tương tác giữa ứng dụng và người sử dụng.
Đặc điểm
- Kích thước của hộp thoại không thể thay đổi.
- Hộp thoại không chứa menu.
Các loại hộp thoại
- Modal: hiển thị thông điệp & người dùng
không thể chuyển đổi sang các cửa sổ khác khi
hộp thoại còn tồn tại.
- Modaless: ta có thể chuyển đổi sang các cửa
sổ khác dễ dàng.

94
OPEN FILE DIALOG
Đây là hộp thoại mở tập tin.

95
FONT DIALOG
Đây là hộp thoại cho phép chọn Font.

96
COLOR DIALOG

Đây là hộp thoại cho phép chọn màu từ bảng


màu của hệ thống.

97
HỘP THÔNG ĐIỆP -
MESSAGEBOX

Dùng để hiển thị thông báo.


Cách sử dụng:
MessageBox.Show(“[Thông điệp]”)
Ta có thể sử dụng Show như 1 hàm, kết quả
trả về (DialogResult) của hàm có thể có các
giá trị: Abort, Cancel, Inorge, No, None, OK,
Retry, Yes.
MessageBox.Show(s1 As String, s2 As
String, _
btns As MessageBoxButton, icns As _
MessageBoxIcon) As DialogResult
s1: Thông điệp cần hiển thị.
s2: Tiêu đề của hộp thông điệp. 98
HỘP THÔNG ĐIỆP -
MESSAGEBOX

MessageBoxButton: AbortRetryInorge, OK,


OKCancel, RetryCancel, YesNo, YesNoCancel.
MesageBoxIcon: Asterisk, Error, Exclamation,
Hand, Information, None, Question, Stop,
Warning.
TD:
MessageBox.Show("Chào mừng bạn làm quen với
hộp _
thông điệp", "Thông báo",
MessageBoxButtons.YesNoCancel, _
MessageBoxIcon.Information)

99
Bài 5: Menu

Tạo menu với MainMenu.


Tạo menu ngữ cảnh với
ContextMenu.
Xử lý sự kiện của các mục của
menu
Tạo menu bằng mã lệnh

100
MENU - KHÁI NIỆM

Menu là một loại điều khiển trong đó người


dùng có thể lựa chọn các mục để thực thi từ một
danh sách cho trước.
Phân loại
- Menu thả xuống (Drop-Down Menu): là
dạng menu thông dụng nhất.
- Menu bật ra (Pop-Up Menu,
ContextMenu): thường hiển thị khi ta ấn nút phải
chuột.

101
DROPDOWN MENU
Tạo menu nhờ vào điều khiển MainMenu.
Các bước tạo menu:
- Tạo menu mới và menu bar.
- Thêm các mục menu con vào menu đã
có.
- Sửa đổi lại các thuộc tính của menu và
các mục menu.
- Xử lý sự kiện Click của các mục menu
con.

102
DROPDOWN MENU - THÍ
DỤ

103
ĐIỀU KHIỂN MAIN MENU
MainMenu: hiển thị 1 menu khi ứng
dụng được thực thi. Các menu con của
MainMenu gl Menu.
MenuItem: mục cụ thể của 1 Menu xác
định.
Thuộc tính
- IsParent: True nếu mục menu này là
cha của các mục menu con nào đó.
- MenuItems: tập hợp các mục menu con.
Phương thức
- MergeMenu: ghép các mục menu con
của 1 menu xác định vào menu hiện 104
MENUITEM
Thuộc tính
- Checked: là True nếu có dấu  trước
mục menu con.
- Index: vị trí của menu con trong 1 menu
xác định.
- Shortcut: xác lập phím tắt.
- Parent: tên (Name) của menu cha.
- Text: chuỗi hiển thị trên mục menu.
Sự kiện
- Click: Xảy ra khi người dùng Click chọn
mục menu.
105
Private Sub MenuItem4_Click(ByVal sender As
System.Object, _
ByVal e As System.EventArgs) Handles
MenuItem4.Click
MessageBox.Show("Bạn chọn File/Save", "Thông
báo")
End Sub
Private Sub MenuItem5_Click(ByVal sender As
System.Object, _ 106
CONTEXT MENU
Là điều khiển cho phép người dùng truy cập các
mục trên menu nhờ thao tác nhấp chuột phải.
Sau khi ContextMenu được tạo ra, chúng sẽ được
gắn với một điều khiển khác nhờ vào thuộc tính
ContextMenu của điều khiển đó.
TD tạo ContextMenu & thiết lập thuộc tính
ContextMenu của Form
Private Sub Form1_Load(ByVal sender As System.Object,
ByVal e _
As System.EventArgs) Handles _
MyBase.Load
Me.ContextMenu = ContextMenu1
End Sub

107
TẠO MENU BẰNG MÃ
LỆNH
Ta có thể thêm hay xóa đi một mục menu (MenuItem)
của 1 menu nào đó nhờ vào các phương thức Add &
Remove.
TD: Xử lý sự kiện Load của Form bằng đoạn mã lệnh tạo
menu:
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e
_
As System.EventArgs) Handles MyBase.Load
Dim myMainMenu As New MainMenu
Dim FileMenu As New MenuItem
Dim NewItem As New MenuItem
Dim OpenItem As New MenuItem
NewItem.Text = "&New"
OpenItem.Text = "&Open..."
FileMenu.Text = "&File"
FileMenu.MenuItems.Add(NewItem)
FileMenu.MenuItems.Add(OpenItem) 108
myMainMenu.MenuItems.Add(FileMenu)
TD xóa 1 mục menu
Dim kq As New DialogResult
kq = MessageBox.Show("Bạn muốn xóa mục New không?",
"Xóa", _
MessageBoxButtons.YesNo)
If kq = DialogResult.Yes Then
FileMenu.MenuItems.RemoveAt(0)
109
End If
KẾT QUẢ THÍ DỤ

110
Chương 3: Các kiểu dữ
liệu & Bẫy lỗi trong
VB.NET

Cách thức sử dụng các kiểu dữ


liệu.
Một số kiểu mở rộng: liệt kê, mảng,
tập hợp.
Bẫy lỗi (Error Handler) trong
VB.NET.

111
Bài 1: Sử dụng các kiểu dữ
liệu

Các kiểu dữ liệu của .NET


Framework.
Một số hàm thao tác trên các giá
trị các kiểu cũng như các hàm xử
lý chuỗi

112
CÁC KIỂU CỦA .NET
Chia làm các loại: số nguyên, số
thực, luận lý, ký tự.
Kiểu số nguyên:
Kiểu .NET Kiểu VB.NET Miền g. trị
System.Byte Byte 0..255
System.Int1 Short -32768..
6 32767
System.Int3 Integer -231..231-1
2
System.Int6 Long -263..263-1
4 113
CÁC KIỂU CỦA .NET

Kiểu số thực

Kiểu Kiểu Mô Độ Miền g. trị


.NET VB.NET tả chính
System. Single xác
32 bit 7 ký số +/-1.4*10-45.. +/-
Single 3.4*1038
System. Double 64 bit 15-16 ký +/-5.0*10-324.. +/-
Double số 1.7*10308
System. Decimal 128 28 ký số +/-1.0*10-28.. +/-
Decimal bit 7.9*1028

114
CÁC KIỂU CỦA .NET
Kiểu luận lý: Kiểu của .NET là
System.Boolean ứng với kiểu Boolean của
VB.NET với 2 giá trị là True và False.
Kiểu ký tự: Kiểu của .NET là System.Char ứng
với kiểu Char của VB.NET (16 bit - Unicode).
Trong VB.NET một hằng ký tự được đặt trong
cặp dấu ngoặc kép với ký tự c đằng sau.
TD: Dim a As Char
a = “B”c

115
CÁC KIỂU CỦA .NET
Kiểu chuỗi ký tự: Kiểu .NET là System.String
ứng với String trong VB.NET.
Trong VB.NET, hằng chuỗi được đặt trong cặp
dấu ngoặc kép.
TD: Dim s As String
s = “Tin Học K30”
Kiểu đối tượng: Kiểu .NET là System.Object
tương ứng với Object trong VB.NET. Đây là kiểu
gốc cho tất cả các kiểu trong VB.NET.
TD: Dim o As Object
o=5
o = New
System.Windows.Forms.Form()
116
KIỂU DỮ LIỆU - HÀM THÀNH
VIÊN

Parse: hàm có ở các kiểu giá trị. Hàm này cho


phép tạo ra một giá trị số từ một chuỗi.
TD: Dim d As Integer
d = Integer.Parse(“12345”) ‘ d là
12345
System.Console.WriteLine(CStr(d))
ToString: chuyển đổi giá trị sang dạng chuỗi.
TD: Dim a As Integer, s As String
a = 1234
s = a.ToString()
System.Console.WriteLine(s)
117
KIỂU DỮ LIỆU - HÀM THÀNH
VIÊN
Các hàm xử lý chuỗi
Hàm Ý nghĩa
Insert Chèn chuỗi cho trước vào chuỗi hiện hành
Remove Xóa một số ký tự được chỉ định.
Replace Thay thế chuỗi con trong chuỗi gốc bằng một
chuỗi khác
SubString Trả về một chuỗi con từ chuỗi cho trước
ToLower, Chuyển chuỗi sang chữ thường (hoa)
ToUpper
Trim Loại bỏ những ký tự không cần thiết trong chuỗi

118
CÁC HÀM XỬ LÝ CHUỖI
Imports System.Console
Module Module1
Sub Main()
Dim s1 As String
s1 = "Khoa CNTT - Dai Hoc Can Tho"
WriteLine(s1) ‘1
s1 = s1.Insert(12, "Khu 3 - ")
WriteLine(s1) ‘2
Dim s As String = s1.Substring(12)
WriteLine(s) ‘3
s = s1.Substring(12, 5)
WriteLine(s) ‘4
ReadLine()
End Sub
End Module 119
Bài 2: Kiểu liệt kê, mảng
& tập hợp

Kiểu liệt kê (enum)


Khai báo và sử dụng mảng (array)
Tập hợp trong VB.NET (collection)

120
KIỂU LIỆT KÊ
Cho phép định nghĩa một tập giá trị hằng để gợi
nhớ.
Nếu không chỉ ra giá trị của Enum, giá trị đầu
TD1: Khai báo kiểu liệt kê TD2: Không chỉ ra giá trị
tiên là 0.
cho các ngày trong tuần. của Enum
Enum Week Public Enum Numbers
Monday = 1 zero ' = 0
one '=1
Tuesday = 2
two ‘=2
Wednesday = 3
End Enum
Thursday = 4
Friday = 5
Saturday = 6 Dim a As Numbers
Sunday = 7 WriteLine((a.two*2))
End Enum
121
MẢNG
Mảng: tập hợp các phần tử có cùng kiểu.
Khai báo mảng 1 chiều:
Dim <Tên biến>(<Kích thước>) As <Kiểu phần
tử>
TD: Khai báo mảng có 31 số nguyên từ 0 đến 30
Dim a(30) As Integer
Ta có thể không chỉ ra kích thước mảng, nhưng
sau đó ta phải khởi tạo mảng.
TD: Dim a() As Integer
a = New Integer() {1,2,3,4}
Dim f As Integer
For Each f In a
Write(f)
Next 122
MẢNG NHIỀU CHIỀU
Khai báo tương tự mảng 1 chiều nhưng có thêm
kích thước của các chiều còn lại.
TD:
‘ Khai báo ma trận 3 dòng 5 cột
Dim m(2, 4) As Single
‘ Khai báo và khởi tạo ma trận
Dim intArrays(,) As Integer = {{1, 2, 3}, {4, 5, 6}}
‘ Hiển thị theo dạng ma trận
Dim f As Integer, c As Integer = 0
For Each f In intArrays
If c Mod 3 = 0 Then WriteLine()
Write(" ")
Write(f)
c=c+1
Next 123
TẬP HỢP (COLLECTION)
Là một lớp đặc biệt chứa một nhóm các đối
tượng nào đó.
Kgt System.Collection định nghĩa nhiều lớp
thành viên: ArrayList, Stack, HashTable,
BitArray, Queue…
Lớp ArrayList: cung cấp các chức năng cơ bản
của 1 tập hợp, có thể được sử dụng cho nhiều
mục đích khác nhau.
Khai báo & khởi tạo đối tượng ArrayList
Dim myList As New
System.Collections.ArrayList()
‘ Khởi tạo đối tượng myList có 5 phần tử
Dim myList As New
System.Collections.ArrayList(5) 124
ARRAY LIST
Phương thức
- Add: Thêm phần tử vào tập hợp
- Remove: Xóa phần tử khỏi tập hợp.
- RemoveAt: Xóa tại vị trí xác định trong tập
hợp
TD:
Dim f As Integer, r As New
System.Collections.ArrayList
For f = 1 To 5
r.Add(f)
Next
r.Remove(3) ‘ Xóa 3
For Each f In r
WriteLine(f) 125
ARRAY LIST
ArrayList có thể chứa các phần tử thuộc các kiểu
khác nhau.
TD:
Dim f As Integer, r As New
System.Collections.ArrayList
For f = 1 To 5
r.Add(f)
Next
r.Add(“Khoa Công Nghệ Thông Tin")
r.Add(“Khoa Kinh Tế & QTKD")
Dim f1 As Object
For Each f1 In r
If TypeOf f1 Is String Then
WriteLine(f1) ‘ Hiển thị giá trị là chuỗi
End If 126
Bài 3: Xử lý lỗi trong
VB.NET

Phân loại các lỗi trong ứng dụng.


Bẫy các lỗi thực thi (runtime error).
Điều khiển ErrorProvider.

127
PHÂN LOẠI LỖI
Có 3 loại lỗi (error)
- Lỗi cú pháp (syntax error)
- Lỗi thực thi (runtime error)
- Lỗi logic (logic error)
Ngoại lệ (Exception): là lỗi xảy ra lúc thực thi
chương trình (thuộc loại runtime error).
Khi có ngoại lệ xảy ra, nếu không có hành
động thích hợp chương trình sẽ bị ngắt.
Cần phải có cơ chế xử lý ngoại lệ

128
EXCEPTION

Một số ngoại lệ: ArithmeticException,


InvalidOperationException, OverflowException,
TypeLoadException, IndexOutOfRangeException,
InvalidCastException, NullReferenceException,
SecurityException…
Ngoài ra, người dùng có thể định nghĩa ngoại lệ
cho riêng mình (phải kế thừa từ những lớp trên).
Thuộc tính của Exception:
- Message: Chuỗi mô tả thông tin về ngoại lệ.
- Source: tên ứng dụng hay đối tượng gây ra lỗi.

129
XỬ LÝ NGOẠI LỆ
Ngoại lệ có thể được xử lý nhờ vào các từ
khóa: Try, Throw, Catch, Finally.
Cấu trúc mô hình xử lý ngoại lệ
Try
‘ Đoạn mã lệnh có thể gây lỗi
Catch e1 As Exception
‘ Nếu lỗi thuộc loại e1, đoạn mã này thực thi
‘ Ngược lại, khối Catch kế được thực thi
Catch en As Exception
‘ Nếu lỗi thuộc loại en, đoạn mã này thực thi
Finally
‘ Đoạn mã này luôn thực thi, dù ngoại lệ có
‘ xảy ra hay không? Phần này không bắt buộc
130
End Try
XỬ LÝ NGOẠI LỆ - THÍ
DỤ
TD: Ngoại lệ không thể đổi từ chuỗi sang
số
Module Module1
Sub Main()
Try
Dim r As Integer, s As String
Write("Nhap r= “)
s = ReadLine()
r = Integer.Parse(s)
WriteLine(1 / r)
Catch e As System.Exception
WriteLine(e.Message + " Xu ly ngoai le")
Finally
WriteLine("Khoi Finally")
End Try
131
End Sub
XỬ LÝ NGOẠI LỆ - THÍ
DỤ

132
ĐIỀU KHIỂN ERRORPROVIDER

Sử dụng để hiển thị icon lỗi khi người dùng thao


tác lỗi trên một điều khiển nào đó trên form.
Thuộc tính
- BlinkRate: xác định tốc độ nhấp nháy của icon
lỗi.
- BlinkStyle: xác định cách thức mà icon nhấp
nháy trên điều khiển(AlwaysBlink,
BlinkDifferentError, & NeverBlink).
- Icon: đường dẫn chỉ đến icon lỗi.
Phương thức
- GetError: nhận về chuỗi thông báo lỗi.
- SetError: xác lập chuỗi thông báo lỗi trên một
điều khiển xác định.
133
ERRORPROVIDER - THÍ DỤ

Xử lý ngoại lệ khi người dùng nhập không phải


số.

Dim N, i As Integer, K As Long = 1


Try
N = Integer.Parse(txtN.Text)
For i = 1 To N
K=K*i
Next
lblKQ.Text = CStr(K)
Catch
err1.SetError(txtN, "Đây phải là giá trị số")
End Try
134
ERRORPROVIDER - THÍ DỤ

135
Chương 4: Lập Trình
Hướng Đối Tượng với
VB.NET

Thuộc tính (Properties)


Đa hình (Polymorphism)
Thừa kế (Inheritance)
Giao diện (Interface)

136
THUỘC TÍNH
(PROPERTIES)
Thuộc tính là những đặc trưng của các đối tượng
của 1 lớp.
Thuộc tính có thể được tạo nhờ:
- Từ khóa Public.
- Phương thức Property.
TD: Lớp Con người (Person)
Class Person
Public strName As String
Public iAge As Integer
Public iWeight As Integer
End Class
Với cách truy cập Public, thuộc tính có thể được
truy xuất không giới hạn. 137
THUỘC TÍNH
(PROPERTIES)
Nếu ta muốn hạn chế truy cập, ta có thể sử dụng
từ khóa Private (data hiding).
Trong TD trên, ta có thể định nghĩa thuộc tính
Name:
Private strName As String
Public Property Name() As String
Set
strName = Value
End Set
Get
Name = strName
End Get
End Property 138
THUỘC TÍNH
(PROPERTIES)
Khối Set: gán trị cho thuộc tính.
Khối Get: lấy giá trị của thuộc tính.
Thuộc tính chỉ đọc (ReadOnly): khai báo khối
Get (không có khối Set) hay có thể khai báo
cách tường minh trong khối Get nhờ từ khóa
ReadOnly.
TD: Thuộc tính tuổi của lớp Con người là chỉ đọc.
Private iAge As Integer
Public ReadOnly Property Age() As
Integer
Get
Age = iAge
End Get
139
End Property
THUỘC TÍNH
(PROPERTIES)

Thuộc tính chỉ ghi (WriteOnly): khai báo khối


Set (không có khối Get) hay có thể khai báo cách
tường minh trong khối Set nhờ từ khóa
WriteOnly.
TD: Trọng lượng của lớp Con người là chỉ ghi.
Private iAge As Integer
Public WriteOnly Property Weight () As
Integer
Set
iAge = Value
End Set
End Property
140
ĐA HÌNH
(POLYMORPHISM)
Đa hình: Khả năng các phương thức có cùng một tên
nhưng các tham số của chúng là khác nhau.
Nạp chồng phương thức (method overload): khai báo
nhiều phương thức có cùng một tên (khác tham số)
trong một lớp.
TD: Tạo lớp Điểm trong không gian 2 chiều gồm 2
thuộc tính là tọa độ X & tọa độ Y.
- 2 phương thức xây dựng: một không có tham số
(gán X, Y, là 0), một có tham số (cặp (X1,Y1) có sẵn
để gán cho X,Y).
- Phương thức hiển thị tọa độ của điểm lên màn hình.
- 2 phương thức tính khoảng cách từ điểm hiện thời
đến 1 điểm khác, một không tham số (tính kc đến
gốc tọa độ), một có tham số là một điểm khác (tính
kc đến điểm này).
141
Class Point Public Sub New()
Private iX As Integer Me.X = 0
Private iY As Integer Me.Y = 0
Public Property X() As Integer End Sub
Get
X = iX Public Sub New(ByVal X1 As _
End Get Integer, ByVal Y1 As Integer)
Set(ByVal Value As Integer) Me.X = X1
iX = Value Me.Y = Y1
End Set End Sub
End Property
Public Property Y() As Integer Public Sub Display()
Get WriteLine("({0},{1})", Me.X,
Y = iY Me.Y)
End Get End Sub
Set(ByVal Value As Integer)
iY = Value Public Function _
End Set Distance() As Single
End Property Return Sqrt(Me.X ^ 2 + Me.Y ^
2)
142
End Function
Public Function _ WriteLine("Khoang cach p1 & p2: _
Distance(ByVal p As Point) As {0}", p1.Distance(p2))
Single
WriteLine("Khoang cach p1 & goc _
Return Sqrt((Me.X - p.X) ^ 2 + _
(Me.Y - p.Y) ^ 2) toa do: {0}",
End Function p1.Distance())
End Class ‘ Kết thúc ĐN lớp Point ReadLine()
End Sub
‘ Hàm main
Sub Main()
Lưu ý:
Dim p1, p2 As Point
p1 = New Point(2, 2) - Sử dụng không gian tên:
p2 = New Point System.Console &
WriteLine("Toa do p1 la System.Math.
({0},{1})", _
p1.X, p1.Y)
WriteLine("Toa do p2 la
({0},{1})", _
p2.X, p2.Y)
p1.Display()
p2.Display() 143
THỪA KẾ
(INHERITANCE)
Thừa kế là khả năng một lớp (lớp con) thừa hưởng những
thuộc tính & các hành động từ 1 lớp đã có (lớp cha).
VB.NET không hỗ trợ đa thừa kế.
Sử dụng từ khóa Inherits khi định nghĩa lớp con.
TD: Thiết kế lớp điểm trong không gian 3 chiều thừa kế từ
lớp điểm trong kg 2 chiều.
Class Point3D
Inherits Point ' Thừa kế từ lớp Point
Private iZ As Integer
Public Property Z() As Integer
Get
Z = iZ
End Get
Set(ByVal Value As Integer)
iZ = Value
End Set
End Property
End Class 144
THỪA KẾ - GHI ĐÈ PHƯƠNG
THỨC
Lớp con có thể ghi đè các phương thức của lớp cha.
Phương thức của lớp cha phải sử dụng từ khóa Overridable,
phương thức của lớp con sử dụng từ khóa Overrides.
Từ khóa MyBase: truy xuất các thuộc tính hay phương thức
của lớp cha từ lớp con.
TD: Lớp điểm trong kg 3 chiều cần ghi đè phương thức hiển
thị tọa độ điểm lên màn hình.
Public Sub New() MyBase.New(X1, Y1)
MyBase.New() Me.Z = z1
Me.Z = 0 End Sub
End Sub Public Overrides Sub
Public Sub New(ByVal x1 Display()
As _ WriteLine("Toa do p1 la _
Integer, ByVal y1 As Integer, ({0},{1},{2})", Me.X, Me.Y,
145
_ Me.Z)
THỪA KẾ - GHI ĐÈ PHƯƠNG
THỨC
Sub Main()
Dim p1, p2 As Point3D
p1 = New Point3D(1, 2, 3)
p1.Display()
p2 = New Point3D
p2.Display()
End Sub
Kết quả chương trình

146
GIAO DIỆN - INTERFACE
Nếu một lớp cần thể hiện tính đa thừa kế, ta sử
dụng giao diện (Interface).
Giao diện có các thuộc tính & các phương thức
riêng, tuy nhiên chúng không có mã lệnh để cài
đặt.
Lớp sử dụng giao diện cần phải cài đặt
(Implements) các phương thức đã định nghĩa
trong giao diện.
Public Interface Class Tool
TD:
Interface1 Implements Interface1
Sub A() Public Sub A() Implements
Function B(ByVal C As Interface1.A
_ ‘Cài đặt A
Integer) As Integer End Sub
147
End Interface …
Chương 5: Cơ sở dữ liệu
& VB.NET

Một số khái niệm về cơ sở dữ liệu


Ngôn ngữ hỏi SQL (Structure Query
Language)
Giới thiệu về ADO.NET

148
Bài 1: Một số khái niệm
về cơ sở dữ liệu

Cơ sở dữ liệu (Database)
Bảng (table) & trường (field)
Khóa
Mối kết hợp (relationship)

149
CƠ SỞ DỮ LIỆU
Cơ sở dữ liệu là một kho chứa thông tin.
Flat files: tất cả dữ liệu chứa trong 1 tập tin duy
nhất. TD: Bảng tính Excel:
Đặt Ngày Hàng hóa Số Đơn Tên KH Địa chỉ
hàng đặt lượng giá KH
1000 02/03/0 Bột giặt Omo 5 (kg) 15000 NV Cường 01 THĐ
6
1000 02/03/0 Kem đánh răng 10 (hộp) 10000 NV Cường 01 THĐ
6 P/S
1000 02/03/0 Dầu gội Clear 10 10000 NV Cường 01 THĐ
6 (chai)
1001 03/03/0 Bột giặt Omo 15 (kg) 15000 Trần Văn 02 LTT
6 Ba
1001 03/03/0 Trà chanh IceTea 10 (gói) 5000 Trần Văn 02 LTT
6 Ba
150
CƠ SỞ DỮ LIỆU
Bất lợi:
- Lãng phí không gian lưu trữ.
- Có nhiều thông tin trùng.
- Rắc rối trong bảo trì.
Cơ sở dữ liệu quan hệ (relational database):
tập hợp các nhóm thông tin khác nhau gl bảng
(table) được kết hợp lại theo cách thức nào đó.
TD: Trong TD trên cơ sở dữ liệu có thể gồm 3
bảng:
- KhachHang(MaKH, TenKH, DiachiKH)
- HangHoa(MaHang, TenHang, Dongia, Ghichu)
- DatHang(STTDH, MaKH, MaHang, Soluong)151
CƠ SỞ DỮ LIỆU - CÁC KHÁI
NIỆM
Bảng (table): chứa các mẩu tin là các mẩu dữ
liệu riêng rẽ trong phân nhóm dữ liệu.
Mẩu tin (record): chứa các trường (field), mỗi
trường thể hiện một bộ phận dữ liệu của mẩu tin.
TD bảng KhachHang:
MaKH TenKH Diachi

Mẩu tin 1 KH01 NV Cường 01 THĐ

Mẩu tin 2 KH02 Trần Văn Ba 02 LTT

Trường 1 Trường 2 Trường 3

152
CƠ SỞ DỮ LIỆU - KHÓA
Khóa chính (primary key): là một hay nhiều
trường mà chúng xác định duy nhất mỗi mẩu tin
trong bảng.
TD Khóa chính bảng KhachHang là MaKH.
HangHoa là MaHang.
DatHang là STTDH, MaKH,
MaHang
Khóa ngoại (foreign key): là một hay nhiều
trường ở một bảng nhưng chúng là khóa chính ở
một bảng khác.
TD trong bảng DatHang ta có các khóa ngoại là
MaKH (là khóa chính của KhachHang), MaHang
(khóa chính của HangHoa). 153
CƠ SỞ DỮ LIỆU - MỐI KẾT
HỢP
Mối kết hợp (relationship): sự liên kết giữa
các bảng.
1-1: một mẩu tin trong 1 bảng xác định 1 mẩu tin
trong bảng khác.
1-n: mỗi mẩu tin trong 1 bảng xác định nhiều
mẩu tin trong bảng khác.
TD:

154
CƠ SỞ DỮ LIỆU - MỐI KẾT
HỢP
n-n: nhiều mẩu tin trong 1 bảng liên kết với
nhiều mẩu tin trong bảng khác.
Mối kết hợp này cần thêm bảng thứ 3 lưu các
quan hệ giữa 2 bảng.
TD: CSDL về
người sử dụng:

155
CƠ SỞ DỮ LIỆU - TOÀN VẸN
THAM CHIẾU
Toàn vẹn tham chiếu (referential integrity):
xác định mỗi khi dữ liệu trong các bảng bị thay
đổi (thêm, sửa, xóa) các mối kết hợp vẫn không
bị ảnh hưởng.
- Cascade update: Nếu có sự thay đổi giá trị
của 1 khóa, giá trị của khóa đó ở các bảng khác
cũng thay đổi theo.
- Cascade delete: Nếu một mẩu tin bị xóa, tất
cả các mẩu tin có liên quan trong cơ sở dữ liệu bị
xóa theo.
Thuận lợi: Không cần viết mã lệnh để cập nhật
lại cơ sở dữ liệu mỗi khi có sự thay đổi trên khóa
chính. 156
Bài 2: Ngôn ngữ hỏi
SQL

Structure Query Language (SQL)


Lựa chọn dữ liệu với câu lệnh
Select
Cập nhật dữ liệu với Update
Chèn thêm dữ liệu với Insert
Xóa dữ liệu với Delete

157
STRUCTURE QUERY
LANGUAGE

SQL là ngôn ngữ CSDL chuẩn.


SQL gồm nhiều phần: Ngôn ngữ định
nghĩa dữ liệu, ngôn ngữ thao tác dữ liệu
trao đổi, tạo view, cấp quyền…
Câu lệnh thường sử dụng: Select,
Update, Insert, Delete.

158
SQL - CÂU LỆNH SELECT
Được sử dụng để lựa chọn dữ liệu theo một số
điều kiện nào đó.
Mệnh đề Select
TD: Với CSDL người dùng
- Tìm kiếm tất cả các người dùng
Select UserName From Users
- Nếu muốn tên các người dùng không trùng
nhau:
Select Distinct UserName From RoleUser
- Ký tự * được dùng chỉ tất cả các trường
Select * From Users
- Sau Select có thể là một biểu thức
Select RoleID*10, RoleName From Roles
159
SQL - CÂU LỆNH SELECT
Mệnh đề Where: dùng để lọc & kết nối dữ liệu.
TD:
- Tìm các tên quyền có mã >3
Select RoleName From Roles Where RoleID>3
- Tìm các bộ (người dùng, tên quyền) tương ứng với
mã quyền >3
Select UserName, RoleName From Roles,
RoleUser
Where RoleUser.RoleID = Roles.RoleID AND
Roles.RoleID > 3
Các phép toán:
- So sánh: >, >=, <, <=, =, <>, BETWEEN…AND
- Logic: AND, NOT, OR
TD: Tìm các tên quyền có mã từ 2 đến 4
Select RoleName From Roles
Where RoleID BETWEEN 2 AND 4 160
SQL - CÂU LỆNH SELECT
Phép toán LIKE trên chuỗi: đối chiếu mẫu.
- %: ứng với chuỗi con bất kỳ.
- _:ứng với 1 ký tự bất kỳ.
TD: - Tìm các tên quyền có ký tự cuối là e:
Select RoleName From Roles
Where RoleName LIKE “%e”
- Tìm các tên người dùng có ký tự thứ 2 là h
Select UserName From Users
Where UserName LIKE “_h%”
Mệnh đề sắp thứ tự Order By
- ASC: thứ tự tăng.
- DESC: thứ tự giảm.
TD: Lựa chọn các tên quyền có mã >1 và sắp xếp
chúng theo thứ tự tăng.
Select RoleName From Roles
Where RoleID>1 Order By RoleName ASC 161
SQL - CÂU LỆNH INSERT
Dùng để thêm 1 hay nhiều dòng (mẩu tin) vào
một bảng đã có.
TD:
- Thêm người dùng nqtoan vào bảng User
Insert Into Users Values(“nqtoan”, ”abc”)
- Ta có thể chỉ rõ tên trường & giá trị cần xen.
Insert Into Users(Password, UserName)
Values(“abc”, “nqtoan”)
- Thêm cho tất cả người dùng quyền mới có mã là 4
Insert Into RoleUser
Select UserName As UserName, 4 As
RoleID
From Users
162
SQL - UPDATE &
DELETE
Update: Cho phép thay đổi giá trị các dòng (mẩu
tin).
TD:
- Sửa lại mật khẩu của người dùng lhbao là abc
Update Users
Set Password = “abc”
Where UserName = “lhbao”
Delete: Xóa các dòng (mẩu tin) thỏa điều kiện.
TD:
- Xóa tất cả các dòng (mẩu tin) của bảng
RoleUser
Delete From RoleUser
- Xóa tất cả các quyền của người dùng lhbao
Delete From RoleUser 163
Bài 3: Giới thiệu về
ADO.NET

OLE DB, ADO, ADO.NET


Dataset
.NET Data Providers
- Đối tượng Command.
- Đối tượng DataReader.
- Đối tượng DataAdapter.
DataBinding
164
OLEDB

OLEDB: Object Linking and Embedding for


DataBase: giao diện cơ sở dữ liệu được sử
dụng để truy cập các loại dữ liệu khác nhau.
Mô hình:

Relational
Database
OLEDB

Non-Relational
Database

165
ACTIVEX DATA OBJECT (ADO)

Tập hợp các đối tượng để truy cập


cơ sở dữ liệu thông qua trình cung
cấp OLEDB.
Mô hình Relational
Database
ADO OLEDB

Non-Relational
Database

166
ADO.NET

Là cải tiến của ADO.


Sử dụng XML để vận chuyển dữ liệu.

WinForm XML DataObject


Database
DataSet DataSet

Thành phần cơ bản của ADO.NET:


- DataSet
- .NET data provider: gồm các thành phần
Connection, Command, DataReader,
DataAdapter.
167
DATASET
Là đối tượng lưu dữ liệu được truy xuất từ cơ sở
dữ liệu.
Mô hình:
Client sửa Cập nhật
đổi Dataset lên
Dataset Server
Client Server
Dataset Gởi dữ
Gởi
Dataset liệu tới
tới Client Dataset

Tạo Dataset: tạo đối tượng của lớp Dataset.


TD: ‘ Tạo Dataset có tên là EmpInfor
Dim empDS As New Dataset(“EmpInfor”)
‘ Không cần chỉ tên của Dataset
Dim empDS As New Dataset() 168
DATASET
Thuộc tính
- Tables: tập các bảng của Dataset.
- Item: một bảng xác định trong Dataset.
Phương thức:
- Add: thêm một bảng.
- RemoveAt: xóa một bảng ở vị trí xác
định.
DataTable: là bảng lấy về từ CSDL.
- DataColumn: các cột trong DataTable.
- DataRow: dòng dữ liệu thật sự. 169
DATATABLE, DATACOLUMN,
DATAROW
DataTable - Thuộc tính
- Columns: tập hợp các cột
- Dataset: thuộc về Dataset nào
- Rows: tập hợp các dòng
DataColumn - Thuộc tính
- ColumnName: tên của cột
- Datatype: kiểu dữ liệu
- Table: cột thuộc Table nào
DataRow - Thuộc tính
- Item: giá trị ở một cột xác định.
- Table: dòng thuộc DataTable nào 170
.NET DATA PROVIDERS

Cho phép tương tác giữa CSDL & dataset.


Có thể truy cập, sửa đổi, dữ liệu nhờ đối tượng
Connection & Command.
Đối tượng Connection: thiết lập một nối kết dữ liệu giữa
ứng dụng & CSDL.

SQL .NET Data Provider OLE DB .NET Data


Provider
System.Data System.Data

System.Data.SqlClient System.Data.OleDb

171
.NET DATA PROVIDERS
Thuộc tính:
- ConnectionString: chuỗi nối kết đến CSDL.
- Database: CSDL muốn nối kết.
TD:
- SQL .NET Data Provider
Dim conn As SqlConnection
conn = New SqlConnection _
(“server=www”;uid=lhbao;pwd=abc;database=pubs”)
- OLE DB .NET Data Provider
Dim conn As OleDb.OleDbConnection
conn = New
OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; _
Data Source=D:\User.mdb“)
- Provider: trình cung cấp CSDL. Một số provider:
Access: Microsoft.Jet.OLEDB.4.0
SQL Server: SQLOLEDB
- Data Source: CSDL.
- User Id: tên người dùng.
- pwd: mật khẩu 172
THÍ DỤ .NET
CONNECTION
Tạo lớp kết nối đến CSDL Access với lúc khởi tạo đối
tượng cần truyền tham số là đường dẫn chỉ đến CSDL
User.mdb.
Public Class cnAccess
Public conn As OleDb.OleDbConnection
Public Sub New(ByVal FileName As String)
conn = New OleDb.OleDbConnection
conn.ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;” & _
“Data Source=" & FileName
conn.Open()
End Sub
Protected Overrides Sub Finalize()
conn.Close()
conn = Nothing
End Sub 173
ĐỐI TƯỢNG COMMAND
Tham chiếu đến CSDL nhờ việc thực thi một câu lệnh (SQL,
Stored Procedure).
2 loại Command:
- SQLCommand: SQL Server.
- OleDbCommand: các loại CSDL của các HQTCSDL khác
nhau (OleDb.OleDbCommand)
Thuộc tính
- Connection: nối kết CSDL.
- CommandType: kiểu Command được chỉ ra trong
CommandText; có 3 loại:
+ Text
+ Stored Procedure
+ Table Direct
Thực thi Command:
- ExecuteNonQuery: thực thi câu truy vấn hành động.
- ExecuteScalar: kết quả câu truy vấn là một giá trị.
- ExecuteReader: thực thi câu truy vấn, kq là một
DataReader. 174
DATAREADER
Chứa dữ liệu chỉ đọc (readonly) & chỉ cho phép di chuyển
tới (forwardonly).
Gồm SQLDataReader & OleDbDataReader.
Thuộc tính:
- FieldCount: Số trường.
- IsClosed: DataReader có đóng hay ko?
Phương thức:
- Close: đóng DataReader.
- GetName: lấy tên 1 cột xđ.
- GetValue: giá trị của 1 cột xđ.
- Read: đọc tuần tự từng dòng.
DataReader được khởi tạo nhờ gọi thực thi phương thức
ExecuteReader của đối tượng Command.
TD: Dim myReader As SqlDataReader
myReader = myCommand.ExecuteReader
175
DATAADAPTER

Sử dụng để cập nhật dữ liệu từ


nguồn dữ liệu đến Dataset & ngược
lại.
Gồm SqlDataAdapter &
OleDbDataAdapter.
Phương thức
- Fill: đồng bộ dữ liệu giữa Dataset &
nguồn dữ liệu.

176
DATABINDING
Ràng buộc giá trị trong nguồn dữ liệu với điều khiển của
Winform.
Simple Data Binding: 1 giá trị từ dataset ràng buộc với
1 điều khiển.
TD: Cột Salary của bảng Employes ràng buộc với thuộc
tính Text củaTextBox txtSa
Dim t As DataTable = Dataset.Tables(“Employes”)
txtSa.DataBindings.Add(“Text”, t, ”Salary”)
Complex DataBinding: một điều khiển ràng buộc toàn
bộ dataset. Chỉ có điều khiển DataGrid & ComboBox hỗ
trợ loại này.
TD: Ràng buộc toàn bộ dữ liệu của trường
DepartmentName với ComboBox cboDPName
Dim t As DataTable = Dataset.Tables(“Daparment”)
cboDPName.DataSource = t 177
THÍ DỤ DATABINDING
Với CSDL Users.mdb, thiết kế Form cho
phép hiển thị tên người dùng cùng các
quyền tương ứng.
Giải quyết:
- Sử dụng lớp cnAccess ở phần trước để
tạo kết nối.
- Một đối tượng Command để thực thi truy
vấn.
- Một đối tượng DataAdapter được dùng
để thiết lập cho 1 Dataset.
- Ràng buộc Dataset với lưới hiển thị.
178
Public Class frmUser
Inherits System.Windows.Forms.Form
Private cn As cnAccess
Private dr As OleDb.OleDbDataReader
Private com As OleDb.OleDbCommand
Private da As OleDb.OleDbDataAdapter
Private dt As DataSet
Private Sub Form1_Load(ByVal sender As _
System.Object, ByVal e As System.EventArgs) Handles
MyBase.Load
cn = New cnAccess("F:\Data\Bai giang\VBNet\users.mdb")
com = New OleDb.OleDbCommand("SELECT Users.UserName,
“&_
“ Roles.RoleName FROM Users, Roles, RoleUser WHERE “ & _
“Roles.RoleID = RoleUser.RoleID AND Users.UserName = “ & _
“RoleUser.Username")
com.Connection = cn.conn
da = New OleDb.OleDbDataAdapter(com)
dt = New DataSet
da.Fill(dt)
grdHT.DataSource = dt.Tables(0) 179
THÍ DỤ VỀ CẬP NHẬT DỮ
LIỆU

Cũng với CSDL Users.mdb, thiết kế Form cho phép


thêm quyền cho người dùng.
Giải quyết:
- Kết nối đến CSDL nhờ lớp cnAccess.
- Ràng buộc ComboBox người dùng với
dữ liệu của bảng Users
- Ràng buộc ComboBox quyền với
dữ liệu của bảng Roles
- Thêm quyền cho người dùng xác định thực chất là
thêm vào bảng RoleUser (người dùng, mã quyền).

180
Public Class frmCom
Inherits System.Windows.Forms.Form
Private cn As cnAccess
Private comUser, comRole As OleDb.OleDbCommand
Private drUser, drRole As OleDb.OleDbDataAdapter
Private dt As DataSet
Private Sub frmCom_Load(ByVal sender As System.Object, ByVal e
As _
System.EventArgs) Handles MyBase.Load
cn = New cnAccess("F:\Data\Bai giang\VBNet\Baigiang\users.mdb")
comUser = New OleDb.OleDbCommand("Select UserName From
Users")
comUser.Connection = cn.conn
drUser = New OleDb.OleDbDataAdapter(comUser)
dt = New DataSet
drUser.Fill(dt, "Users")
cboUser.DataSource = dt.Tables("Users")
cboUser.DisplayMember = "UserName"
comRole = New OleDb.OleDbCommand("Select * From Roles")
comRole.Connection = cn.conn
drRole = New OleDb.OleDbDataAdapter(comRole)
drRole.Fill(dt, "Role")
cboRole.DataSource = dt.Tables("Role") 181
Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal
e As _
System.EventArgs) Handles btnAdd.Click
Dim r() As DataRow

‘ Tìm mã quyền dựa vào tên quyền trên ComboBox tên quyền

r = dt.Tables("Role").Select("RoleName = '" & cboRole.Text & "'")


Try
Dim comT As OleDb.OleDbCommand

‘ Thực thi câu truy vấn hành động

comT = New OleDb.OleDbCommand("Insert Into RoleUser


Values(" & _
r(0).Item(0) & ",'" & cboUser.Text & "')", cn.conn)
comT.ExecuteNonQuery()
MessageBox.Show("Thêm hoàn tất!")
Catch e1 As Exception
MessageBox.Show("Dữ liệu đã có. Thêm không thành
công!")
End Try 182
End Sub
KẾT QUẢ

183
Cám ơn đã quan tâm!!!

184

You might also like