SlideShare ist ein Scribd-Unternehmen logo
1 von 116
Downloaden Sie, um offline zu lesen
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

MỤC LỤC
MỤC LỤC...................................................................................................................1
CHƯƠNG 1: KIẾN TRÚC CỦA .NET .......................................................................3
1.1.

Môi trường thực thi ngôn ngữ chung – CLR................................................3

1.2.

Ngôn ngữ trung gian - IL.............................................................................4

1.3.

Giới thiệu về .Net Framework .....................................................................5

CHƯƠNG 2: LẬP TRÌNH WINDOWS FORMS ........................................................6
2.1.

Tạo một ứng dụng Windows form ...............................................................6

2.2.

Lớp Control.................................................................................................7

2.3.

Form ...........................................................................................................7

2.3.1.

Chức năng ............................................................................................7

2.3.2.

Một số thuộc tính thường dùng .............................................................7

2.3.3.

Một số sự kiện thường dùng................................................................ 10

2.4.

Tập hợp .....................................................................................................14

2.4.1.

Khái niệm .............................................................................................. 14

2.4.2.

Các thuộc tính, phương thức lớp Collection ...........................................14

2.5.

Một số control ...........................................................................................15

2.5.1.

Button.................................................................................................15

2.5.2.

Combobox ..........................................................................................15

2.5.3.

WebBrowser.......................................................................................17

2.5.4.

Textbox .............................................................................................. 19

2.5.5.

MaskedTextbox ..................................................................................26

2.5.6.

RichTextBox ......................................................................................26

2.5.7.

Nhóm điều khiển Menu ......................................................................31

2.5.8.

Nhóm điều khiển Dialog .....................................................................34
-1-
Đề cương môn học: Chuyên đề 01

2.5.9.
2.5.10.
2.6.

Biên soạn: Hoàng Quốc Việt

ListView............................................................................................. 42
DataGridView .................................................................................60

User Control.............................................................................................. 79

2.6.1.

Khái niệm ...........................................................................................79

2.6.2.

Cách xây dựng các User Control.........................................................79

2.7.

Thao tác với file XML...............................................................................80

2.8.

Thao tác với Registry ................................................................................85

CHƯƠNG 3: LẬP TRÌNH CƠ SỞ DỮ LIỆU............................................................88
3.1.

Giới thiệu ADO.NET ................................................................................88

3.2.

Các mô hình thao tác với CSDL ................................................................ 89

3.3.

Kết nối đến nguồn dữ liệu bằng đối tượng Connection .............................. 90

3.4.

Thực thi câu lệnh SQL bằng đối tượng Command .....................................93

3.5.

Truy vấn và nhận về dữ liệu với DataReader .............................................98

3.6.

Cập nhật và truy vấn dữ liệu với đối tượng DataAdapter ......................... 100

3.7.

Mô hình DataSet ..................................................................................... 102

3.8.

Sử dụng DataView trong sắp xếp và tìm kiếm dữ liệu ............................. 104

3.9.

Ràng buộc dữ liệu với các điều khiển ...................................................... 104

CHƯƠNG 4: CRYSTAL REPORT ......................................................................... 105
4.1.

Thiết kế báo cáo với Crystal Report ........................................................ 105

4.2.

Nạp và hiển thị Report trong chương trình............................................... 113

4.3.

Thiết kế Report động............................................................................... 114

-2-
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

CHƯƠNG 1: KIẾN TRÚC CỦA .NET
1.1.

Môi trường thực thi ngôn ngữ chung – CLR
Như đã đề cập thì CLR thực hiện quản lý bộ nhớ, quản lý thực thi tiểu trình,

thực thi mã nguồn, xác nhận mã nguồn an toàn, biên bịch và các dịch vụ hệ thống
khác. Những đặc tính trên là nền tảng cơ bản cho những mã nguồn được quản lý chạy
trên CLR.
Do chú trọng đến bảo mật, những thành phần được quản lý được cấp
những mức độ quyền hạn khác nhau, phụ thuộc vào nhiều yếu tố nguyên thủy của
chúng như: liên quan đến Internet, hệ thống mạng trong nhà máy, hay một máy tính
cục bộ. Điều này có nghĩa rằng, một thành phần được quản lý có thể có hay không có
quyền thực hiện một thao tác truy cập tập tin, thao tác truy cập registry, hay các chức
năng nhạy cảm khác.
CLR thúc đẩy việc mã nguồn thực hiện việc truy cập được bảo mật. Ví dụ,
người sử dụng giới hạn rằng việc thực thi nhúng vào trong một trang web có thể chạy
được hoạt hình trên màn hình hay hát một bản nhạc, nhưng không thể truy cập được
dữ liệu riêng tư, tập tin hệ thống, hay truy cập mạng. Do đó, đặc tính bảo mật của CLR
cho phép những phần mềm đóng gói trên Inernet có nhiều đặc tính mà không ảnh
hưởng đến việc bảo mật hệ thống.
CLR còn thúc đẩy cho mã nguồn được thực thi mạnh mẽ hơn bằng việc thực thi
mã nguồn chính xác và sự xác nhận mã nguồn. Nền tảng của việc thực hiện
này là Common Type System (CTS). CTS đảm bảo rằng những mã nguồn được
quản lý thì được tự mô tả (self- describing). Sự khác nhau giữa Microsoft và các
trình biên dịch ngôn ngữ của hãng thứ ba là việc tạo ra các mã nguồn được quản lý có
thể thích hợp với CTS. Điều này thì mã nguồn được quản lý có thể sử dụng những
kiểu được quản lý khác và những thể hiện, trong khi thúc đẩy nghiêm ngặt việc sử
dụng kiểu dữ liệu chính xác và an toàn.
Thêm vào đó, môi trường được quản lý của runtime sẽ thực hiện việc tự động
xử lý layout của đối tượng và quản lý những tham chiếu đến đối tượng, giải phóng
chúng khi chúng không còn được sử dụng nữa. Việc quản lý bộ nhớ tự động này còn
giải quyết hai lỗi chung của ứng dụng: thiếu bộ nhớ và tham chiếu bộ nhớ không hợp
lệ.
-3-
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

Trong khi runtime được thiết kế cho những phần mềm của tương lai, nó cũng
hỗ trợ cho phân mềm ngày nay và trước đây. Khả năng hoạt động qua lại giữa mã
nguồn được quản lý và mã nguồn không được quản lý cho phép người phát triển tiếp
tục sử dụng những thành phần cần thiết của COM và DLL.
Rutime được thiết kế để cải tiến hiệu suất thực hiện. Mặc dù CLR cung cấp
nhiều các tiêu chuẩn dịch vụ runtime, nhưng mã nguồn được quản lý không bao giờ
được dịch. Có một đặc tính gọi là Just-in-Time (JIT) biên dịch tất cả những mã nguồn
được quản lý vào trong ngôn ngữ máy của hệ thống vào lúc mà nó được thực thi.
Khi đó, trình quản lý bộ nhớ xóa bỏ những phân mảnh bộ nhớ nếu có thể được và
gia tăng tham chiếu bộ nhớ cục bộ, và kết quả gia tăng hiệu quả thực thi.
1.2.

Ngôn ngữ trung gian - IL
Như chúng ta đã biết, Intermediate Language hoạt động như là bản chất của

.NET Framework. Là lập trình viên C#, chúng ta nên biết rằng mã C# sẽ luôn được
dịch sang Intermediate Language trước khi nó được thực thi (thật vậy, trình biên dịch
C# chỉ dịch sang mã có quản). Chúng ta hãy cùng khám phá các tính năng chính của
IL, bất kì ngôn ngữ nào hướng .NET cũng sẽ hỗ trợ các đặc tính chính của IL.
Sau đây là những đặc tính chính của Intermediate Language:
Hướng đối tượng và dùng interfaces
Sự tách biệt giữa kiểu giá trị và kiểu tham chiếu
Định kiểu mạnh
Quản lỗi thông qua các ngoại lệ
Sự dụng các thuộc tính

-4-
Đề cương môn học: Chuyên đề 01

1.3.

Biên soạn: Hoàng Quốc Việt

Giới thiệu về .Net Framework

.NET Framework là một platform mới làm đơn giản việc phát triển ứng dụng
trong môi trường phân tán của Internet. .NET Framework được thiết kế đầy đủ để đáp
ứng theo quan điểm sau:
Để cung cấp một môi trường lập trình hướng đối tượng vững chắc,
trong đó mã nguồn đối tượng được lưu trữ và thực thi một cách cục bộ.
Thực thi cục bộ nhưng được phân tán trên Internet, hoặc thực thi từ xa.
Để cung cấp một môi trường thực thi mã nguồn mà tối thiểu được việc
đóng gói phần mềm và sự tranh chấp về phiên bản.
Để cung cấp một môi trường thực thi mã nguồn mà đảm bảo việc thực thi
an toàn mã nguồn, bao gồm cả việc mã nguồn được tạo bởi hãng thứ ba
hay bất cứ hãng nào mà tuân thủ theo kiến trúc .NET.
Để cung cấp một môi trường thực thi mã nguồn mà loại bỏ được những lỗi
thực hiện các script hay môi trường thông dịch.
Để làm cho những người phát triển có kinh nghiệm vững chắc có thể nắm
vững nhiều kiểu ứng dụng khác nhau. Như là từ những ứng dụng trên nền
Windows đến những ứng dụng dựa trên web.
Để xây dựng tất cả các thông tin dựa triên tiêu chuẩn công nghiệp để đảm bảo
rằng mã nguồn trên .NET có thể tích hợp với bất cứ mã nguồn khác.

-5-
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

CHƯƠNG 2: LẬP TRÌNH WINDOWS FORMS
2.1.

Tạo một ứng dụng Windows form
Bước 1: Khởi động VS2008 và chọn Fille

New

Project …

Bước 2: Chọn Ứng dụng dạng Windows Forms Application, chọn nơi lữu trữ
Project (xem hình) nhấn OK.

-6-
Đề cương môn học: Chuyên đề 01

2.2.

Biên soạn: Hoàng Quốc Việt

Lớp Control

Xem slide
2.3.

Form

2.3.1. Chức năng
Form (hay còn gọi điều khiển Form) dùng để chứa các điều khiển khác
(Buttons, Label…)
2.3.2. Một số thuộc tính thường dùng
Tên
Name

Ỹ nghĩa
Tên của Form. Trong một Project tên của các Form phải
khác nhau.

AcceptButton

Giá trị mà thuộc tính này nhận là tên của một Button
trên Form (Nếu Form có chứa button). Khi đó nếu bạn
nhấn phím Enter thì sự kiện Click của Button mà bạn
chọn được thực thi mà không cần nhấn chuột vào
Button đó.

Autosize

Nhận một trong hai giá trị True hay False
- True: Không cho phép thay đổi kích thước Form mà
che đi các điều khiển khác chứa trên Form
- False: Ngược lại

AutoSizeMode

Cho phép thay đổi kích thước của Form hay không?
(Khi di chuyển chuột vào các mép của Form mà hiện
nên biểu tượng ↔ là cho phép). Và nhận một trong hai
giá trị

BackColor

-

GrowOnly: Cho phép
và GrowAndShrink: Không cho phép

Chọn màu nền cho Form

-7-
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

BackGroundImage

Chọn ảnh làm nền cho Form

CancelButton

Giá trị mà thuộc tính này nhận là tên của một Button
trên Form (Nếu Form có chứa button). Khi đó nếu bạn
nhấn phím ESC thì sự kiện Click của Button mà bạn
chọn được thực thi mà không cần nhấn chuột vào
Button đó (tương tự như thuộc tính AcceptButton ).

ControlBox

Nhận một trong hai giá trị True hay False
-

True:

Cho

phép

các

các

nút:

MaximizeBox, MinimizeBox, Close trên
Titlebar xuất hiện
False: Không Cho phép các các nút:
MaximizeBox, MinimizeBox, Close trên
Titlebar xuất hiện (Khi đó các thuộc tính
MaximizeBox, MinimizeBox của Form
cũng mất đi)

Font

Chọn kiểu Font chữ cho Form (Khi đó tất cả các điều
khiển được thêm vào Form sẽ có thuộc tính Font giống
như thuộc tính Font của Form)

ForeColor

Tương tự như thuộc tính Font nhưng áp dụng đối với
màu chữ

FormBorderStyle

Chọn Style cho Form (Có 7 lựa chọn khác nhau).

HelpButton

Nhận một trong hai giá trị True hay False.
-

True: Cho phép xuất hiện Buton có dấu ?
trên Titlebar (Với điều kiện: hai thuộc tính
MaximizeBox, MaximizeBox phải đặt giá

-

trị là False)
False: Ngược lại

→ Thuộc tính này sẽ hay đi kèm với điều khiển
-8-
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

HelpProvider về sau
Icon

Chọn một Icon (có đuôi mở rộng là .ico) trên máy tính
của bạn thay cho Icon mặc định của Form mà VS tạo ra

KeyPreview

MaximizeBox

Nhận một trong hai giá trị True hay False
-

True: Cho phép các sự kiện về bàn phím
của Form (KeyUp, KeyDown, KeyPress…
của Form) có hiệu lực.
False: Ngược lại

Nhận một trong hai giá trị True hay False
-

True: Cho phép nút MaximizeBox trên
Titlebar có hiệu lực
False: Ngược lại

MaximizeBox

Tương tự như thuộc tính MaximizeBox

Opacity

Độ trong suốt của Form

ShowIcon

Nhận một trong hai giá trị True hay False
-

ShowInTaskbar

StartPosition

True: Cho phép xuất hiện Icon của Form
False: Không cho phép xuất hiện Icon của
Form

Nhận một trong hai giá trị True hay False
-

True: Cho phép hiện Form dưới khay
Taskbar
False: Ngược lại

Vị trí hiển thị của Form so với màn hình hệ thống hay
Form cha (5 lựa chọn khác nhau)

Text

Giá trị Text của Form

WindowState

Trạng thái hiển thị của Form khi chạy (Khi bạn nhấn

-9-
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

vào nút Run của VS) (Có 3 lựa chọn khác nhau: Ẩn
dưới khay Taskbar, mở rộng hết màn hình…).

2.3.3. Một số sự kiện thường dùng
Tên
AutoSizeChanged

Ỹ nghĩa
Xảy ra khi thuộc tính Autosize của Form chuyển từ
True → False hay ngược lại là False → True.

BackColorChanged

Xảy ra khi thuộc tính BackColor của Form thay đổi

Click

Xảy ra khi người dùng Click chuột vào vùng làm việc
thuộc Form

ControlAdded

Xảy ra khi một điều khiển được Add vào Form

ControlRemoved

Xảy ra khi một điều khiển bị xóa khỏi Form

CursorChanged

Xảy ra khi thuộc tính Cursor của Form thay đổi

DoubleClick

Xảy ra khi người dùng DoubleClick vào vùng làm việc
của Form

FontChanged

Xảy ra khi thuộc tính Font của Form có sự thay đổi

ForeColorChanged

Xảy ra khi thuộc tính ForeColor của Form có sự thay
đổi

FormClosed

Xảy ra khi Form đã đóng (Nhấn vào nút X màu đỏ trên
Titlebar)

FormClosing

Xảy ra khi Form đang đóng (2 sự kiện FormClosed và
FormClosing thường dùng trong lập trình CSDL: khi
xảy ra sự kiện này thì đóng kết nối CSDL)

KeyDown

Xảy ra khi người dùng nhấn một phím hay một tố hợp
phím (tùy thuộc vào xử lý của chúng ta)

- 10 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

KeyPress

Xảy ra khi người dùng nhấn một phím

KeyUp

Xảy ra khi người dùng nhả một phím.

MouseClick

Xảy ra khi người dùng nhấn chuột (một trong 3 lựa
chọn: Trái, giữa, phải)

MouseDoubleClick

Xảy ra khi người dùng DoubleClick chuột vào một
vùng làm việc của Form(một trong 3 lựa chọn: Trái,
giữa, phải)

MouseDown

Xảy ra khi người dùng nhấn chuột

MouseHover

Xảy ra khi người dùng di chuyển vào các vùng làm việc
Form

MouseLeave

Xảy ra khi di chuyển chuột ra khỏi vùng làm việc của
Form

MouseMove

Xảy ra khi di chuyển chuột trên một vùng làm việc
thuộc Form (nếu Form có chứa một điều khiển nào đó,
khi di chuyển chuột trên điều khiển này thì không xảy
ra sự kiện MouseMove của Form).

MouseUp

Xảy ra khi người dùng nhả nhấn chuột (có thể là chuột
trái, chuột phải, chuột giữa - chuột cuộn)

Move

Xảy ra khi di chuyển Form (có sự thay đổi vị trí của
Form)

StyleChanged

Xảy ra khi thuộc tính FormBorderStyle của Form thay
đổi

TextChanged

Xảy ra khi thuộc tính Text của Form thay đổi.

2.3.4. Minh họa

- 11 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

2.3.4.1. Sự kiện FormClosed
//Sự kiện FormClosed - Sự kiện này được gọi khi Form đã đóng
private void frmForm_FormClosed(object sender, FormClosedEventArgs e)
{
MessageBox.Show("Sự kiện FormClosed được gọi",
"FormClosed",MessageBoxButtons.OK,MessageBoxIcon.Information);
}

2.3.4.2. Sự kiện FormClosing
//Sự kiện FormClosing xảy ra khi Form đang đóng
private void frmForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("Bạn có muốn đóng Form lại hay không?",
"FormClosing",
MessageBoxButtons.YesNo, MessageBoxIcon.Information) ==
DialogResult.Yes)
e.Cancel = false;// Đóng Form lại
else
e.Cancel = true;//Không đóng Form nữa
}

2.3.4.3.

Sự kiện KeyPress

//Sự kiện KeyPress
private void frmForm_KeyPress(object sender, KeyPressEventArgs e)
{
//Nếu không chỉ rõ phím nào được nhấn thì khi nhấn bất cứ phím nào sự
kiện KeyPress của Form đều xảy ra
//Chỉ rõ phím nào được nhấn thì phát sinh sự kiện KeyPress làm như sau
if (e.KeyChar = 'a')
MessageBox.Show("Sự kiện KeyPress xảy ra khi bạn nhấn phím a");

- 12 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

}
//Sự kiện KeyUp tương tự như sự kiện KeyPress
//Sự kiện KeyDown xảy ra khi nhấn một phím hay tổ hợp phím

2.3.4.4.

Sự kiện KeyDown
private void frmForm_KeyDown(object sender, KeyEventArgs e)
{
//khi nhấn một phím bất kì trên bàn phím thì sự kiện KeyPress
được gọi
//Đồng thời sự kiện KeyDown cũng được gọi → KeyPress là
trường hợp riêng của KeyDown
//Áp dụng: Nhấn một tổ hợp phím thì sự kiện KeyDown mới
được gọi
//Như Windows Media: Nhấn Ctrl+F để di chuyển bài tiếp theo
if (e.KeyCode == Keys.F && e.Modifiers == Keys.Control)
MessageBox.Show("Sự kiện KeyDown được gọi khi bạn nhấn
Ctrl + F");
}

2.3.4.5. Sự kiện MouseClick
//Sự kiện MouseClick
private void frmForm_MouseClick(object sender, MouseEventArgs e)
{
//Nếu bạn không muốn biết người dùng nhấn chuột TRÁI hay PHẢI hay
GIỮA thì khi nhấn bất kì
//Chuột nào cũng xảy ra sự kiện MouseClick của Form
//Còn nếu bạn muốn bắt được sự kiện người dùng nhấn chuột TRÁI,
PHẢI, hay GIỮA làm thế này
if (e.Button == MouseButtons.Left)
MessageBox.Show("Sự kiện MouseClick xảy ra khi bạn Click chuột
TRÁI");
else if (e.Button==MouseButtons.Middle)
- 13 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

MessageBox.Show("Sự kiện MouseClick xảy ra khi bạn Click chuột
GIỮA");
else if (e.Button==MouseButtons.Right)
MessageBox.Show("Sự kiện MouseClick xảy ra khi bạn Click chuột
PHẢI");
}
//Các sự kiện MouseDoubleClick, MouseDown, MouseUp... Xử lý
tương tự
2.4. Tập hợp
2.4.1. Khái niệm
Là một kiểu dữ liệu dùng lưu trữ nhiều phần tử có cùng đặc tính. Ví dụ: Mảng,
Tập các nút lệnh chứa trên Form, tập các phần tử (Item) của Combobox,
Listbox……….
2.4.2. Các thuộc tính, phương thức lớp Collection
Count/Length: Lấy về số phần tử của tập hợp.
Add, AddRange: Thêm phần tử vào tập hợp.
Remove, RemoveAt: Xóa phần tử khỏi tập hợp.
Clear: Xóa toàn bộ các phần tử khỏi tập hợp.
Insert: Chèn một phần tử vào tập hợp (Khác với Add luôn thêm phần tử
mới vào cuối tập hợp, Insert thêm vào một vị trí xác định nào đó
trong tập hợp).
Items[i]: Lấy một phần tử thứ i trong tập hợp.

- 14 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

2.4.3. Duyệt các phần tử trong tập hợp
Để duyệt các phần tử trong tập hợp người ta thường sử dụng vòng lặp ForEarch
foreach (biến in biến_Tập_hợp)
{Xử lý giá trị lấy được}
2.5.

Một số control

2.5.1. Button
2.5.2. Combobox
2.5.2.1.

Chức năng

Lưu trữ các mục dữ liệu (phần tử) dưới dạng danh sách
2.5.2.2.

Một số thuộc tính thường dùng
Tên

Anchor

Ý nghĩa
Xác định vị trí “neo đậu” của điều khiển so với Form

AutoCompleteCustomSource Xác định các phần tử cho tính năng AutoComplete của
Combobox (Tức là tính năng AutoComplete chỉ áp
dụng trên các phần tử này - Nếu thuộc tính
AutoCompleteSource là CustomSource)
AutoCompleteMode

Kiểu tự động tìm kiếm các phần tử trong Combobox.
Có một số lựa chọn sau
-

AutoCompleteSource

Suggest: Hiển thị kết qủa ra bên dưới
Append: Tự động điền vào Combobox và không
hiển thị ra bên dưới
SuggestAppend=Suggest+Append

Chọn nguồn các Item cho Combobox sử dụng tính
năng AutoComplete. Chú ý một số lựa chọn sau:
-

HistoryList: Danh sách các Url lưu trong History
của IE
ListItems: Các phần tử của Combobox được thêm
vào thông qua thuộc tính Items
CustomSource: Giá trị các phần tử trong thuộc tính
AutoCompleteCustomSource

- 15 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

BackColor

Chọn màu nền cho Combobox

Cursor

Hình dáng của chuột khi di chuyển vào Combobox

DataSource

Chọn nguồn dữ liệu (nguồn các phần tử) cho
Combobox (Có thể là một mảng dữ liệu kiểu string,
một trường trong CSDL…)

Dock

Vị trí bám dính của Combobox

Enabled

Cho phép Combobox có hiệu lực hay không?

Font

Chọn Font cho Combobox

ForeColor

Chọn màu chữ của các phần tử (Item) của Combobox

Items

Quản lý các phần tử trong Combobox (thêm các phần
tử vào Combobox, xóa đi…)

Text

Giá trị ứng với phần tử đang được chọn

Sorted

Nếu chọn là True: Tự động sắp xếp các phần tử trong
Combobox theo giá trị tăng dần

SelectedIndex

Get/Set chỉ số của phần tử đang chọn

Chú ý: Các điều khiển có rất nhiều thuộc tính giống nhau: Anchor, Dock, Font,
ForeColor, Enabled, Visible, TabIndex……Các thuộc tính này là giống nhau với tất cả
các điều khiển
2.5.2.3.

Một số phương thức thường dùng
Tên

Ý nghĩa

Add

Thêm một phần tử vào Combobox

AddRange

Thêm một mảng các phần tử vào Combobox

……………. → Tập các Item có các phương thức và thuộc tính của Collection

2.5.2.4.

Một số sự kiện thường dùng
Tên

Ý nghĩa

- 16 -
Đề cương môn học: Chuyên đề 01

SelectedIndexChanged

Biên soạn: Hoàng Quốc Việt

Xảy ra khi người dùng chọn phần tử khác khác

Chú ý: Các điều khiển (Form, Label ,Button…) có rất nhiều các sự kiện giống nhau. Ý
nghĩa của các sự kiện này là giống nhau với các điều khiển
2.5.3. WebBrowser
2.5.3.1. Chức năng
Duyệt các trang Web, hiển thị các File với các định dạng khác nhau.
2.5.3.2.

Một số thuộc tính thường dùng
Tên

Ý Nghĩa

ScrollBarsEnabled

Nhận một trong hai giá trị True hay False

Url

- True: Cho phép điều khiển hiển thị thanh cuộn.
- False: Ngược lại
Giá trị mà thuộc tính này nhận là một chuỗi String (Có
thể là tên một Website, đường dẫn tới một File…) mà
WebBrowser sẽ hiển thị

2.5.3.3.

Một số phương thức thường dùng
Tên

Navigate

Chức năng
Hiển thị nội dung File với tham số truyền vào
VD:
webBrowser1.Navigate("C:WindowsForrmInC#.ppt");

2.5.3.4.

Minh họa

Minh họa thuộc tính Url
//Đặt thuộc tính Url thông qua mã Code
//webBrowser1 là tên điều khiển WebBrowser
private void btWeb_Click(object sender, EventArgs e)
{
Uri u = new Uri(@"http://mail.google.com/");
webBrowser1.Url = u;
//Viết gộp lại như thế này: webBrowser1.Url = new
- 17 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

Uri(@"http://mail.google.com/");
//-> khi Click vào btWeb thì WebBrowser hiển thị WebSite
http://mail.google.com/
//Tất nhiên máy bạn phải kết nối với Internet
}

Minh họa phương thức Navigate
//Hiển thị một trang Web hay Một File nào đó -> Sử dụng phương thức Navigate
private void btWeb_Click(object sender, EventArgs e)
{
//Hiển thị Website
webBrowser1.Navigate(@"mail.google.com");//(1)
//<->webBrowser1.Url = new Uri(@"http://mail.google.com/");
//Chú ý: Muốn sử dụng (1) phải cho (2) và (3)... vào dạng chú thích
//Vì một lúc webBrowser không thể hiển thị cả Website, cả ảnh, vả file PPT

//Hiển thị File PowerPoint
//webBrowser1.Navigate(@"C:NET.ppt");//(2)
//Hiển thị Ảnh
//webBrowser1.Navigate(@"C:viethqtk1.jpg");//(3)
//................................
}

Phương thức thường dùng
//Phương thức hay dùng xử lý với WebBrowser để tạo ra trình duyệt Web
private void Navigate(String address)
- 18 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

{
if (address.Equals("about:blank")) return;
if (!address.StartsWith("http://") &&
!address.StartsWith("https://"))
{
address = "http://" + address;
}
try
{
webBrowser1.Navigate(new Uri(address));
}
catch (System.UriFormatException)
{
return;
}
}

2.5.4. Textbox
2.5.4.1. Chức năng
Điều khiển Textbox cho phép bạn nhập và hiển thị dữ liệu.
2.5.4.2.

Một số thuộc tính thường dùng
Tên

AcceptsTab

Ý nghĩa

Nhận một trong hai giá trị True hay False
-

True: Khi nhấn phím Tab thì con trỏ (Focus)
chỉ di chuyển bên trong Textbox (Với điều
kiện thuộc tính Multiline=True).
- 19 -
Đề cương môn học: Chuyên đề 01

-

Biên soạn: Hoàng Quốc Việt

False: Khi nhấn Tab thì Focus di chuyển qua
lại giữa các điều khiển trên Form

→ Thuộc tính này hay đặt bằng True trong các
ứng dụng soạn thảo văn bản
Anchor

Vị trí neo đậu của Textbox trên Form

AutoCompleteCustomSource

Ba thuộc tính này ý nghĩa tương tự như của

AutoCompleteMode

thuộc tính của điều khiển Combobox

AutoComplete Source
BackColor

Đặt mầu nền cho Textbox

BorderStyle

Chọn kiểu đường viền cho Textbox

ContextMenuStrip

Chọn Menu ngữ cảnh khi nhấn chuột phải vào
Textbox

Dock

Vị trí bám dính và điền đầy của Textbox với
Form

Font

Chọn kiểu Font chữ cho Textbox

HideSelection

Nhận một trong hai giá trị True hay False

MaxLenght

-

True: Không cho phép các thuộc tính:
SelectionStart…có hiệu lực.
False: Ngược lại

Số lượng kí tự lớn nhất cho phép nhập vào
Textbox

Multiline

Nhận một trong hai giá trị True hay False
-

True: Cho phép nhập và hiển thị giá trị của
Textbox trên nhiều dòng (người dùng có thể
nhìn thấy toàn bộ giá trị Text của nó)
- 20 -
Đề cương môn học: Chuyên đề 01

PasswordChar

-

Biên soạn: Hoàng Quốc Việt

False: Cho phép nhập/hiển thị giá trị của
Textbox trên một dòng

Hiển thị giá trị của Textbox dưới dạng các kí tự
mà bạn thay thế (kí tự do người dùng nhập vào:
*, #...)

ReadOnly
Cho phép hiển thị thanh trượt hay không? (Với

ScrollBars

điều kiện thuộc tính Multiline=True mới nhìn
thấy thanh cuộn)
TabIndex
Visible

Cho phép Textbox hiển thị hay không?

CanUndo

Trả lại hai giá trị True/False.
-

Các thuộc tính SelectionText

True: có thể Undo lại được (như
Word)
False: Ngược lại

SelectedText
SelectionStart
SelectionLength
……………….

Chú ý: Các điều khiển có rất nhiều thuộc tính giống nhau: Anchor, Dock, Font,
ForeColor, Enabled, Visible, TabIndex……Về ý nghĩa các thuộc tính này là giống
nhau với tất cả các điều khiển
2.5.4.3.

Một số phương thức thường dùng
Tên

AppendText

Ý nghĩa
Nối một chuỗi (string) vào giá trị Text hiện có của
Textbox

- 21 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

Copy
Xử lý phần nội dung bôi đen (như Word)

Cut
Paste
Focus

Chuyển Focus (con trỏ) vào TextBox

Clear

Xóa toàn bộ Textbox

Select

Lấy ra một chuỗi trong Textbox (xem Code)

SelectAll

Lấy tất cả giá trị của Textbox

Undo

Xử lý Undo như Word

2.5.4.4.

Một số sự kiện thường dùng
Tên

Ý nghĩa
Xảy ra khi người dùng nhấn phím trên bàn phím (tất

KeyPress

nhiên Textbox phải đang Focus – Áp dụng sự kiện này
để xử lý không cho phép nhập chữ vào Textbox…)
Xảy ra khi người dùng Click chuột trên điều khiển

MouseClick

Textbox
Xảy ra khi giá trị Text của Texbox (hay gọi giá trị

TextChanged

Textbox) thay đổi

2.5.4.5.

Minh họa

2.5.4.5.1. Minh họa thuộc tính Text của Textbox
private void btTextbox_Click(object sender, EventArgs e)
{
//Trước khi gán thuộc tính text
MessageBox.Show("Giá trị textbox trước khi gán: "+
- 22 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

textBox1.Text);
//Gán giá trị Text
textBox1.Text = "Chào các bạn";
//Sau khi gán
MessageBox.Show("Giá trị textbox sau khi gán: " + textBox1.Text);
}

2.5.4.5.2. Minh họa thuộc tính SelectedText
private void btTextbox_Click(object sender, EventArgs e)
{
//Thuộc tính SelectedText lấy ra một chuỗi mà bạn bôi đen (Chọn)
//Bạn hãy bôi đen một vài từ trong Textbox sau đó Click vào Button
này sẽ hiển thị
//Message thông báo từ bạn chọn
string str = textBox1.SelectedText;
MessageBox.Show("Từ bạn vừa chọn (bôi đen) là: "+str);
}

2.5.4.5.3. Minh họa thuộc tính SelectionStart và SelectionLength
private void btTextbox_Click(object sender, EventArgs e)
{
//Thuộc tính này dùng trong tìm kiếm rất nhiều
//Thuộc tính SelectionStart: Ví trí bắt đầu Select
//Thuộc tính SelectionLength: Chiều dài của vùng lựa chọn
//Chú ý: Đặt thuộc tính HideSelection=False
//Ví dụ: Tìm kiếm xem giá trị của Textbox có từ nào là chào hay
không. Nếu có thì nó tự Bôi đen từ đó
string str = "chào";
int i;
i = textBox1.Text.LastIndexOf(str);
- 23 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

if (i >= 0)
{
textBox1.SelectionStart = i;
textBox1.SelectionLength = str.Length;
}
}
2.5.4.5.4. Minh họa thuộc tính CanUndo và phương thức Undo
private void btTextbox_Click(object sender, EventArgs e)
{
//Nếu có thể Undo (có nghĩa: Bạn phải gõ văn bản vào Textbox rồi sửa,
xóa...)
//Mới có thể Undo lại được
if (textBox1.CanUndo)
textBox1.Undo();
}

2.5.4.5.5. Minh họa phương thức Select
private void btTextbox_Click(object sender, EventArgs e)
{
//Cú pháp chung: txtNoiDung.Select(Start, Length);
//Mục đích để lấy về một chuỗi từ từ vị trí nào và chiều dài của chuỗi
dược chọn (tất nhiên: bôi đen vùng này).
//-> Phương thức này tương đương với sử dụng 2 thuộc tính
SelectionStart và SelectionLength
//Ví dụ:
txtNoiDung.Select(10, 5);
//<-> 2 câu lệnh này
//textBox1.SelectionStart = 10;
//textBox1.SelectionStart = 5;
}
- 24 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

2.5.4.5.6. Minh họa phương thức AppendText
private void btTextbox_Click(object sender, EventArgs e)
{
//Giá trị Textbox trước khi gọi phương thức
MessageBox.Show("Trước: "+textBox1.Text);
//Gọi phương thức
textBox1.AppendText("Khoa CNTT - UTEHY");
//Giá trị Textbox trước khi gọi phương thức
MessageBox.Show("Sau: " + textBox1.Text);
}

2.5.4.5.7. Xử lý chỉ cho phép Textbox nhập số (sự kiện KeyPress của Textbox) –
Cách 1
private void txtNoiDung_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar >= '0' && e.KeyChar <= '9')
e.Handled = false;//Handled: Được xử lý
else
e.Handled = true;
}

2.5.4.5.8. Xử lý chỉ cho phép Textbox nhập số (sự kiện KeyPress của Textbox) –
Cách 2
private void txtNoiDung_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar))
e.Handled = true;
//Char.IsDigit(e.KeyChar) -->
//kiểm tra xem phím vừa nhập vào textbox có phải là ký tự số hay
không, hàm này trả về kiểu bool
//Char.IsContro(e.KeyChar) -->
- 25 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

//kiểm tra xem phím vừa nhập vào textbox có phải là các ký tự điều
khiển
//(các phím mũi tên,Delete,Insert,backspace,space bar…) hay không,
mục đích dùng hàm này là để cho phép người dùng xóa số trong trường hợp
nhập sai.
}
→ Sử dụng Textbox viết chương trình soạn thảo văn bản đơn giản (tham khảo
Notepad)

2.5.5. MaskedTextbox
2.5.5.1.

Chức năng
Dùng nhập dữ liệu theo các định dạng khác nhau (ngày tháng…)

2.5.5.2.

Một số thuộc tính thường dùng
Tên

Mask

Ý nghĩa
Đặt định dạng cho dữ liệu nhập (00/00/0000)

2.5.5.3.

Một số phương thức thường dùng
Tương tự như điều khiển Textbox

2.5.5.4.

Một số sự kiện thường dùng
Tương tự như điều khiển Textbox

2.5.6. RichTextBox
2.5.6.1.

Chức năng

Điều khiển RitchTextBox dùng để lưu trữ và hiển thị văn bản theo nhiều định
dạng khác nhau (định dạng chuẩn là rtf)
2.5.6.2.

Một số thuộc tính thường dùng

Điều khiển RitchTextBox có rất nhiều các thuộc tính giống Textbox nói riêng
và các điều khiển khác nói chung. Ý nghĩa của các thuộc tính này là giống nhau với
các điều khiển. Ở đây chúng ta xét một số thuộc tính khác của RitchTextBox
- 26 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

Tên

Ý nghĩa
Lấy về chuỗi được lựa chọn (chuỗi mà chúng ta bôi

SelectedText

đen)
SelectionStart, SelectionLength

Lấy về một chuỗi với vị trí bắt đầu và chiều dài, hai
thuộc tính này thường đi với nhau

SelectionFont

Lấy thông tin về Font của một chuỗi được lựa chọn
(bôi đen)

SelectionColor

Lấy thông tin về Color của chuỗi được bôi đen
được lựa chọn

CanUndo

Trả lại hai giá trị True/False.
-

CanRedo

2.5.6.3.

True: có thể Undo lại được (như
Word)
False: Ngược lại

Tương tự như thuộc tính CanUndo

Một số phương thức thường dùng
Tên

Ý nghĩa

AppendText

Nối một chuỗi vào RitchTextBox

Copy

Xử lý phần nội dung bôi đen (như Word)

Cut
Paste
Find

Tìm kiếm một xâu trong RitchTextBox

Focus

Chuyển Focus vào RitchTextBox

LoadFile

Đọc nội dung một file vào RitchTextBox

- 27 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

SaveFile

Ghi nội dung của RitchTextBox ra file

Select

Lấy ra một chuỗi trong RitchTextBox (tương tự
TextBox)

SelectAll

Lấy tất cả nội dung của RitchTextBox

Redo

Xử lý Undo, Redo như Word

Undo

2.5.6.4.

Minh họa

Giả sử có một Textbox có tên là richTextBox1. Chúng ta sẽ minh họa
RitchTextbox qua sự kiện click của một Button có tên là btrichTextBox.
Việc sử dụng các thuộc tính SelectedText, SelectionStart, SelectionLength,
CanUndo, CanRedo tương tự như TextBox (Xem lại Code phần điều khiển TextBox)
2.5.6.4.1. Minh họa thuộc tính SelectionFont
private void btRichTextBox_Click(object sender, EventArgs e)
{
//Sử dụng thuộc tính Font có thể lấy thông tin về Font của vùng Bôi đen
(không phải tất cả)
//Hoặc: Thay đổi Font của vùng bôi đen
//Trước hết lấy thông tin về Font
//InfoFont bao gồm tát cả các thông tin: Style, Tên Font...
string InfoFont = richTextBox1.SelectionFont.ToString();
MessageBox.Show(InfoFont);
//Chỉ lấy tên Font của vùng Bôi đen
string FontName = richTextBox1.SelectionFont.Name.ToString();
MessageBox.Show("Vùng bôi đen có Font là: " + FontName);
//Chỉ lấy Size của vùng Bôi đen
string FontSize = richTextBox1.SelectionFont.Size.ToString();
MessageBox.Show("Vùng bôi đen có Size là: " + FontSize);
- 28 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

//...................................................
}
2.5.6.4.2. Chọn Font cho vùng bôi đen thông qua thuộc tính SelectionFont (Chỉ vùng
bôi đen)
private void btRichTextBox_Click(object sender, EventArgs e)
{
FontDialog fo = new FontDialog();
//Hiển thị hộp thoại
if (fo.ShowDialog() == DialogResult.OK)
{
//Nếu muốn đổi Font một đoạn lựa chọn thì dùng câu lệnh này
richTextBox1.SelectionFont = fo.Font;
//Còn nếu muốn đổi Font cho toàn bộ RichTextBox thì dùng câu lệnh
này
//richTextBox1.Font = fo.Font;
}
}

2.5.6.4.3. Minh họa thuộc tính SelectionColor
private void btRichTextBox_Click(object sender, EventArgs e)
{
//Thuộc tính này lấy về màu của vùng được lựa chọn
//Tương tự như thuộc tính SelectionFont
string Color = richTextBox1.SelectionColor.Name.ToString();
MessageBox.Show(Color);
}

2.5.6.4.4. Đặt màu cho vùng bôi đen thông qua thuộc tính SelectionColor
private void btRichTextBox_Click(object sender, EventArgs e)
{
- 29 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

ColorDialog cl = new ColorDialog();
//Hiển thị hộp thoại
if (cl.ShowDialog() == DialogResult.OK)
{
//Nếu muốn đổi Font một đoạn lựa chọn thì dùng câu lệnh này
richTextBox1.SelectionColor = cl.Color;
}
}
2.5.6.4.5. Việc sử dụng các phương thức: AppendText, Select, SelectAll, Undo, Redo,
Undo tương tự như Textbox
2.5.6.4.6. Minh họa sử dụng phương thưc LoadFile
private void btRichTextBox_Click(object sender, EventArgs e)
{
//Load nội dung File C:NET.rtf vào RitchTextBox
//Tất nhiên ổ C của bạn phải tồn tại file C:NET.rtf
richTextBox1.LoadFile(@"C:NET.rtf");
//-> Thường sử dụng cùng với điều khiển OpenFileDialog để mở một
file trên máy
}

2.5.6.4.7. Minh họa sử dụng phương thưc SavaFile
private void btRichTextBox_Click(object sender, EventArgs e)
{
//Lưu nội dung RitchTextBox ra file
richTextBox1.SaveFile(@"C:File.rtf")
//-> Thường sử dụng cùng với điều khiển SaveFileDialog lưu file vào
một nơi bất kì trên máy
}
2.5.6.4.8. Minh họa Phương thức Find
private void btRichTextBox_Click(object sender, EventArgs e)
- 30 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

{
//Tìm kiếm một chuỗi trong RichTextBox -> nếu có thì bôi đen kết quả
tìm thấy
//Chú ý: Đặt thuộc tính HideSelection=False
//rtfNoiDung.Find("Chào", 0, 100, RichTextBoxFinds.Reverse);
//-> Ứng dụng trong tìm kiếm văn bản
richTextBox1.Find("chào", 0, 100, RichTextBoxFinds.MatchCase);
}
→ Sử dụng RitchTextBox viết chương trình soạn thảo văn bản đơn giản(tham
khảo WordPad)

2.5.7. Nhóm điều khiển Menu
2.5.7.1. Điều khiển Menu Strip
2.5.7.1.1. Chức năng
Điều khiển MenuStrip cho phép thiết kế hệ thống menu trên Form (menu một cấp
hay nhiều cấp). Ví dụ hệ thống menu của chương trình Word, Visual Studio
2008….MenuStrip cho phép thiết kế menu với các điều khiển:
ToolStripSeparator (Gạch phân cách)
ToolStripMenuItem (Menu con).
ToolStripCombobox (Combobox).
ToolStripTextbox (Textbox)

2.5.7.1.2. Một số thuộc tính thường dùng
Tên
TextDirection

Ý nghĩa
Chọn hình thức trình bày Menu (quay ngược, quay
- 31 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

900…)
Items

Thêm các menu con, kiểu của menu (Menu con,
Textbox, Combobox, gạch phân cách). Thông qua giao
diện đồ họa bạn có thể thêm các menu vào (tập các
Items này là một Colleciton).

RightToLeft

Nhận một trong hai giá trị Yes hay No

-

Yes: trình bày menu từ phải qua trái
No: trình bày menu từ trái qua phải

2.5.7.1.3. Một số thuộc tính thường dùng của ToolStripMenuItem
Tên
Checked

CheckOnClick

CheckState

DisplayStyle

Ý nghĩa
-

Nhận một trong hai giá trị True hay False
True: cho phép xuất hiện biểu tượng
Checkbox bên cạnh chuỗi Text của
ToolStripMenuItem
- False: Ngược lại
Nhận một trong hai giá trị True hay False
-

True: Biểu tượng Checkbox xuất hiện bên
cạnh chuỗi Text của ToolStripMenuItem
(MenuItem) mỗi khi người dùng Click
chọn vào nó
- False: Ngược lại
Trạng thái của Checkbox bên cạnh chuỗi Text của
menu. Và nhận một trong 3 giá trị: UnChecked,
Checked, Indeterminate (Chú ý: Thuộc tính
Checked=True thì thuộc tính này mới có hiệu lực. Hiển
nhiên rồi phải không? ☺)
Hình thức trình bày của Menu và nhận một trong 4 giá
trị
-

None: Không hiển thị gì cả (Text và
Image)
Text: Chỉ cho phép xuất hiện chuỗi mô tả
Image: Chỉ cho phép xuất hiện ảnh( hoặc
Icon) bên cạnh Text (xuất hiện ở phía
ngoài cùng bên trái)
ImageAndText=Image+Text

- 32 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

Image

Hình ảnh xuất hiện bên cạnh chuỗi Text (chuỗi khai báo
bên trong thuộc tính Text của MenuItem)

ImageScaling

Chọn hình thức trình bày của ảnh xuất hiện bên cạnh
chuỗi. Và nhận một trong hai giá trị

ShortcutKeyDisplayString

-

None: BÌnh thường
SizeToFit: Hiển thị đúng kích cỡ của
Image hay Icon.
Chuỗi trình bày ứng với phím tắt mô tả cho MenuItem
đó (Nối vào Text của MenuItem ví dụ: Open Ctrl+O)

ShortcutKeys

Chọn tổ hợp phím tắt ứng với MenuItem đó

ShowShortcutKeys

Nhận một trong hai giá trị True hay False

-

True: Cho phép trình bày chuỗi tổ hợp
phím tắt của MenuItem (=True thì thuộc
tính ShortcutKeyDisplayString mới có hiệu
lực).
- False: Ngược lại
Chuỗi trình bày MenuItem, bạn có thể sử dụng kí tự &
trước kí tự để sử dụng với phím Alt (phím nóng - phím
tắt)

Text

TooltipText

Chuỗi trợ giúp khi người dùng di chuyển chuột đến
điều khiển MenuItem đó

Visible

2.5.7.2.

Điều khiển ContextMenuStrip

2.5.7.2.1. Chức năng
Điều khiển ContextMenuStrip dùng để thiết kế menu popup (menu ngữ cảnh –
menu xuất hiện khi người dùng nhấn chuột phải. Ví dụ: khi người dùng nhấn chuột
phải vào Desktop xuất hiện một menu – đó chính là menu ngữ popup) .
Để xuất hiện các menu Popup khi người dùng nhấn chuột phải vào các điều khiển
(form, button, label, textbox…) bạn chỉ cần khai báo thuộc tính ContextMenuStrip của
các điều khiển đó là một điều khiển ContextMenuStrip.
Điều khiển ContextMenuStrip cho phép thiết kế menu với các điều khiển sau
(tương tự như điều khiển MenuStrip).
- 33 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

ToolStripSeparator (Gạch phân cách)
ToolStripMenuItem (Menu con).
ToolStripCombobox (Combobox).
ToolStripTextbox (Textbox)
2.5.7.2.2. Một số thuộc tính thường dùng
Tên

Ý nghĩa

Items

Thêm các mnu con, kiểu của menu (Menu con,
Textbox, Combobox, gạch phân cách). Thông qua giao
diện đồ họa bạn có thể thêm các menu vào (Collection)

RightToLeft

Nhận một trong hai giá trị True hay False

ShowImageMargin

True: Trình bày menu từ phải qua trái (căn lề là bên
phải)
- False: Trình bày menu từ trái qua phải (căn lề là bên
trái)
Hiển thị phần hình ảnh?

-

2.5.8. Nhóm điều khiển Dialog
2.5.8.1.

Điều khiển OpenFileDialog

2.5.8.1.1. Chức năng
Điều khiển OpenFileDialog cho phép bạn chọn (select) tập tin đang tồn tại trên
hệ thống, kiểm tra xem một tập tin có tồn tại hay không. Trong trường hợp bạn có nhu
cầu chọn một Foder (chứ không phải File) thì bạn chọn điều khiển
FolderBrowserDialog
Ví dụ: Hộp thoại mở ra khi chúng ta chọn File → Open của chương trình Word
hay Notepad…
2.5.8.1.2. Một số thuộc tính thường dùng
Tên
AddExtension

Ý nghĩa
-

Nhận một trong hai giá trị True hay False
-

True: Cho phép thêm vào tên mở rộng (.txt, .jpg…)
vào file
False: Ngược lại
- 34 -
Đề cương môn học: Chuyên đề 01

CheckFileExists

CheckPathExists

DefaultExt

Filter

Biên soạn: Hoàng Quốc Việt

-

Nhận một trong hai giá trị True hay False
True: Xuất hiện hộp cảnh báo nếu bạn nhập vào
một tên file không tồn tại (nhập vào ô File name:
trên hộp thoại OpenFileDialog )
- False: Ngược lại
Nhận một trong hai giá trị True hay False
-

True: Kiểm tra đường dẫn tới file có hợp lệ hay
không trước khi trả về.
- False: Ngược lại
Chọn tên mở rộng cho file (.txt, .jpg…) mặc định nếu
người dùng không cung cấp tên mở rộng cho tập tin.
Chọn bộ lọc cho hộp thoại (Chỉ chọn File nào). Ví dụ:
File Text (*.txt)|*.txt| Word File (*.doc)|*.doc;

FilterIndex

Chọn số thứ tự cho bộ lọc (bộ lọc sẽ hiển thị trong mục
Files Of Types)

FileName

Set or Get tên tệp tin bạn chọn

FileNames

Set or Get mảng chứa tệp tin chọn (trong trường hợp
chọn nhiều tập tin)

InitialDirectory

Đường dẫn mặc định khi hộp thoại OpenFileDialog mở
ra

Multiselect

Nhận một trong hai giá trị True hay False

ReadOnlyChecked

RestoreDirectory

ShowReadOnly

-

True: Cho phép bạn chọn nhiều tập tin (ví du: Chọn
nhiều bản nhạc để nghe…)
- False: Ngược lại
Nhận một trong hai giá trị True hay False
-

True: Check vào hộp thoại Checkbox Open as
Read-Only bên dưới Combobox Files Of Types
- False: Ngược lại (☻)
(với điều kiện thuộc tính ShowReadOnly = True)
Nhận một trong hai giá trị True hay False
-

True: Mở lại thư mục vừa mở ra lần trước, với điều
kiện thuộc tính InitialDirectory không đặt gì
- False: Không mở lại thư mục vừa mở lần trước
Nhận một trong hai giá trị True hay False
-

True: Xuất hiện hộp Checkbox Open as Read-Only
- 35 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

bên dưới Combobox Files Of Types
- False: Ngược lại
Đặt tiêu đề (xuất hiện trên Titlebar) cho hộp thoại
OpenFileDialog

Title

2.5.8.1.3. Minh họa sử dụng điều khiển OpenFileDialog
Giả sử chúng ta có một form có tên: frmOpenFileDialog, trên form có một điều
khiển Textbox có tên Textbox1và một điều khiển OpenFileDialog có tên
openFileDialog1. Chúng ta sử dụng hộp thoại OpenFileDialog để load nội dung một
tệp text vào Textbox
private void frmOpenFileDialog_Load(object sender, EventArgs e)
{
//Đặt một số thuộc tính bằng Code
openFileDialog1.AddExtension = false;
openFileDialog1.CheckFileExists = true;
openFileDialog1.ReadOnlyChecked = true;//Check vào checkbox ->thuộc
tính ShowReadOnly = true
openFileDialog1.Filter = "File Text (*.txt)|*.txt| File Rtf (*.rtf)|*.rtf| All
File|*.*";
openFileDialog1.FilterIndex = 0;//Chọn bộ lọc "File Text (*.txt)|*.txt" -> Chỉ
chọn file Text
openFileDialog1.FileName = "";//thay cho chuỗi openFileDialog1 xuất hiện
trong hộp FileName
openFileDialog1.InitialDirectory = "C:"; //Mở ổ C khi hộp thoại này hiển thị
openFileDialog1.Multiselect = true;
openFileDialog1.ShowReadOnly = true;//Xuất hiện Checkbox
openFileDialog1.Title = "Cong nghe NET";

//Kiển tra hộp thoại có mở ra không

- 36 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

//Sử dụng phương thức ShowDialog()
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
//Lấy về File bạn chọn. Giả sử tôi chọn File C:CongNgheNET.txt
string FileBanChon = openFileDialog1.FileName;
//Đọc file
StreamReader sr = new StreamReader(FileBanChon);
textBox1.Text = sr.ReadToEnd();
//Đóng luồng đọc
sr.Close();
}
}

2.5.8.2.

Điều khiển SaveFileDialog

2.5.8.2.1. Chức năng
Điều khiển SaveFileDialog cho phép bạn ghi một nội dung ra một tập tin (file)
mới hay ghi đè lên tập tin đang tồn tại trên hệ thống của bạn.
Ví dụ: Hộp thoại mở ra khi chúng ta chọn File → Save của chương trình Word,
Notepad….
2.5.8.2.2. Mốt số thuộc tính thường dùng
Tên
AddExtension

CheckFileExists

Ý nghĩa
-

Nhận một trong hai giá trị True hay False
True: Cho phép thêm vào tên mở rộng (.txt,
.jpg…)
- False: Ngược lại
Nhận một trong hai giá trị True hay False
-

True: Xuất hiện hộp cảnh báo nếu bạn nhập vào
một tên file không tồn tại (nhập vào ô File name:
trên hộp thoại SaveFileDialog )
- 37 -
Đề cương môn học: Chuyên đề 01

CheckPathExists

Biên soạn: Hoàng Quốc Việt

- False: Ngược lại
Nhận một trong hai giá trị True hay False
-

True: Kiểm tra đường dẫn tới file có hợp lệ hay
không trước khi trả về.
- False: Ngược lại
Chọn bộ lọc cho hộp thoại (Chỉ chọn File nào). Ví dụ:

Filter

File Text (*.txt)|*.txt| Word File (*.doc)|*.doc;
FilterIndex

Chọn số thứ tự cho bộ lọc (bộ lọc sẽ hiển thị trong
mục Files Of Types)

FileName

Set or Get tên tệp tin

InitialDirectory

Đường dẫn mặc định khi hộp thoại SaveFileDialog
mở ra

RestoreDirectory

Nhận một trong hai giá trị True hay False

-

True: Mở lại thư mục vừa mở ra lần trước, với
điều kiện thuộc tính InitialDirectory không đặt gì
- False: Không mở lại thư mục vừa mở lần trước
Đặt tiêu đề (xuất hiện trên Titlebar) cho hộp thoại
SaveFileDialog

Title

ShowHelp

Cho phép xuất hiện Button Help (?) hay không?

OverwritePrompt

Xuất hiện cảnh báo nếu bạn ghi đè vào một tập tin đã
tồn tại

2.5.8.2.3. Minh họa sử dụng điều khiển SaveFileDialog
Giả sử chúng ta có một form có tên: frmSaveFileDialog, trên form có một điều
khiển Textbox có tên Textbox1và một điều khiển SaveFileDialog có tên
saveFileDialog1. Chúng ta sử dụng hộp thoại SaveFileDialog để ghi nội dung Textbox
vào một tệp Text qua sự kiện Click của một Button có tên btSave
private void btSave_Click(object sender, EventArgs e)
{
//Đặt một số thuộc tính bằng Code
saveFileDialog1.AddExtension = true;//Cho phép thêm vào tên mở rộng
saveFileDialog1.OverwritePrompt = true;//Xuất hiện cảnh báo nếu tập tin đã
- 38 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

tồn tại
saveFileDialog1.DefaultExt = "txt";//Chạy nếu:
saveFileDialog1.AddExtension = true
saveFileDialog1.CheckPathExists = true;//Kiểm tra đường dẫn có hợp lệ hay
không
saveFileDialog1.FileName = "";
saveFileDialog1.Filter = "Text File (*.txt)|*.txt";
saveFileDialog1.FilterIndex = 0;
//saveFileDialog1.InitialDirectory = "C:";//Chọn đường dẫn khi hộp thoại mở
ra
saveFileDialog1.RestoreDirectory = true;//ĐK không đặt
saveFileDialog1.InitialDirectory
saveFileDialog1.ShowHelp = true;
saveFileDialog1.Title = "Cong nghe NET";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
//Lấy nội dung cần ghi
string strNoiDung=textBox1.Text;
//Lấy ra tên file cần ghi
string strFileSave = saveFileDialog1.FileName;
//Ghi file
StreamWriter sw = new StreamWriter(strFileSave);
sw.Write(strNoiDung);
//đóng luồng
sw.Close();
}//ví dụ rất đơn giản

2.5.8.3.

Điều khiển FolderBrowerDialog
- 39 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

2.5.8.3.1. Chức năng
Điều khiển FolderBrowserDialog cho phép người dùng chọn (Select) thư mục
đang tồn tại trong hệ thống, đồng thời có thể tạo mới thư mục ngay trong thư mục
đang chọn (Chú ý: Điều khiển OpenFileDialog chỉ cho phép chọn file).
2.5.8.3.2. Một số thuộc tính thường dùng
Tên

Ý nghĩa

Description

Chuỗi mô tả về hộp thoại, xuất hiện bên dưới khung
Title

RootFolder

Thư mục mặc định chọn khi hộp thoại mở ra. Bao gồm
rất nhiều lựa chọn có sẵn

SelectedPath

Trả về tên thư mục (cả đuờng dẫn đầy đủ) mà người sử
dụng chọn (các bạn chú ý thuộc tính này)

ShowNewFolderButton

Nhận một trong hai giá trị True hay False

-

True: Xuất hiện Buttons Make New Folder cho
phép người dùng tạo ra thư mục mới trong thư mục
bạn chọn
False: Ngược lại

2.5.8.3.3. Minh họa sử dụng điều khiển
Chúng ta minh họa sử dụng điều khiển FolderBrowsersDialog qua ứng dụng tạo
Slide ảnh.
Giả sử chúng ta có một form có tên: frmFolderBrowserDialog, trên form có chứa
một số điều khiển sau:
PictureBox có tên pictureBox1 để hiển thị ảnh
Điều khiển folderBrowserDialog có tên folderBrowserDialog1 dùng để
chọn thư mục chứa ảnh
Điều khiển Timer có tên timer1
Button có tên btOpen
//Khai báo mảng
string[] MangAnh = null;
int Index = 0;
int CountImage;
//Load
private void frmFolderBrowserDialog_Load(object sender, EventArgs e)
{
- 40 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

this.WindowState = FormWindowState.Maximized;
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
}
//Mở thư mục chứa các File ảnh
private void btOpen_Click(object sender, EventArgs e)
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
//Khai báo các mảng để chứa các ảnh khác nhau: jpg, jpeg
string[] MangAnhJpg = null, MangAnhJpeg = null, MangAnhBitmap =
null;
//Lấy ra các phần tử của mảng bảng cách dùng lớp Directory
//Ở đây tôi chọn thư mục: D:Pictures chứa rất nhiều ảnh của tôi
MangAnhJpg = Directory.GetFiles(folderBrowserDialog1.SelectedPath,
"*.jpg");//CHÚ Ý CÂU LỆNH NÀY
MangAnhJpeg
=
Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.jpeg");//CHÚ Ý CÂU
LỆNH NÀY
MangAnhBitmap
=
Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.bmp");//CHÚ Ý CÂU
LỆNH NÀY
//Lấy ra chiều dài mảng
int i = MangAnhJpg.Length;
int j = MangAnhJpeg.Length;
int k = MangAnhBitmap.Length;
//Khai báo mảng mới là tổ hợp của 3 mảng
MangAnh = new string[i+j+k]; //CHÚ Ý CÂU LỆNH NÀY
//Xử lý về mảng
Array.Copy(MangAnhJpg, 0, MangAnh, 0,i); //CHÚ Ý CÂU LỆNH
NÀY
Array.Copy(MangAnhJpeg, 0, MangAnh, i, j); //CHÚ Ý CÂU LỆNH
NÀY
Array.Copy(MangAnhBitmap, 0, MangAnh, i+j, k); //CHÚ Ý CÂU
LỆNH NÀY
//3 CÂU LỆNH NÀY ĐÚNG LOGIC CHƯA????? ^_^ ☺
//Lấy ra số ảnh
CountImage = MangAnh.Length;
//Hết ForEach
timer1.Enabled = true;
}
}
- 41 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

//Chú ý: Đặt thuộc tính cho Timer
//Enabled=true
//Interval=2000 > sau 2 giây chuyển sang ảnh tiếp theo
private void timer1_Tick(object sender, EventArgs e)
{
//Khai bào Image > Chú ý câu lệnh này
Image img = Image.FromFile(MangAnh[Index]);
//Hiển thị nên Picture
pictureBox1.Image = img;
//Chuyển đến ảnh tiếp theo
Index++;
if (Index >= End)
Index = 0;
}
2.5.9. ListView
2.5.9.1. Chức năng
Điều khiển ListView dùng để trình bày các phần tử dạng danh sách với nhiều
hình dạng khác nhau.
2.5.9.2.

Một số khái niệm liên quan đến ListView

Hình 1: Minh họa về ListView

- 42 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

Hình 2: Cột trong ListView

Hình 3: Khái niệm ColumnHeader

- 43 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

Hình 4: Khái niệm ListViewItem

Hình 5: Khái niệm SubItems

- 44 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

Hình 6: Minh họa về Group
2.5.9.3.

Một số thuộc tính thường dùng
Tên

CheckBoxes

Ý nghĩa
Nhận một trong hai giá trị True hay False (mặc định là
False)

Columns

-

True: Hiển thị một checkbox bên cạnh phần
tử đầu tiên của mỗi hàng (1 hàng = 1
ListviewItem) trong Listview
False: Ngược lại

Tập các cột trong ListView là một Collection. Thông qua
thuộc tính này có thể thêm các cột vào Listview (Có thể
thêm các cột vào Listview thông qua giao diện đồ họa hay
có thể viết Code. Chú ý: Phải đặt thuộc tính View là
Detail thì bạn mới có thể nhìn thấy các cột này)

ContextMenuStrip

Gắn một menu ngữ cảnh với điều khiển ListView (khi
nhấn chuột phải vào Listview thì sẽ hiển thị menu này)

FullRowSelect

Nhận một trong hai giá trị True hay False

- 45 -
Đề cương môn học: Chuyên đề 01

GridLines

Group

-

Biên soạn: Hoàng Quốc Việt

True: Cho phép chọn (bôi đen) cả hàng (của
phần tử đang được chọn. Chú ý: Thuộc tính
View = Detail)
False: Ngược lại

Nhận một trong hai giá trị True hay False
-

True: Hiển thị lưới bao quanh và ngăn cách
các hàng (Chỉ có hiệu lực nếu thuộc tính
View = Detail)
False: Ngược lại

Khai báo nhóm để phân loại các phần tử sau khi trình bày
trên điều khiển Listview

HeaderStyle

Đây là thuộc tính cho phép chọn Style cho Listview trong
chế độ View là Report

Items

Là một Collection. Cho phép tạo ra các giá trị cho các
hàng, cột trong Listview (tất nhiên có thể dùng giao diện
đồ họa hay viết Code)

LabelEdit

LabelWap

MultiSelect

Nhận một trong hai giá trị True hay False
-

True: Cho phép thay đổi (sửa) Text của các
phần tử (các Ô).
False: Ngược lại

Nhận một trong hai giá trị True hay False
-

True: Chuỗi DHSPKTHY sẽ tự động xuống
hàng khi chiều dài không đủ để trình bày
False: Ngược lại

Nhận một trong hai giá trị True hay False
-

True:

Cho

phép

chọn

nhiều

(ListviewItem). Mặc định là True
False: Không cho phép chọn nhiều hàng
- 46 -

hàng
Đề cương môn học: Chuyên đề 01

LargeImageList

Biên soạn: Hoàng Quốc Việt

Đối tượng ImageList chứa danh sách các Image theo chỉ
số (Index) từ 0 đến n-1. Được sử dụng nếu thuộc tính
View là LargeIcon

SmallImageList

Đối tượng ImageList chứa danh sách các Image theo chỉ
số (index) từ 0 đến n-1. Được sử dụng nếu thuộc tính
View là SmallIcon

Scrollable

Sorting

Nhận một trong hai giá trị True hay False
-

True: Cho phép xuất hiện thanh trượt trong
Listview (Khi số ListViewItem nhiều và
vượt qua chiều cao của ListView)
False: Ngược lại

Sắp xếp giá trị các hàng (ListViewItem) trong ListView
(Chỉ có hiệu lực nếu thuộc tính View là Detail). Thuộc
tính này nhận một trong các giá trị sau
None: Không Sắp xếp
Ascending: Sắp xếp tăng
Descending: Sắp xếp giảm

SelectedItems

Trả về danh sách các phần tử được chọn (bôi đen)

CheckedItems

Trả về danh sách các phần tử được check (tất nhiên thuộc
tính CheckBoxes = True)

View

Các kiểu Hiển thị trên ListView. Thuộc tính View có thể
nhận một số giá trị sau:
LargeIcon
SmallIcon
List
Detail
Title
→ Mặc định là: LargeIcon
- 47 -
Đề cương môn học: Chuyên đề 01

2.5.9.4.

Biên soạn: Hoàng Quốc Việt

Một số phương thức thường dùng
Tên

Ý nghĩa

Clear

Xóa tất cả ListView

RemoveAt

Xóa bỏ một cột có chỉ số (ở vị trí) nào đó

………………………………

2.5.9.5.

Một số sự kiện thường dùng
Tên

SelectedIndexChanged

Ý nghĩa
Xảy ra khi người sử dụng thay đổi phần tử được chọn
trong ListView

ItemActivate

Xảy ra khi chọn phần tử trên ListView

ItemChecked

Khi Check vào biểu tượng Checkbox của mỗi phần tử
trên điều khiển ListView

2.5.9.6.

Minh họa

Giả sử chúng ta có một form có tên: frmListView. Trên đó có chứa một số điều
khiển sau:
Điều khiển ListView có tên listView1 (Chúng ta để tất cả các thuộc tính
của listView1 với giá trị mặc định).
Button btCheck: minh họa việc duyệt các hàng được check trên ListView
Buttonbt RemoveAtColumns: Minh họa xóa một cột trong ListView
Buttonbt RemoveAtItems: Minh họa xóa một hàng trong ListView
Buttonbt ShowFile: Minh họa hiển thị tất cả các file trong một thư mục nên
ListView
Button btGroup: Minh họa về Group trong ListView

Chúng ta sẽ minh họa sử dụng ListView qua sự kiện Click của các button trên.
- 48 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

2.5.9.6.1. Tạo các cột, hàng cho ListView bằng code
private void frmListView_Load(object sender, EventArgs e)
{
//Đặt một số thuộc tính cho điều khiển ListView1 bằng code
//Bạn chỉ có thể nhìn thấy các cột nếu đặt thuộc tính View=Detail
listView1.View = View.Details;
listView1.GridLines = true;
listView1.CheckBoxes = true;//Hiển thị checkbox: các bạn xem
kết quả ở hinhg minh họa.

//Thêm 4 cột vào Listview
//Có thể thêm cột vào ListView theo cách này
listView1.Columns.Add("Họ và tên", 100,
HorizontalAlignment.Center);
listView1.Columns.Add("Quê quán", 100,
HorizontalAlignment.Center);
listView1.Columns.Add("Lớp", 100,
HorizontalAlignment.Center);
//Cách 2: Có thể thêm vào theo cách này: Sử dụng
ColumnHeader
ColumnHeader ch = new ColumnHeader("chNgaySinh");
ch.Text = "Ngày sinh";
ch.TextAlign = HorizontalAlignment.Center;
ch.Width = 100;
listView1.Columns.Add(ch);
//Thêm hàng thứ nhất vào ListView
string[] Them = new string[] { "Nguyễn Văn Hải", "Hưng Yên",
"TK4N1", "29-03-1987" };
ListViewItem lv = new ListViewItem(Them);
listView1.Items.Add(lv);

- 49 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

//Thêm hàng thứ 2
string[] Them2 = new string[] { "Nguyễn Văn Hạnh", "Hà Nội",
"TK4N1", "24-04-1987" };
ListViewItem lv2 = new ListViewItem(Them2);
listView1.Items.Add(lv2);
//Thêm hàng thứ 3
string[] Them3 = new string[] { "Phạm Thị Hạnh", "Hải Dương",
"TK4N1", "04-10-1988"};
ListViewItem lv3 = new ListViewItem(Them3);
listView1.Items.Add(lv3);

//Thêm hàng thứ 4
string[] Them4 = new string[] { "Vũ Thị Hảo", "Bắc Ninh",
"TK4N1", "25-12-1987" };
ListViewItem lv4 = new ListViewItem(Them4);
listView1.Items.Add(lv4);
}
→ Sau khi chạy có hình như sau:

- 50 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

2.5.9.6.2. Duyệt xem những hàng nào được Check
private void btCheck_Click(object sender, EventArgs e)
{
//Bạn phải tạo ra một Listview như mục 7.1 trước đã
MessageBox.Show("Tên các sinh viên được Check
là","Check",MessageBoxButtons.OK);
//Duyệt các phần tử được Check thông qua thuộc tính CheckedItems
foreach (ListViewItem lvi in listView1.CheckedItems)
{
//Lấy về phần tử thứ mấy (ô thứ mấy) của ListViewItem (của 1 hàng):
sử dụng SubItems
//DataGridView <-> ListView
MessageBox.Show(lvi.SubItems[0].Text);
}
//Giờ thì bạn chạy và check thử vài hàng để thấy rõ kết quả
}

2.5.9.6.3. Xóa một Cột tại vị trí nào đó
private void btRemoveAtColumns_Click(object sender, EventArgs e)
{
//Chú ý: Tập các column trong Listview là một Collection nên có đầy đủ
các phương thức của một Collection.
//Ví dụ: Xóa một cột ở vị trí nào đó
listView1.Columns.RemoveAt(1);
//Giờ thì bạn chạy và nhấn vào Button này để thấy kết qủa để xem các
kết quả
}

- 51 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

Hình 7.2: Columns ↔ Collection
2.5.9.6.4. Xóa một hàng tại một vị trí nào đó
→ Hoàn toàn tương tự như xóa một cột
private void btRemoveAtItems_Click(object sender, EventArgs e)
{
//Chú ý: Tập các Items trong Listview là một Collection nên có đầy đủ
các phương thức của một Collection.
//Ví dụ: Xóa một cột ở vị trí nào đó (tất nhiên bạn phải tạo ra một
listview với các giá trị như mục 7.1)
listView1.Items.RemoveAt(1);
//Giờ thì bạn chạy và nhấn vào Button này để xem các kết quả
}

- 52 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

Hình 7.4: Items ↔ Collection
2.5.9.6.5. Duyệt tất cả các file trong một thư mục và hiển thị nên ListView
private void btShowFile_Click(object sender, EventArgs e)
{
//Listview (listView1) này hiển thị tất cả các File trong C:WINDOWS
//Bạn có thể dùng hộp thoại FolderBrowserDialog để duyệt file trong
thư mục bất kì mà bạn chọn
//Phương thức Clear xóa toán bộ Listview
listView1.Clear();

//Chọn một số thuộc tính cho Listview thông qua mã lệnh
listView1.View = View.Details;
listView1.FullRowSelect = true;//Cho phép chọn cả hàng như hình kết
quả dưới
listView1.GridLines = true;

//Add các cột vào Listview bằng mã lệnh
//Mỗi file có các đặc tính của file: Tên, kích thước, kiểu file
(ReadOnly, System...) nên chúng ta tạo ra các cột tương ứng
listView1.Columns.Add("Number", 100, HorizontalAlignment.Left);
listView1.Columns.Add("Name", 300, HorizontalAlignment.Left);
- 53 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

listView1.Columns.Add("Size", 150, HorizontalAlignment.Left);
listView1.Columns.Add("Type", 100, HorizontalAlignment.Left);

//Nên khai báo đổi tượng DirectoryInfo để duyệt file
//DirectoryInfo là một lớp nằm trong System.IO
DirectoryInfo dir = new DirectoryInfo(@"C:WINDOWS");

//Khai báo i để lấy về Số thứ tự file: 1, 2, 3....
int i = 0;

//Khai báo một ListviewItem - Một Hàng
ListViewItem lvi;

//Duyệt File ()
foreach (FileInfo f in dir.GetFiles("*.*"))
{
//Tăng giá trị i nên 1
i++;

//Gán các thành phần cho lvi qua thuộc tính SubItems.Add
lvi = new ListViewItem(i.ToString());
lvi.SubItems.Add(f.Name);
lvi.SubItems.Add(f.Length.ToString());
lvi.SubItems.Add(f.Attributes.ToString());
//Sau khi đã gán phải Add vào Listview
listView1.Items.Add(lvi);
}
//Hết
- 54 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

}

Hình 7.5: Kết quả sau khi nhấn vào Button Show File

2.5.9.6.6.

làm việc với Group trong ListView

private void btGroup_Click(object sender, EventArgs e)
{
//Ý tưởng: Chúng ta muốn đưa tất cả các file có cùng thuộc tính vào một
nhóm
//làm việc với nhóm các bạn chú ý đối tượng ListViewGroup
//Xóa Listview trướcđã
listView1.Clear();

//Đặt một số thuộc tính bằng Code
listView1.View = View.Details;

//Khai báo 3 nhóm
ListViewGroup gArchive;
ListViewGroup gSystem;
ListViewGroup gNormal;

- 55 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

//Add các cột vào Listview bằng mã lệnh
listView1.Columns.Add("Number", 100, HorizontalAlignment.Left);
listView1.Columns.Add("Name", 300, HorizontalAlignment.Left);
listView1.Columns.Add("Size", 150, HorizontalAlignment.Left);
listView1.Columns.Add("Type", 100, HorizontalAlignment.Left);

//Add 3 nhóm - Group vào Listview
gArchive = new ListViewGroup("Archive");
gSystem = new ListViewGroup("System");
gNormal = new ListViewGroup("Normal");
listView1.Groups.Add(gArchive);
listView1.Groups.Add(gSystem);
listView1.Groups.Add(gNormal);

//Listview này hiển thị tất cả các File trong C:WINDOWS
//Nên khai báo đổi tượng DirectoryInfo
DirectoryInfo dir = new DirectoryInfo(@"C:WINDOWS");

//Khai báo i để lấy về Số thứ tự file: 1, 2, 3....
int i = 0;
string ThuocTinhFile = "";

//Khai báo một ListviewItem-Một Hàng
ListViewItem lvi;

//Duyệt file và đưa vào Group các file cùng thuộc tính
foreach (FileInfo f in dir.GetFiles("*.*"))
{
- 56 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

i++;
//Gán các thành phần cho lvi qua thuộc tính SubItems.Add
lvi = new ListViewItem(i.ToString());
lvi.SubItems.Add(f.Name);
lvi.SubItems.Add(f.Length.ToString());
//Lấy về thuộc tính tập tin và xử lý
ThuocTinhFile = f.Attributes.ToString();
lvi.SubItems.Add(ThuocTinhFile);
//Nhóm tập tin Archive
if (ThuocTinhFile.StartsWith("Archive"))
gArchive.Items.Add(lvi);
//Nhóm tập tin Archive
if (ThuocTinhFile.StartsWith("System"))
gSystem.Items.Add(lvi);
//Nhóm tập tin Archive
if (ThuocTinhFile.StartsWith("Normal"))
gNormal.Items.Add(lvi);
//Sau khi đã gán phải Add vào Listview
listView1.Items.Add(lvi);
}
//Hết- Kết quả xem hình dưới
}

- 57 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

Hình 7.6: Group

2.5.9.6.7. Lấy về giá trị của một ô (SubItems) bất kì nào đó trên ListView (sự kiện
listView1_ItemActivate)
Giả sử chúng ta có hình như sau:

Chúng ta muốn lấy thông tin về sinh viên “Phạm Thị Hạnh” bạn có thể sử
dụng đoạn code sau:
private void listView1_ItemActivate(object sender, EventArgs e)
{
ListViewItem lvi = listView1.FocusedItem;
- 58 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

MessageBox.Show(lvi.Text);//Lấy ra giá trị ô text đầu tiên

//Lấy về cột thứ 1 - Cột Quê quán (Cột trông ListView có chỉ số bắt đầu
= 0)
string Cot1 = lvi.SubItems[1].Text;
MessageBox.Show("Giá trị cột thứ 1: " + Cot1);

//Lấy về cột thứ 2 - Cột Lớp
string Cot2 = lvi.SubItems[2].Text;
MessageBox.Show("Giá trị cột thứ 2: " + Cot2);
//Giờ thì bạn chạy và Click vào một hàng xem để xem kết quả
//Ứng dụng: Thường ứng dụng trong lập trình CSDL: Hiển hị tất cả các
các thông tin (sinh viên chả hạn)
//nên ListView. khi người dùng chọn một hàng trên ListView thì hiển
thị các giá trị tương ứng nên
//Các Textbox. khi đó bạn có thể chỉnh sửa các thông tin và Update vào
CSDL....
//................
}

- 59 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

2.5.10. DataGridView
2.5.10.1. Chức năng
Điều khiển DataGridView dùng để hiển thị dữ liệu.
2.5.10.2. Một số khái niệm liên quan đến DataGridView

Hình 1: Ví dụ về DataGirdView

Hình 2: Khái niệm Columns trong DataGridView

- 60 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

Hình 3: Khái niệm về Rows trong DataGridView

Hình 4: Khái niệm về Cells trong DataGridView

→ DataGridView ≡ Mảng 2 chiều
→ Có 2 cách để truy xuất đến một ô (để lấy giá trị) trong DataGridView (các bạn
chú ý hai câu lệnh này)
Cách 1: Tên_DataGridView[Chỉ_số_cột, Chỉ_số_hàng].Value

- 61 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

Cách 2: Tên_DataGridView.Rows[Chỉ_số_hàng].Cells[Chỉ_số_Cột].Value

Ví dụ:
Có một DataGridView như sau:

Chúng ta muốn lấy giá trị của một ô bôi đen chúng ta có thể sử dụng câu lệnh
sau (tên của DataGridView là: dgSinhVienTK4):
string str = dgSinhVienTK4[0, 2].Value.ToString();
Hoặc
string str = dgSinhVienTK4.Rows[2].Cells[0].Value.ToString();
2.5.10.3. Một số thuộc tính thường dùng
Tên
AutoSizeColumnsMode

Ý nghĩa
Các kiểu lựa chọn với Cột (Đặt các chế độ khác
nhau)

AutoSizeRowsMode

Các kiểu lựa chọn với Hàng (Đặt các chế độ khác
nhau)

BackGroundColor

Chọn mầu nền cho DataGridView

BorderStyle

Đặt kiểu đường viền ngoài bao quanh cho
DataGridView

CellBorderStyle

Đặt đường viền cho các ô

- 62 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

ColumnHeadersBorderStyle
ColumnHeadersHeight
ColumnHeadersVisible

Nhận một trong hai giá trị True hay False
-

Columns

True: Cho phép hiển thị tiêu đề các cột
False: Không cho phép hiển thị tiêu để
các cột

Làm việc với cột (Đặt tiêu đề cho Headers, lựa
chọn kiểu cột (Checkbox, Button, Image…). →
Trong DataGridView một cột có thể là: Cột các
Button, Cột các Checkbox…

DataMember

Chọn cơ sở dữ liệu để hiển thị nên DataGridView

DataSource

Chọn nguồn dữ liệu cho DataGridView (hai thuộc
tính DataSource và DataMember hay đi với nhau)

GridColor

Chọn màu cho lưới (các hàng, các cột được ngăn
cách nhau bởi lưới)

MultiSelect

Cho phép/Không cho phép chọn nhiều dòng?

ReadOnly

Nhận một trong hai giá trị True hay False
-

True: Cho phép thay đổi giá trị các các
phần tử (các ô hay các Cell).
False: không cho phép thay đổi giá trị
các phần tử.

RowHeadersBorderStyle

Chọn kiểu viền cho các Hàng (Rows).

RowHeaderVisible

Nhận một trong hai giá trị True hay False
-

True: Cho phép hiển thị Headers của
hàng(Cột đầu tiên ở mép ngoài bên
trái)

- 63 -
Đề cương môn học: Chuyên đề 01

2.5.10.4. Một số sự kiện thường dùng

-

Tên
CellClick

Biên soạn: Hoàng Quốc Việt

False: Ngược lại

Ý nghĩa
Xảy ra khi người dùng nhấn chọn một ô bất kì nào đó
trên DataGridView (tất nhiên DataGridView phải có dữ
liệu)
Chú ý: Trong DataGridView thì khái niệm Ô ≡ Cell

………………………………

2.5.10.5. Minh họa

- 64 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

Giả sử chúng ta có một form có tên: frmDataGridView. Trên đó có chứa một số điều
khiển sau:
Điều khiển DataGridView có tên dataGridView1(Chúng ta để tất cả các thuộc
tính của dataGridView1với giá trị mặc định).
Button btCreate: minh họa việc tạo DataGridView với số hàng và số cột xác
định
Button btRemove: Minh họa xóa một cột, một hàng trong DataGridView
Button btGet: Minh họa việc lấy số hàng và số cột trong DataGridView
Button btAddCombobox: Minh họa việc Add một cột là Combobox vào
DataGridView
Button btAddCheck:
Minh họa việc Add một cột là Checkbox vào
DataGridView
Giao diện của chương trình như sau:

Chúng ta sẽ minh họa sử dụng DataGridView qua sự kiện Click của các button trên.

2.5.10.5.1.

Tạo các cột trong DataGridView (bằng Code)
//Sự kiện Load của Form
private void frmDataGridView_Load(object sender, EventArgs e)
{
//Đặt thuộc tính cho DataGridView thông qua mã lệnh

dataGridView1.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.Fill;//Chú ý thuộc tính này
//Để thêm các cột vào DataGridView bạn có thể thêm thông qua thuộc tính
- 65 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

COLUMNS trên hộp thoại Properties
//Hoặc bạn có thể thêm bằng Code
dataGridView1.Columns.Add("clName", "Họ và Tên");
dataGridView1.Columns.Add("clQueQuan", "Quê quán");
dataGridView1.Columns.Add("clLop", "Lớp");
dataGridView1.Columns.Add("clNgaySinh", "Ngay sinh");
//Thêm một hàng mới vào (hàng mới này chưa có dữ liệu gì)
dataGridView1.Rows.Add();
//Đưa dữ liệu vào hàng mới vừa tạo ra (Đặt giá trị cho một ô) -> Các bạn chú
ý có hai cách như thế này
dataGridView1[0, 0].Value = "Nguyễn Văn Hải";
dataGridView1.Rows[0].Cells[1].Value = "Hưng Yên";
dataGridView1[2, 0].Value = "TK4N1";
dataGridView1.Rows[0].Cells[3].Value = "29-03-1987";
} //Hết
→ sau khi chạy chương trình: form frmDataGridView sẽ có kết quả như sau:

2.5.10.5.2.

Đặt số hàng và số cột cho DataGridView

//Sự kiện Load của Form
- 66 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

private void btCreate_Click(object sender, EventArgs e)
{
//Đặt số hàng và số cột cho DataGridView (Ví dụ: thiết kế trong chơi cờ
Caro)
//Ví dụ: Tạo một DataGridView với 50 hàng và 50 Cột
dataGridView1.ColumnCount = 50; //Chú ý thuộc tính này
dataGridView1.RowCount = 50; //Chú ý thuộc tính này
//Thiết lập độ rộng cho các Ô
for (int i = 0; i < 50; i++)
{
dataGridView1.Columns[i].Width = 15;
dataGridView1.Rows[i].Height = 15;
}
} //Đã xong rồi. Giờ thì bạn chạy xem nào

2.5.10.5.3.

Xóa một hàng (hay 1 cột, hay tất cả các hàng các cột) của DataGridView

private void brRemove_Click(object sender, EventArgs e)
{
//Tập các hàng, các cột trong DataGridView là một Collection
//Nên nó có đầy đủ các thuộc tính và phương thức của một Collection

//Xóa hàng thứ 1 (có chỉ số là 0)
dataGridView1.Rows.RemoveAt(0); //Xóa tất cả các hàng:
dataGridView1.Rows.Clear();
//Tất nhiên nếu chúng ta có 2 hàng thì chúng ta không thể thực hiện câu lệnh:
dataGridView1.Rows.RemoveAt(2);

//Xóa cột thứ 2 (có chỉ số là 1)
dataGridView1.Columns.RemoveAt(1); //Xóa tất cả các Cột:
- 67 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

dataGridView1.Columns.Clear();
}

Rows ↔ Collection

Columns ↔ Collection
2.5.10.5.4.

Lấy về số hàng và số cột hiện có của DataGridView

private void btGet_Click(object sender, EventArgs e)
{
//Lấy về số hàng và số cột
int i = dataGridView1.Rows.Count; //Lấy về số hàng
- 68 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

int j = dataGridView1.Columns.Count;//Lấy về số cột

//Thông báo
string HC = "Số hàng: " + i.ToString() +'n' + "Số cột: " + j.ToString();
MessageBox.Show(HC);
}

2.5.10.5.5.

Add thêm một cột là Combobox vào DataGridView

private void frmDataGridView_Load(object sender, EventArgs e)
{
//Đặt thuộc tính cho DataGridView thông qua mã lệnh
dataGridView1.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.Fill;//Chú ý thuộc tính này

//Để thêm các cột vào DataGridView bạn có thể thêm thông qua thuộc tính
COLUMNS trên hộp thoại Properties
//Hoặc bạn có thể thêm bằng Code
dataGridView1.Columns.Add("clName", "Họ và Tên");
dataGridView1.Columns.Add("clQueQuan", "Quê quán");
dataGridView1.Columns.Add("clLop", "Lớp");
dataGridView1.Columns.Add("clNgaySinh", "Ngay sinh");

//Thêm một hàng mới vào (hàng mới này chưa có dữ liệu gì)
dataGridView1.Rows.Add();

//Đưa dữ liệu vào hàng mới vừa tạo ra (Đặt giá trị cho một ô) -> Các bạn chú
ý có hai cách như thế này
dataGridView1[0, 0].Value = "Nguyễn Văn Hải";
dataGridView1.Rows[0].Cells[1].Value = "Hưng Yên";
- 69 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

dataGridView1[2, 0].Value = "TK4N1";
dataGridView1.Rows[0].Cells[3].Value = "29-03-1987";
}
//Phương thức đưa dữ liệu vào Combobox
private static void AddData(ref DataGridViewComboBoxColumn
comboboxColumn)
{
{
comboboxColumn.Items.AddRange(
new string[] { "SV1", "SV2", "SV3"});
}
}
// Add thêm một cột là Combobox vào DataGridView!!!
private void btAddCombobox_Click(object sender, EventArgs e)
{
//Khai báo mảng làm DataSource cho Combobox
string[] Mang = { "SV1", "SV2", "SV3" };

//Khai báo một cột thuộc kiểu Combobox
DataGridViewComboBoxColumn comboboxColumn = new
DataGridViewComboBoxColumn();

//Đặt thông số và đưa dữ liệu vào Combobox
comboboxColumn.HeaderText = "Cột Combobox";
AddData(ref comboboxColumn);// Câu lệnh này<>comboboxColumn.DataSource = Mang;

//Câu lệnh Insert này đưa cột vào vị trí đầu của DataGridView
dataGridView1.Columns.Insert(0, comboboxColumn);
- 70 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

// Add một cột vào vị trí cuối cùng của DataGridView (Chưa có dữ liệu).
comboboxColumn = new DataGridViewComboBoxColumn();
comboboxColumn.HeaderText = "Cột Combobox ";
dataGridView1.Columns.Add(comboboxColumn);

//Sử dụng phương thức Add mà chưa có thông số
comboboxColumn.DisplayIndex = 3;
//Thì mặc định đưa vào cuối DataGridView còn nếu có
//comboboxColumn.DisplayIndex = 3; thì đưa vào cột 3
}

→ Sau khi chạy có kết quả như sau:

2.5.10.5.6.

Add thêm một cột là Checkbox vào DataGridView

//Sự kiện Load của Form
private void frmDataGridView_Load(object sender, EventArgs e)
{
//Đặt thuộc tính cho DataGridView thông qua mã lệnh
dataGridView1.AutoSizeColumnsMode =
- 71 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

DataGridViewAutoSizeColumnsMode.Fill;//Chú ý thuộc tính này

//Để thêm các cột vào DataGridView bạn có thể thêm thông qua thuộc tính
COLUMNS trên hộp thoại Properties
//Hoặc bạn có thể thêm bằng Code
dataGridView1.Columns.Add("clName", "Họ và Tên");
dataGridView1.Columns.Add("clQueQuan", "Quê quán");
dataGridView1.Columns.Add("clLop", "Lớp");
dataGridView1.Columns.Add("clNgaySinh", "Ngay sinh");

//Thêm một hàng mới vào (hàng mới này chưa có dữ liệu gì)
dataGridView1.Rows.Add();

//Đưa dữ liệu vào hàng mới vừa tạo ra (Đặt giá trị cho một ô) -> Các bạn chú
ý có hai cách như thế này
dataGridView1[0, 0].Value = "Nguyễn Văn Hải";
dataGridView1.Rows[0].Cells[1].Value = "Hưng Yên";
dataGridView1[2, 0].Value = "TK4N1";
dataGridView1.Rows[0].Cells[3].Value = "29-03-1987";
}
//Add
private void btAddCheckbox_Click(object sender, EventArgs e)
{
DataGridViewCheckBoxColumn ch = new
DataGridViewCheckBoxColumn();
{
ch.HeaderText = "Check";
//Chọn vị trí hiển thị của cột: Cột thứ 0, 1 hay 2...
ch.DisplayIndex = 3;
- 72 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

//Có cho phép Chọn nhiều hay không? (Chỉ Check được vào một
Checkbox)
ch.FalseValue = true;
//Nếu cho phép chọn nhiều thì dùng lệnh này: ch.TrueValue = true;
}
//Chèn vào DataGridView
dataGridView1.Columns.Add(ch); // <->
dgSinhVienTK5.Columns.Insert(3,ch);
}
→ Sau khi chạy có kết quả như sau:

2.5.10.5.7. Lấy giá trị của một ô bất kì bạn chọn trên DataGridView
Giả sử chúng ta có một DataGridView có các giá trị như sau:

- 73 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

Yêu cầu: Chúng ta muốn lấy ra giá trị của một ô (Cells) bất kì mà bạn chọn
Giải quyết: Sử dụng sự kiện CellClick của điều khiển DataGridView như sau:
//CÁC BẠN HỌC CÔNG NGHỆ NET HÃY NHỚ ĐOẠN MÃ NÀY
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs
e)
{
//Lấy về vị trí của Hàng và cột đang được chọn
//Hai câu lệnh này QUAN TRỌNG các bạn chú ý
int Hang = e.RowIndex; //<-> int HangHienTai =
dataGridView1.CurrentRow.Index;
int Cot = e.ColumnIndex;

//Lấy ra vị trí (Hàng và cột) mà bạn chọn
string ViTriBanChon = 'n' + "Hàng: " + Hang.ToString() + 'n' + "Cột: " +
Cot.ToString();
MessageBox.Show("Vị trí đang chọn: " + ViTriBanChon);

//Lấy ra giá trị của ô (Cells) mà bạn chọn
string GiaTri = dataGridView1[Cot, Hang].Value.ToString();
//Hoặc: string GiaTri =
dataGridView1.Rows[Hang].Cells[Cot].Value.ToString();
MessageBox.Show("Ô bạn chọn có giá trị: "+GiaTri);
//Giờ các bạn chạy thử xem nào? ^.^
}

2.5.10.5.8. Bắt sự kiện SelectedIndexChanged của cột là combobox
//Khai báo kiểu cột
DataGridViewComboBoxColumn cbcl;
- 74 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

private void frmDataGridView_Load(object sender, EventArgs e)
{
//Đặt một số thuộc tính thông qua Code (sau khi Add các cột vào)
dataGridView1.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.Fill;

///Đặt số cột
//dataGridView1.ColumnCount = 10;
//dataGridView1.RowCount = 10;

///Add thêm các cột vào
dataGridView1.Columns.Add("clMaSV", "Mã SV");
dataGridView1.Columns.Add("clTen", "Tên");
dataGridView1.Columns.Add("clLop", "Lớp");
dataGridView1.Columns.Add("clNgaySinh", "Ngày sinh");
dataGridView1.Columns.Add("clQuequan", "Quê quán");

///Add thêm một cột vào DataGridView (Chưa có giá trị)
dataGridView1.Rows.Add();
dataGridView1[0, 0].Value = "M01";
dataGridView1[1, 0].Value = "Nguyễn Tuấn Anh";
dataGridView1[2, 0].Value = "Tk4N1";
dataGridView1[3, 0].Value = "13-02-1986";
dataGridView1[4, 0].Value = "Hưng Yên";

//Thêm một hàng mới - Cách 2
string[] str = new string[5] { "M02", "Nguyễn Thị Bích", "TK4N2", "14-021985", "Hưng Yên"};
- 75 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

dataGridView1.Rows.Add(str);

///Phươnng thức Add, remove...Một cột hay hàng
///Lấy giá trị của một ô bất kì: Sự kiên CellClick
///Lấy ra giá trị của một ô và hiển thị nên các textbox
///Lấy sự kiện của cột là Combobox
///----------------------------------------------------------------------------------//Add thêm một cột là combobox vào
string[] Mang = new string[5] { "M01", "M02", "M03", "M04", "M05" };
//
cbcl= new DataGridViewComboBoxColumn();
cbcl.HeaderText = "Cột Combobox";
cbcl.Items.AddRange(Mang);
dataGridView1.Columns.Add(cbcl);//Add vào vị trí cuối cùng (Cột cuối
cùng)
cbcl.DisplayIndex = 2;
//Add+DisplayIndex thì đưa vào vị trí chỉ định <->Insert (nhưng # Insert ở
chỗ: chỉ số vẫn là cuối cùng)
//Còn hiển thị so ta chỉ định

//Add thêm một cột với vị trí chỉ định: Insert
cbcl = new DataGridViewComboBoxColumn();
cbcl.HeaderText = "Cột Combobox2";
cbcl.Items.AddRange(Mang);
dataGridView1.Columns.Insert(0, cbcl);
}
//----------------------------------------------------------------------------------------------//Lây về sự kiện của Combobox (Cột trong DataGridView)
- 76 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

ComboBox Combo;
int i = 1;
void SuKien(object sender, EventArgs e)
{
string str = Combo.Text;
if(i==1)
{
MessageBox.Show(str);
i = 0;
}
}

//Quan trọng
private void dataGridView1_EditingControlShowing(object sender,
DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is ComboBox)
{
Combo = (ComboBox)e.Control;
Combo.SelectedIndexChanged += new EventHandler(SuKien);
i = 1;
}
}
//Sự kiện CellClick lấy về giá trị của một Ô
private void dataGridView1_CellClick(object sender,
DataGridViewCellEventArgs e)
{
int Cot = e.ColumnIndex;
- 77 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

int Hang = e.RowIndex;
if (dataGridView1[Cot, Hang].Value != null)
{

MessageBox.Show(dataGridView1[Cot, Hang].Value.ToString());
}
}
//End

- 78 -
Đề cương môn học: Chuyên đề 01

2.6.

Biên soạn: Hoàng Quốc Việt

User Control

2.6.1. Khái niệm
User là điều khiển do người dùng tạo ra (không có sẵn trong tập các Control của
VS). User Control được xây dựng Khi muốn kết hợp chức năng của một hoặc nhiều
điều khiển với nhau hoặc khi cần có những cách hiển thị đặc biệt hay những xử lý
khác hơn.
Ví dụ: Xây dựng DataGridView

tích hợp sẵn các phương thức

Text2DataGridView, DataGridView2Text (dùng nhiều lần)
2.6.2. Cách xây dựng các User Control
2.6.2.1.

-

2.6.2.2.

User Control dùng trong một dự án
Kết hợp nhiều điều khiển: Project

Add New Item…

Kế thừa từ một điều khiển: Tạo Add Class
dựng

Kế thừa điều khiển cần xây

User Control dùng trong nhiều dự án
File

New Project

Chọn Winform Class Library

- 79 -

User Control
Đề cương môn học: Chuyên đề 01

2.7.

Biên soạn: Hoàng Quốc Việt

Thao tác với file XML

2.7.1. XML là gì?
XML viết tắt của chữ eXtensible Markup Language (ngôn ngữ nâng cấp có thể
mở rộng) là một bộ qui luật về cách chia một tài liệu ra làm nhiều phần, rồi đánh dấu
và ráp các phần khác nhau lại để dễ nhận diện chúng.
Tổ hợp Web toàn cầu W3C gọi XML là "một cú pháp thông dụng cho việc biểu
thị cấu trúc trong dữ liệu". Dữ liệu có cấu trúc tham chiếu đến dữ liệu được gán nhãn
cho nội dung, ý nghĩa, hoặc công dụng.
XML có cấu trúc giống như HTML tuy nhiên HTML sử dụng những thẻ được
định nghĩa trước (trong một tài liệu html không thể sử dụng thẻ do người dùng định
nghĩa), còn trong trang XML hoàn toàn có thể sử dụng những thẻ do người dùng định
nghĩa.

≡
2.7.2. Cú pháp XML
Một trang XML phải tuân thủ các quy luật sau.
1. Một trang XML phải bắt đầu bằng XML declaration (ví dụ: <?xml
version="1.0" encoding="utf-8" ?>)
2. Phải có một root (gốc) Element duy nhất, gọi là Document Element, nó
chứa tất cả các Elements khác trong tài liệu.
3. Mỗi Child Element phải nằm trọn bên trong Element cha của nó.
4. Mỗi opening Tag phải có một closing Tag giống như nó (Nếu Tag nào
không chứa gì ở giữa thì phải chấm dứt bằng "/>", thí dụ như <BR/>,
<HR/>…). opening Tag và closing Tag phải được đánh vần y như nhau,
chữ hoa hay chữ thường.
5. Các Tag không được xen kẽ nhau (thí dụ như
<Class>TK6<Lop>TK6</Class></Lop> là bất hợp lệ vì <Lop> nằm trong
Tag Class).
6. Giá trị Attribute trong XML phải được gói giữa một cặp ngoặc kép
2.7.3. Đọc/ghi file XML trong C#
- 80 -
Đề cương môn học: Chuyên đề 01

Biên soạn: Hoàng Quốc Việt

2.7.3.1. Ghi dữ liệu ra file XML
Trong C# để ghi dữ liệu ra file XML chúng ta có thể sử dụng 1 các đối tượng
sau:
XmlTextWriter
XmlWriter
XmlDocument
Minh họa: Để tạo trang XML SinhVien.xml có cấu trúc như bên dưới chúng ta
có thể sử dụng XmlTextWriter hay XmlDocument (trước khi sử dụng các đối tượng
này phải khai báo namespace using System.Xml;).

-

Trang SinhVien.xml
Sử dụng đối tượng XmlTextWriter:
XmlTextWriter xmlText = new XmlTextWriter("SinhVien.xml", null);
//Ghi chú thích
xmlText.WriteComment("Đọc ra file XML");
//Ghi dữ liệu: 1 lớp có nhiều sinh viên (tên, năm sinh)
xmlText.WriteStartElement("Lop");
//Bản ghi thứ nhất
xmlText.WriteStartElement("SinhVien");
xmlText.WriteAttributeString("ID","1");
xmlText.WriteStartElement("Ten");
xmlText.WriteString("Hoàng Quốc Việt");
xmlText.WriteEndElement();//</Name>
xmlText.WriteStartElement("NamSinh");
xmlText.WriteValue(1985);
xmlText.WriteEndElement();
xmlText.WriteEndElement();
- 81 -
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet
Cong nghnet

Weitere ähnliche Inhalte

Ähnlich wie Cong nghnet

Bao cao web cake php
Bao cao web cake phpBao cao web cake php
Bao cao web cake phplaonap166
 
1. giới thiệu về ng￴n ngữ lập trình c#
1. giới thiệu về ng￴n ngữ lập trình c#1. giới thiệu về ng￴n ngữ lập trình c#
1. giới thiệu về ng￴n ngữ lập trình c#Duy Lê Văn
 
Bao cao-cloud-linux-hosting
Bao cao-cloud-linux-hostingBao cao-cloud-linux-hosting
Bao cao-cloud-linux-hostinglaonap166
 
the real-time operating system and real-time programming
the real-time operating system and real-time programmingthe real-time operating system and real-time programming
the real-time operating system and real-time programmingDucLe868608
 
Bao cao thuc tap tuan 1 Athena Tran Dang Khoa
Bao cao thuc tap tuan 1 Athena Tran Dang KhoaBao cao thuc tap tuan 1 Athena Tran Dang Khoa
Bao cao thuc tap tuan 1 Athena Tran Dang KhoaÂu Dương Bình
 
1.+tai+lieu+thiet+ke
1.+tai+lieu+thiet+ke1.+tai+lieu+thiet+ke
1.+tai+lieu+thiet+keLinh Hoang
 
Tran Minh Thai Bai Giang Vc
Tran Minh Thai   Bai Giang VcTran Minh Thai   Bai Giang Vc
Tran Minh Thai Bai Giang VcNhat Thien
 
BaoCaoFreeRTOS.pptx
BaoCaoFreeRTOS.pptxBaoCaoFreeRTOS.pptx
BaoCaoFreeRTOS.pptxHuynhPyN
 
Ebook lập trình Java hướng đối tượng (Tiếng việt)
Ebook lập trình Java hướng đối tượng (Tiếng việt)Ebook lập trình Java hướng đối tượng (Tiếng việt)
Ebook lập trình Java hướng đối tượng (Tiếng việt)Duy Lê Văn
 
Tim hieu lo hong web va cach phong chong
Tim hieu lo hong web va cach phong chongTim hieu lo hong web va cach phong chong
Tim hieu lo hong web va cach phong chongVu Trung Kien
 
01.1-Quy trinh phat trien phan mem.pptx
01.1-Quy trinh phat trien phan mem.pptx01.1-Quy trinh phat trien phan mem.pptx
01.1-Quy trinh phat trien phan mem.pptxTunTrung15
 
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
 

Ähnlich wie Cong nghnet (20)

Bao cao web cake php
Bao cao web cake phpBao cao web cake php
Bao cao web cake php
 
1. giới thiệu về ng￴n ngữ lập trình c#
1. giới thiệu về ng￴n ngữ lập trình c#1. giới thiệu về ng￴n ngữ lập trình c#
1. giới thiệu về ng￴n ngữ lập trình c#
 
Bao cao-cloud-linux-hosting
Bao cao-cloud-linux-hostingBao cao-cloud-linux-hosting
Bao cao-cloud-linux-hosting
 
Giáo trình asp.net với c sharp
Giáo trình asp.net với c sharpGiáo trình asp.net với c sharp
Giáo trình asp.net với c sharp
 
the real-time operating system and real-time programming
the real-time operating system and real-time programmingthe real-time operating system and real-time programming
the real-time operating system and real-time programming
 
Metasploit
MetasploitMetasploit
Metasploit
 
Bao cao thuc tap tuan 1 Athena Tran Dang Khoa
Bao cao thuc tap tuan 1 Athena Tran Dang KhoaBao cao thuc tap tuan 1 Athena Tran Dang Khoa
Bao cao thuc tap tuan 1 Athena Tran Dang Khoa
 
Gt java080102005
Gt java080102005Gt java080102005
Gt java080102005
 
1.+tai+lieu+thiet+ke
1.+tai+lieu+thiet+ke1.+tai+lieu+thiet+ke
1.+tai+lieu+thiet+ke
 
Tran Minh Thai Bai Giang Vc
Tran Minh Thai   Bai Giang VcTran Minh Thai   Bai Giang Vc
Tran Minh Thai Bai Giang Vc
 
Ltgd ch01
Ltgd ch01Ltgd ch01
Ltgd ch01
 
BaoCaoFreeRTOS.pptx
BaoCaoFreeRTOS.pptxBaoCaoFreeRTOS.pptx
BaoCaoFreeRTOS.pptx
 
Dsd01 sta
Dsd01 staDsd01 sta
Dsd01 sta
 
Ebook lập trình Java hướng đối tượng (Tiếng việt)
Ebook lập trình Java hướng đối tượng (Tiếng việt)Ebook lập trình Java hướng đối tượng (Tiếng việt)
Ebook lập trình Java hướng đối tượng (Tiếng việt)
 
Tim hieu lo hong web va cach phong chong
Tim hieu lo hong web va cach phong chongTim hieu lo hong web va cach phong chong
Tim hieu lo hong web va cach phong chong
 
Htc.kien.truc.unix.linux
Htc.kien.truc.unix.linuxHtc.kien.truc.unix.linux
Htc.kien.truc.unix.linux
 
Kien.truc.unix.linux 2
Kien.truc.unix.linux 2Kien.truc.unix.linux 2
Kien.truc.unix.linux 2
 
Kien.truc.unix.linux
Kien.truc.unix.linuxKien.truc.unix.linux
Kien.truc.unix.linux
 
01.1-Quy trinh phat trien phan mem.pptx
01.1-Quy trinh phat trien phan mem.pptx01.1-Quy trinh phat trien phan mem.pptx
01.1-Quy trinh phat trien phan mem.pptx
 
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
 

Mehr von Đinh Luận

Danh sách các trường ĐH, CĐ tại Hà Nội
Danh sách các trường ĐH, CĐ tại Hà NộiDanh sách các trường ĐH, CĐ tại Hà Nội
Danh sách các trường ĐH, CĐ tại Hà NộiĐinh Luận
 
04. de cuong hqt sql server
04. de cuong hqt sql server04. de cuong hqt sql server
04. de cuong hqt sql serverĐinh Luận
 
04. de cuong bai giang cong nghe web
04. de cuong bai giang cong nghe web04. de cuong bai giang cong nghe web
04. de cuong bai giang cong nghe webĐinh Luận
 
Tai lieu.vn ly thuyet he dieu hanh
Tai lieu.vn ly thuyet he dieu hanh Tai lieu.vn ly thuyet he dieu hanh
Tai lieu.vn ly thuyet he dieu hanh Đinh Luận
 
De cuong btht (cdcq)
De cuong btht (cdcq)De cuong btht (cdcq)
De cuong btht (cdcq)Đinh Luận
 
Giao trinh mang_doanh_nghiep_0313
Giao trinh mang_doanh_nghiep_0313Giao trinh mang_doanh_nghiep_0313
Giao trinh mang_doanh_nghiep_0313Đinh Luận
 
04. de cuong thiet lap va cau hinh mang lan (3 tc)
04. de cuong   thiet lap va cau hinh mang lan (3 tc)04. de cuong   thiet lap va cau hinh mang lan (3 tc)
04. de cuong thiet lap va cau hinh mang lan (3 tc)Đinh Luận
 
Giao trinh thuc hanh sql
Giao trinh thuc hanh sqlGiao trinh thuc hanh sql
Giao trinh thuc hanh sqlĐinh Luận
 
Java thegioiebook 3216
Java thegioiebook 3216Java thegioiebook 3216
Java thegioiebook 3216Đinh Luận
 

Mehr von Đinh Luận (9)

Danh sách các trường ĐH, CĐ tại Hà Nội
Danh sách các trường ĐH, CĐ tại Hà NộiDanh sách các trường ĐH, CĐ tại Hà Nội
Danh sách các trường ĐH, CĐ tại Hà Nội
 
04. de cuong hqt sql server
04. de cuong hqt sql server04. de cuong hqt sql server
04. de cuong hqt sql server
 
04. de cuong bai giang cong nghe web
04. de cuong bai giang cong nghe web04. de cuong bai giang cong nghe web
04. de cuong bai giang cong nghe web
 
Tai lieu.vn ly thuyet he dieu hanh
Tai lieu.vn ly thuyet he dieu hanh Tai lieu.vn ly thuyet he dieu hanh
Tai lieu.vn ly thuyet he dieu hanh
 
De cuong btht (cdcq)
De cuong btht (cdcq)De cuong btht (cdcq)
De cuong btht (cdcq)
 
Giao trinh mang_doanh_nghiep_0313
Giao trinh mang_doanh_nghiep_0313Giao trinh mang_doanh_nghiep_0313
Giao trinh mang_doanh_nghiep_0313
 
04. de cuong thiet lap va cau hinh mang lan (3 tc)
04. de cuong   thiet lap va cau hinh mang lan (3 tc)04. de cuong   thiet lap va cau hinh mang lan (3 tc)
04. de cuong thiet lap va cau hinh mang lan (3 tc)
 
Giao trinh thuc hanh sql
Giao trinh thuc hanh sqlGiao trinh thuc hanh sql
Giao trinh thuc hanh sql
 
Java thegioiebook 3216
Java thegioiebook 3216Java thegioiebook 3216
Java thegioiebook 3216
 

Cong nghnet

  • 1. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt MỤC LỤC MỤC LỤC...................................................................................................................1 CHƯƠNG 1: KIẾN TRÚC CỦA .NET .......................................................................3 1.1. Môi trường thực thi ngôn ngữ chung – CLR................................................3 1.2. Ngôn ngữ trung gian - IL.............................................................................4 1.3. Giới thiệu về .Net Framework .....................................................................5 CHƯƠNG 2: LẬP TRÌNH WINDOWS FORMS ........................................................6 2.1. Tạo một ứng dụng Windows form ...............................................................6 2.2. Lớp Control.................................................................................................7 2.3. Form ...........................................................................................................7 2.3.1. Chức năng ............................................................................................7 2.3.2. Một số thuộc tính thường dùng .............................................................7 2.3.3. Một số sự kiện thường dùng................................................................ 10 2.4. Tập hợp .....................................................................................................14 2.4.1. Khái niệm .............................................................................................. 14 2.4.2. Các thuộc tính, phương thức lớp Collection ...........................................14 2.5. Một số control ...........................................................................................15 2.5.1. Button.................................................................................................15 2.5.2. Combobox ..........................................................................................15 2.5.3. WebBrowser.......................................................................................17 2.5.4. Textbox .............................................................................................. 19 2.5.5. MaskedTextbox ..................................................................................26 2.5.6. RichTextBox ......................................................................................26 2.5.7. Nhóm điều khiển Menu ......................................................................31 2.5.8. Nhóm điều khiển Dialog .....................................................................34 -1-
  • 2. Đề cương môn học: Chuyên đề 01 2.5.9. 2.5.10. 2.6. Biên soạn: Hoàng Quốc Việt ListView............................................................................................. 42 DataGridView .................................................................................60 User Control.............................................................................................. 79 2.6.1. Khái niệm ...........................................................................................79 2.6.2. Cách xây dựng các User Control.........................................................79 2.7. Thao tác với file XML...............................................................................80 2.8. Thao tác với Registry ................................................................................85 CHƯƠNG 3: LẬP TRÌNH CƠ SỞ DỮ LIỆU............................................................88 3.1. Giới thiệu ADO.NET ................................................................................88 3.2. Các mô hình thao tác với CSDL ................................................................ 89 3.3. Kết nối đến nguồn dữ liệu bằng đối tượng Connection .............................. 90 3.4. Thực thi câu lệnh SQL bằng đối tượng Command .....................................93 3.5. Truy vấn và nhận về dữ liệu với DataReader .............................................98 3.6. Cập nhật và truy vấn dữ liệu với đối tượng DataAdapter ......................... 100 3.7. Mô hình DataSet ..................................................................................... 102 3.8. Sử dụng DataView trong sắp xếp và tìm kiếm dữ liệu ............................. 104 3.9. Ràng buộc dữ liệu với các điều khiển ...................................................... 104 CHƯƠNG 4: CRYSTAL REPORT ......................................................................... 105 4.1. Thiết kế báo cáo với Crystal Report ........................................................ 105 4.2. Nạp và hiển thị Report trong chương trình............................................... 113 4.3. Thiết kế Report động............................................................................... 114 -2-
  • 3. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt CHƯƠNG 1: KIẾN TRÚC CỦA .NET 1.1. Môi trường thực thi ngôn ngữ chung – CLR Như đã đề cập thì CLR thực hiện quản lý bộ nhớ, quản lý thực thi tiểu trình, thực thi mã nguồn, xác nhận mã nguồn an toàn, biên bịch và các dịch vụ hệ thống khác. Những đặc tính trên là nền tảng cơ bản cho những mã nguồn được quản lý chạy trên CLR. Do chú trọng đến bảo mật, những thành phần được quản lý được cấp những mức độ quyền hạn khác nhau, phụ thuộc vào nhiều yếu tố nguyên thủy của chúng như: liên quan đến Internet, hệ thống mạng trong nhà máy, hay một máy tính cục bộ. Điều này có nghĩa rằng, một thành phần được quản lý có thể có hay không có quyền thực hiện một thao tác truy cập tập tin, thao tác truy cập registry, hay các chức năng nhạy cảm khác. CLR thúc đẩy việc mã nguồn thực hiện việc truy cập được bảo mật. Ví dụ, người sử dụng giới hạn rằng việc thực thi nhúng vào trong một trang web có thể chạy được hoạt hình trên màn hình hay hát một bản nhạc, nhưng không thể truy cập được dữ liệu riêng tư, tập tin hệ thống, hay truy cập mạng. Do đó, đặc tính bảo mật của CLR cho phép những phần mềm đóng gói trên Inernet có nhiều đặc tính mà không ảnh hưởng đến việc bảo mật hệ thống. CLR còn thúc đẩy cho mã nguồn được thực thi mạnh mẽ hơn bằng việc thực thi mã nguồn chính xác và sự xác nhận mã nguồn. Nền tảng của việc thực hiện này là Common Type System (CTS). CTS đảm bảo rằng những mã nguồn được quản lý thì được tự mô tả (self- describing). Sự khác nhau giữa Microsoft và các trình biên dịch ngôn ngữ của hãng thứ ba là việc tạo ra các mã nguồn được quản lý có thể thích hợp với CTS. Điều này thì mã nguồn được quản lý có thể sử dụng những kiểu được quản lý khác và những thể hiện, trong khi thúc đẩy nghiêm ngặt việc sử dụng kiểu dữ liệu chính xác và an toàn. Thêm vào đó, môi trường được quản lý của runtime sẽ thực hiện việc tự động xử lý layout của đối tượng và quản lý những tham chiếu đến đối tượng, giải phóng chúng khi chúng không còn được sử dụng nữa. Việc quản lý bộ nhớ tự động này còn giải quyết hai lỗi chung của ứng dụng: thiếu bộ nhớ và tham chiếu bộ nhớ không hợp lệ. -3-
  • 4. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt Trong khi runtime được thiết kế cho những phần mềm của tương lai, nó cũng hỗ trợ cho phân mềm ngày nay và trước đây. Khả năng hoạt động qua lại giữa mã nguồn được quản lý và mã nguồn không được quản lý cho phép người phát triển tiếp tục sử dụng những thành phần cần thiết của COM và DLL. Rutime được thiết kế để cải tiến hiệu suất thực hiện. Mặc dù CLR cung cấp nhiều các tiêu chuẩn dịch vụ runtime, nhưng mã nguồn được quản lý không bao giờ được dịch. Có một đặc tính gọi là Just-in-Time (JIT) biên dịch tất cả những mã nguồn được quản lý vào trong ngôn ngữ máy của hệ thống vào lúc mà nó được thực thi. Khi đó, trình quản lý bộ nhớ xóa bỏ những phân mảnh bộ nhớ nếu có thể được và gia tăng tham chiếu bộ nhớ cục bộ, và kết quả gia tăng hiệu quả thực thi. 1.2. Ngôn ngữ trung gian - IL Như chúng ta đã biết, Intermediate Language hoạt động như là bản chất của .NET Framework. Là lập trình viên C#, chúng ta nên biết rằng mã C# sẽ luôn được dịch sang Intermediate Language trước khi nó được thực thi (thật vậy, trình biên dịch C# chỉ dịch sang mã có quản). Chúng ta hãy cùng khám phá các tính năng chính của IL, bất kì ngôn ngữ nào hướng .NET cũng sẽ hỗ trợ các đặc tính chính của IL. Sau đây là những đặc tính chính của Intermediate Language: Hướng đối tượng và dùng interfaces Sự tách biệt giữa kiểu giá trị và kiểu tham chiếu Định kiểu mạnh Quản lỗi thông qua các ngoại lệ Sự dụng các thuộc tính -4-
  • 5. Đề cương môn học: Chuyên đề 01 1.3. Biên soạn: Hoàng Quốc Việt Giới thiệu về .Net Framework .NET Framework là một platform mới làm đơn giản việc phát triển ứng dụng trong môi trường phân tán của Internet. .NET Framework được thiết kế đầy đủ để đáp ứng theo quan điểm sau: Để cung cấp một môi trường lập trình hướng đối tượng vững chắc, trong đó mã nguồn đối tượng được lưu trữ và thực thi một cách cục bộ. Thực thi cục bộ nhưng được phân tán trên Internet, hoặc thực thi từ xa. Để cung cấp một môi trường thực thi mã nguồn mà tối thiểu được việc đóng gói phần mềm và sự tranh chấp về phiên bản. Để cung cấp một môi trường thực thi mã nguồn mà đảm bảo việc thực thi an toàn mã nguồn, bao gồm cả việc mã nguồn được tạo bởi hãng thứ ba hay bất cứ hãng nào mà tuân thủ theo kiến trúc .NET. Để cung cấp một môi trường thực thi mã nguồn mà loại bỏ được những lỗi thực hiện các script hay môi trường thông dịch. Để làm cho những người phát triển có kinh nghiệm vững chắc có thể nắm vững nhiều kiểu ứng dụng khác nhau. Như là từ những ứng dụng trên nền Windows đến những ứng dụng dựa trên web. Để xây dựng tất cả các thông tin dựa triên tiêu chuẩn công nghiệp để đảm bảo rằng mã nguồn trên .NET có thể tích hợp với bất cứ mã nguồn khác. -5-
  • 6. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt CHƯƠNG 2: LẬP TRÌNH WINDOWS FORMS 2.1. Tạo một ứng dụng Windows form Bước 1: Khởi động VS2008 và chọn Fille New Project … Bước 2: Chọn Ứng dụng dạng Windows Forms Application, chọn nơi lữu trữ Project (xem hình) nhấn OK. -6-
  • 7. Đề cương môn học: Chuyên đề 01 2.2. Biên soạn: Hoàng Quốc Việt Lớp Control Xem slide 2.3. Form 2.3.1. Chức năng Form (hay còn gọi điều khiển Form) dùng để chứa các điều khiển khác (Buttons, Label…) 2.3.2. Một số thuộc tính thường dùng Tên Name Ỹ nghĩa Tên của Form. Trong một Project tên của các Form phải khác nhau. AcceptButton Giá trị mà thuộc tính này nhận là tên của một Button trên Form (Nếu Form có chứa button). Khi đó nếu bạn nhấn phím Enter thì sự kiện Click của Button mà bạn chọn được thực thi mà không cần nhấn chuột vào Button đó. Autosize Nhận một trong hai giá trị True hay False - True: Không cho phép thay đổi kích thước Form mà che đi các điều khiển khác chứa trên Form - False: Ngược lại AutoSizeMode Cho phép thay đổi kích thước của Form hay không? (Khi di chuyển chuột vào các mép của Form mà hiện nên biểu tượng ↔ là cho phép). Và nhận một trong hai giá trị BackColor - GrowOnly: Cho phép và GrowAndShrink: Không cho phép Chọn màu nền cho Form -7-
  • 8. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt BackGroundImage Chọn ảnh làm nền cho Form CancelButton Giá trị mà thuộc tính này nhận là tên của một Button trên Form (Nếu Form có chứa button). Khi đó nếu bạn nhấn phím ESC thì sự kiện Click của Button mà bạn chọn được thực thi mà không cần nhấn chuột vào Button đó (tương tự như thuộc tính AcceptButton ). ControlBox Nhận một trong hai giá trị True hay False - True: Cho phép các các nút: MaximizeBox, MinimizeBox, Close trên Titlebar xuất hiện False: Không Cho phép các các nút: MaximizeBox, MinimizeBox, Close trên Titlebar xuất hiện (Khi đó các thuộc tính MaximizeBox, MinimizeBox của Form cũng mất đi) Font Chọn kiểu Font chữ cho Form (Khi đó tất cả các điều khiển được thêm vào Form sẽ có thuộc tính Font giống như thuộc tính Font của Form) ForeColor Tương tự như thuộc tính Font nhưng áp dụng đối với màu chữ FormBorderStyle Chọn Style cho Form (Có 7 lựa chọn khác nhau). HelpButton Nhận một trong hai giá trị True hay False. - True: Cho phép xuất hiện Buton có dấu ? trên Titlebar (Với điều kiện: hai thuộc tính MaximizeBox, MaximizeBox phải đặt giá - trị là False) False: Ngược lại → Thuộc tính này sẽ hay đi kèm với điều khiển -8-
  • 9. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt HelpProvider về sau Icon Chọn một Icon (có đuôi mở rộng là .ico) trên máy tính của bạn thay cho Icon mặc định của Form mà VS tạo ra KeyPreview MaximizeBox Nhận một trong hai giá trị True hay False - True: Cho phép các sự kiện về bàn phím của Form (KeyUp, KeyDown, KeyPress… của Form) có hiệu lực. False: Ngược lại Nhận một trong hai giá trị True hay False - True: Cho phép nút MaximizeBox trên Titlebar có hiệu lực False: Ngược lại MaximizeBox Tương tự như thuộc tính MaximizeBox Opacity Độ trong suốt của Form ShowIcon Nhận một trong hai giá trị True hay False - ShowInTaskbar StartPosition True: Cho phép xuất hiện Icon của Form False: Không cho phép xuất hiện Icon của Form Nhận một trong hai giá trị True hay False - True: Cho phép hiện Form dưới khay Taskbar False: Ngược lại Vị trí hiển thị của Form so với màn hình hệ thống hay Form cha (5 lựa chọn khác nhau) Text Giá trị Text của Form WindowState Trạng thái hiển thị của Form khi chạy (Khi bạn nhấn -9-
  • 10. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt vào nút Run của VS) (Có 3 lựa chọn khác nhau: Ẩn dưới khay Taskbar, mở rộng hết màn hình…). 2.3.3. Một số sự kiện thường dùng Tên AutoSizeChanged Ỹ nghĩa Xảy ra khi thuộc tính Autosize của Form chuyển từ True → False hay ngược lại là False → True. BackColorChanged Xảy ra khi thuộc tính BackColor của Form thay đổi Click Xảy ra khi người dùng Click chuột vào vùng làm việc thuộc Form ControlAdded Xảy ra khi một điều khiển được Add vào Form ControlRemoved Xảy ra khi một điều khiển bị xóa khỏi Form CursorChanged Xảy ra khi thuộc tính Cursor của Form thay đổi DoubleClick Xảy ra khi người dùng DoubleClick vào vùng làm việc của Form FontChanged Xảy ra khi thuộc tính Font của Form có sự thay đổi ForeColorChanged Xảy ra khi thuộc tính ForeColor của Form có sự thay đổi FormClosed Xảy ra khi Form đã đóng (Nhấn vào nút X màu đỏ trên Titlebar) FormClosing Xảy ra khi Form đang đóng (2 sự kiện FormClosed và FormClosing thường dùng trong lập trình CSDL: khi xảy ra sự kiện này thì đóng kết nối CSDL) KeyDown Xảy ra khi người dùng nhấn một phím hay một tố hợp phím (tùy thuộc vào xử lý của chúng ta) - 10 -
  • 11. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt KeyPress Xảy ra khi người dùng nhấn một phím KeyUp Xảy ra khi người dùng nhả một phím. MouseClick Xảy ra khi người dùng nhấn chuột (một trong 3 lựa chọn: Trái, giữa, phải) MouseDoubleClick Xảy ra khi người dùng DoubleClick chuột vào một vùng làm việc của Form(một trong 3 lựa chọn: Trái, giữa, phải) MouseDown Xảy ra khi người dùng nhấn chuột MouseHover Xảy ra khi người dùng di chuyển vào các vùng làm việc Form MouseLeave Xảy ra khi di chuyển chuột ra khỏi vùng làm việc của Form MouseMove Xảy ra khi di chuyển chuột trên một vùng làm việc thuộc Form (nếu Form có chứa một điều khiển nào đó, khi di chuyển chuột trên điều khiển này thì không xảy ra sự kiện MouseMove của Form). MouseUp Xảy ra khi người dùng nhả nhấn chuột (có thể là chuột trái, chuột phải, chuột giữa - chuột cuộn) Move Xảy ra khi di chuyển Form (có sự thay đổi vị trí của Form) StyleChanged Xảy ra khi thuộc tính FormBorderStyle của Form thay đổi TextChanged Xảy ra khi thuộc tính Text của Form thay đổi. 2.3.4. Minh họa - 11 -
  • 12. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt 2.3.4.1. Sự kiện FormClosed //Sự kiện FormClosed - Sự kiện này được gọi khi Form đã đóng private void frmForm_FormClosed(object sender, FormClosedEventArgs e) { MessageBox.Show("Sự kiện FormClosed được gọi", "FormClosed",MessageBoxButtons.OK,MessageBoxIcon.Information); } 2.3.4.2. Sự kiện FormClosing //Sự kiện FormClosing xảy ra khi Form đang đóng private void frmForm_FormClosing(object sender, FormClosingEventArgs e) { if (MessageBox.Show("Bạn có muốn đóng Form lại hay không?", "FormClosing", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) e.Cancel = false;// Đóng Form lại else e.Cancel = true;//Không đóng Form nữa } 2.3.4.3. Sự kiện KeyPress //Sự kiện KeyPress private void frmForm_KeyPress(object sender, KeyPressEventArgs e) { //Nếu không chỉ rõ phím nào được nhấn thì khi nhấn bất cứ phím nào sự kiện KeyPress của Form đều xảy ra //Chỉ rõ phím nào được nhấn thì phát sinh sự kiện KeyPress làm như sau if (e.KeyChar = 'a') MessageBox.Show("Sự kiện KeyPress xảy ra khi bạn nhấn phím a"); - 12 -
  • 13. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt } //Sự kiện KeyUp tương tự như sự kiện KeyPress //Sự kiện KeyDown xảy ra khi nhấn một phím hay tổ hợp phím 2.3.4.4. Sự kiện KeyDown private void frmForm_KeyDown(object sender, KeyEventArgs e) { //khi nhấn một phím bất kì trên bàn phím thì sự kiện KeyPress được gọi //Đồng thời sự kiện KeyDown cũng được gọi → KeyPress là trường hợp riêng của KeyDown //Áp dụng: Nhấn một tổ hợp phím thì sự kiện KeyDown mới được gọi //Như Windows Media: Nhấn Ctrl+F để di chuyển bài tiếp theo if (e.KeyCode == Keys.F && e.Modifiers == Keys.Control) MessageBox.Show("Sự kiện KeyDown được gọi khi bạn nhấn Ctrl + F"); } 2.3.4.5. Sự kiện MouseClick //Sự kiện MouseClick private void frmForm_MouseClick(object sender, MouseEventArgs e) { //Nếu bạn không muốn biết người dùng nhấn chuột TRÁI hay PHẢI hay GIỮA thì khi nhấn bất kì //Chuột nào cũng xảy ra sự kiện MouseClick của Form //Còn nếu bạn muốn bắt được sự kiện người dùng nhấn chuột TRÁI, PHẢI, hay GIỮA làm thế này if (e.Button == MouseButtons.Left) MessageBox.Show("Sự kiện MouseClick xảy ra khi bạn Click chuột TRÁI"); else if (e.Button==MouseButtons.Middle) - 13 -
  • 14. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt MessageBox.Show("Sự kiện MouseClick xảy ra khi bạn Click chuột GIỮA"); else if (e.Button==MouseButtons.Right) MessageBox.Show("Sự kiện MouseClick xảy ra khi bạn Click chuột PHẢI"); } //Các sự kiện MouseDoubleClick, MouseDown, MouseUp... Xử lý tương tự 2.4. Tập hợp 2.4.1. Khái niệm Là một kiểu dữ liệu dùng lưu trữ nhiều phần tử có cùng đặc tính. Ví dụ: Mảng, Tập các nút lệnh chứa trên Form, tập các phần tử (Item) của Combobox, Listbox………. 2.4.2. Các thuộc tính, phương thức lớp Collection Count/Length: Lấy về số phần tử của tập hợp. Add, AddRange: Thêm phần tử vào tập hợp. Remove, RemoveAt: Xóa phần tử khỏi tập hợp. Clear: Xóa toàn bộ các phần tử khỏi tập hợp. Insert: Chèn một phần tử vào tập hợp (Khác với Add luôn thêm phần tử mới vào cuối tập hợp, Insert thêm vào một vị trí xác định nào đó trong tập hợp). Items[i]: Lấy một phần tử thứ i trong tập hợp. - 14 -
  • 15. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt 2.4.3. Duyệt các phần tử trong tập hợp Để duyệt các phần tử trong tập hợp người ta thường sử dụng vòng lặp ForEarch foreach (biến in biến_Tập_hợp) {Xử lý giá trị lấy được} 2.5. Một số control 2.5.1. Button 2.5.2. Combobox 2.5.2.1. Chức năng Lưu trữ các mục dữ liệu (phần tử) dưới dạng danh sách 2.5.2.2. Một số thuộc tính thường dùng Tên Anchor Ý nghĩa Xác định vị trí “neo đậu” của điều khiển so với Form AutoCompleteCustomSource Xác định các phần tử cho tính năng AutoComplete của Combobox (Tức là tính năng AutoComplete chỉ áp dụng trên các phần tử này - Nếu thuộc tính AutoCompleteSource là CustomSource) AutoCompleteMode Kiểu tự động tìm kiếm các phần tử trong Combobox. Có một số lựa chọn sau - AutoCompleteSource Suggest: Hiển thị kết qủa ra bên dưới Append: Tự động điền vào Combobox và không hiển thị ra bên dưới SuggestAppend=Suggest+Append Chọn nguồn các Item cho Combobox sử dụng tính năng AutoComplete. Chú ý một số lựa chọn sau: - HistoryList: Danh sách các Url lưu trong History của IE ListItems: Các phần tử của Combobox được thêm vào thông qua thuộc tính Items CustomSource: Giá trị các phần tử trong thuộc tính AutoCompleteCustomSource - 15 -
  • 16. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt BackColor Chọn màu nền cho Combobox Cursor Hình dáng của chuột khi di chuyển vào Combobox DataSource Chọn nguồn dữ liệu (nguồn các phần tử) cho Combobox (Có thể là một mảng dữ liệu kiểu string, một trường trong CSDL…) Dock Vị trí bám dính của Combobox Enabled Cho phép Combobox có hiệu lực hay không? Font Chọn Font cho Combobox ForeColor Chọn màu chữ của các phần tử (Item) của Combobox Items Quản lý các phần tử trong Combobox (thêm các phần tử vào Combobox, xóa đi…) Text Giá trị ứng với phần tử đang được chọn Sorted Nếu chọn là True: Tự động sắp xếp các phần tử trong Combobox theo giá trị tăng dần SelectedIndex Get/Set chỉ số của phần tử đang chọn Chú ý: Các điều khiển có rất nhiều thuộc tính giống nhau: Anchor, Dock, Font, ForeColor, Enabled, Visible, TabIndex……Các thuộc tính này là giống nhau với tất cả các điều khiển 2.5.2.3. Một số phương thức thường dùng Tên Ý nghĩa Add Thêm một phần tử vào Combobox AddRange Thêm một mảng các phần tử vào Combobox ……………. → Tập các Item có các phương thức và thuộc tính của Collection 2.5.2.4. Một số sự kiện thường dùng Tên Ý nghĩa - 16 -
  • 17. Đề cương môn học: Chuyên đề 01 SelectedIndexChanged Biên soạn: Hoàng Quốc Việt Xảy ra khi người dùng chọn phần tử khác khác Chú ý: Các điều khiển (Form, Label ,Button…) có rất nhiều các sự kiện giống nhau. Ý nghĩa của các sự kiện này là giống nhau với các điều khiển 2.5.3. WebBrowser 2.5.3.1. Chức năng Duyệt các trang Web, hiển thị các File với các định dạng khác nhau. 2.5.3.2. Một số thuộc tính thường dùng Tên Ý Nghĩa ScrollBarsEnabled Nhận một trong hai giá trị True hay False Url - True: Cho phép điều khiển hiển thị thanh cuộn. - False: Ngược lại Giá trị mà thuộc tính này nhận là một chuỗi String (Có thể là tên một Website, đường dẫn tới một File…) mà WebBrowser sẽ hiển thị 2.5.3.3. Một số phương thức thường dùng Tên Navigate Chức năng Hiển thị nội dung File với tham số truyền vào VD: webBrowser1.Navigate("C:WindowsForrmInC#.ppt"); 2.5.3.4. Minh họa Minh họa thuộc tính Url //Đặt thuộc tính Url thông qua mã Code //webBrowser1 là tên điều khiển WebBrowser private void btWeb_Click(object sender, EventArgs e) { Uri u = new Uri(@"http://mail.google.com/"); webBrowser1.Url = u; //Viết gộp lại như thế này: webBrowser1.Url = new - 17 -
  • 18. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt Uri(@"http://mail.google.com/"); //-> khi Click vào btWeb thì WebBrowser hiển thị WebSite http://mail.google.com/ //Tất nhiên máy bạn phải kết nối với Internet } Minh họa phương thức Navigate //Hiển thị một trang Web hay Một File nào đó -> Sử dụng phương thức Navigate private void btWeb_Click(object sender, EventArgs e) { //Hiển thị Website webBrowser1.Navigate(@"mail.google.com");//(1) //<->webBrowser1.Url = new Uri(@"http://mail.google.com/"); //Chú ý: Muốn sử dụng (1) phải cho (2) và (3)... vào dạng chú thích //Vì một lúc webBrowser không thể hiển thị cả Website, cả ảnh, vả file PPT //Hiển thị File PowerPoint //webBrowser1.Navigate(@"C:NET.ppt");//(2) //Hiển thị Ảnh //webBrowser1.Navigate(@"C:viethqtk1.jpg");//(3) //................................ } Phương thức thường dùng //Phương thức hay dùng xử lý với WebBrowser để tạo ra trình duyệt Web private void Navigate(String address) - 18 -
  • 19. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt { if (address.Equals("about:blank")) return; if (!address.StartsWith("http://") && !address.StartsWith("https://")) { address = "http://" + address; } try { webBrowser1.Navigate(new Uri(address)); } catch (System.UriFormatException) { return; } } 2.5.4. Textbox 2.5.4.1. Chức năng Điều khiển Textbox cho phép bạn nhập và hiển thị dữ liệu. 2.5.4.2. Một số thuộc tính thường dùng Tên AcceptsTab Ý nghĩa Nhận một trong hai giá trị True hay False - True: Khi nhấn phím Tab thì con trỏ (Focus) chỉ di chuyển bên trong Textbox (Với điều kiện thuộc tính Multiline=True). - 19 -
  • 20. Đề cương môn học: Chuyên đề 01 - Biên soạn: Hoàng Quốc Việt False: Khi nhấn Tab thì Focus di chuyển qua lại giữa các điều khiển trên Form → Thuộc tính này hay đặt bằng True trong các ứng dụng soạn thảo văn bản Anchor Vị trí neo đậu của Textbox trên Form AutoCompleteCustomSource Ba thuộc tính này ý nghĩa tương tự như của AutoCompleteMode thuộc tính của điều khiển Combobox AutoComplete Source BackColor Đặt mầu nền cho Textbox BorderStyle Chọn kiểu đường viền cho Textbox ContextMenuStrip Chọn Menu ngữ cảnh khi nhấn chuột phải vào Textbox Dock Vị trí bám dính và điền đầy của Textbox với Form Font Chọn kiểu Font chữ cho Textbox HideSelection Nhận một trong hai giá trị True hay False MaxLenght - True: Không cho phép các thuộc tính: SelectionStart…có hiệu lực. False: Ngược lại Số lượng kí tự lớn nhất cho phép nhập vào Textbox Multiline Nhận một trong hai giá trị True hay False - True: Cho phép nhập và hiển thị giá trị của Textbox trên nhiều dòng (người dùng có thể nhìn thấy toàn bộ giá trị Text của nó) - 20 -
  • 21. Đề cương môn học: Chuyên đề 01 PasswordChar - Biên soạn: Hoàng Quốc Việt False: Cho phép nhập/hiển thị giá trị của Textbox trên một dòng Hiển thị giá trị của Textbox dưới dạng các kí tự mà bạn thay thế (kí tự do người dùng nhập vào: *, #...) ReadOnly Cho phép hiển thị thanh trượt hay không? (Với ScrollBars điều kiện thuộc tính Multiline=True mới nhìn thấy thanh cuộn) TabIndex Visible Cho phép Textbox hiển thị hay không? CanUndo Trả lại hai giá trị True/False. - Các thuộc tính SelectionText True: có thể Undo lại được (như Word) False: Ngược lại SelectedText SelectionStart SelectionLength ………………. Chú ý: Các điều khiển có rất nhiều thuộc tính giống nhau: Anchor, Dock, Font, ForeColor, Enabled, Visible, TabIndex……Về ý nghĩa các thuộc tính này là giống nhau với tất cả các điều khiển 2.5.4.3. Một số phương thức thường dùng Tên AppendText Ý nghĩa Nối một chuỗi (string) vào giá trị Text hiện có của Textbox - 21 -
  • 22. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt Copy Xử lý phần nội dung bôi đen (như Word) Cut Paste Focus Chuyển Focus (con trỏ) vào TextBox Clear Xóa toàn bộ Textbox Select Lấy ra một chuỗi trong Textbox (xem Code) SelectAll Lấy tất cả giá trị của Textbox Undo Xử lý Undo như Word 2.5.4.4. Một số sự kiện thường dùng Tên Ý nghĩa Xảy ra khi người dùng nhấn phím trên bàn phím (tất KeyPress nhiên Textbox phải đang Focus – Áp dụng sự kiện này để xử lý không cho phép nhập chữ vào Textbox…) Xảy ra khi người dùng Click chuột trên điều khiển MouseClick Textbox Xảy ra khi giá trị Text của Texbox (hay gọi giá trị TextChanged Textbox) thay đổi 2.5.4.5. Minh họa 2.5.4.5.1. Minh họa thuộc tính Text của Textbox private void btTextbox_Click(object sender, EventArgs e) { //Trước khi gán thuộc tính text MessageBox.Show("Giá trị textbox trước khi gán: "+ - 22 -
  • 23. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt textBox1.Text); //Gán giá trị Text textBox1.Text = "Chào các bạn"; //Sau khi gán MessageBox.Show("Giá trị textbox sau khi gán: " + textBox1.Text); } 2.5.4.5.2. Minh họa thuộc tính SelectedText private void btTextbox_Click(object sender, EventArgs e) { //Thuộc tính SelectedText lấy ra một chuỗi mà bạn bôi đen (Chọn) //Bạn hãy bôi đen một vài từ trong Textbox sau đó Click vào Button này sẽ hiển thị //Message thông báo từ bạn chọn string str = textBox1.SelectedText; MessageBox.Show("Từ bạn vừa chọn (bôi đen) là: "+str); } 2.5.4.5.3. Minh họa thuộc tính SelectionStart và SelectionLength private void btTextbox_Click(object sender, EventArgs e) { //Thuộc tính này dùng trong tìm kiếm rất nhiều //Thuộc tính SelectionStart: Ví trí bắt đầu Select //Thuộc tính SelectionLength: Chiều dài của vùng lựa chọn //Chú ý: Đặt thuộc tính HideSelection=False //Ví dụ: Tìm kiếm xem giá trị của Textbox có từ nào là chào hay không. Nếu có thì nó tự Bôi đen từ đó string str = "chào"; int i; i = textBox1.Text.LastIndexOf(str); - 23 -
  • 24. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt if (i >= 0) { textBox1.SelectionStart = i; textBox1.SelectionLength = str.Length; } } 2.5.4.5.4. Minh họa thuộc tính CanUndo và phương thức Undo private void btTextbox_Click(object sender, EventArgs e) { //Nếu có thể Undo (có nghĩa: Bạn phải gõ văn bản vào Textbox rồi sửa, xóa...) //Mới có thể Undo lại được if (textBox1.CanUndo) textBox1.Undo(); } 2.5.4.5.5. Minh họa phương thức Select private void btTextbox_Click(object sender, EventArgs e) { //Cú pháp chung: txtNoiDung.Select(Start, Length); //Mục đích để lấy về một chuỗi từ từ vị trí nào và chiều dài của chuỗi dược chọn (tất nhiên: bôi đen vùng này). //-> Phương thức này tương đương với sử dụng 2 thuộc tính SelectionStart và SelectionLength //Ví dụ: txtNoiDung.Select(10, 5); //<-> 2 câu lệnh này //textBox1.SelectionStart = 10; //textBox1.SelectionStart = 5; } - 24 -
  • 25. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt 2.5.4.5.6. Minh họa phương thức AppendText private void btTextbox_Click(object sender, EventArgs e) { //Giá trị Textbox trước khi gọi phương thức MessageBox.Show("Trước: "+textBox1.Text); //Gọi phương thức textBox1.AppendText("Khoa CNTT - UTEHY"); //Giá trị Textbox trước khi gọi phương thức MessageBox.Show("Sau: " + textBox1.Text); } 2.5.4.5.7. Xử lý chỉ cho phép Textbox nhập số (sự kiện KeyPress của Textbox) – Cách 1 private void txtNoiDung_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar >= '0' && e.KeyChar <= '9') e.Handled = false;//Handled: Được xử lý else e.Handled = true; } 2.5.4.5.8. Xử lý chỉ cho phép Textbox nhập số (sự kiện KeyPress của Textbox) – Cách 2 private void txtNoiDung_KeyPress(object sender, KeyPressEventArgs e) { if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar)) e.Handled = true; //Char.IsDigit(e.KeyChar) --> //kiểm tra xem phím vừa nhập vào textbox có phải là ký tự số hay không, hàm này trả về kiểu bool //Char.IsContro(e.KeyChar) --> - 25 -
  • 26. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt //kiểm tra xem phím vừa nhập vào textbox có phải là các ký tự điều khiển //(các phím mũi tên,Delete,Insert,backspace,space bar…) hay không, mục đích dùng hàm này là để cho phép người dùng xóa số trong trường hợp nhập sai. } → Sử dụng Textbox viết chương trình soạn thảo văn bản đơn giản (tham khảo Notepad) 2.5.5. MaskedTextbox 2.5.5.1. Chức năng Dùng nhập dữ liệu theo các định dạng khác nhau (ngày tháng…) 2.5.5.2. Một số thuộc tính thường dùng Tên Mask Ý nghĩa Đặt định dạng cho dữ liệu nhập (00/00/0000) 2.5.5.3. Một số phương thức thường dùng Tương tự như điều khiển Textbox 2.5.5.4. Một số sự kiện thường dùng Tương tự như điều khiển Textbox 2.5.6. RichTextBox 2.5.6.1. Chức năng Điều khiển RitchTextBox dùng để lưu trữ và hiển thị văn bản theo nhiều định dạng khác nhau (định dạng chuẩn là rtf) 2.5.6.2. Một số thuộc tính thường dùng Điều khiển RitchTextBox có rất nhiều các thuộc tính giống Textbox nói riêng và các điều khiển khác nói chung. Ý nghĩa của các thuộc tính này là giống nhau với các điều khiển. Ở đây chúng ta xét một số thuộc tính khác của RitchTextBox - 26 -
  • 27. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt Tên Ý nghĩa Lấy về chuỗi được lựa chọn (chuỗi mà chúng ta bôi SelectedText đen) SelectionStart, SelectionLength Lấy về một chuỗi với vị trí bắt đầu và chiều dài, hai thuộc tính này thường đi với nhau SelectionFont Lấy thông tin về Font của một chuỗi được lựa chọn (bôi đen) SelectionColor Lấy thông tin về Color của chuỗi được bôi đen được lựa chọn CanUndo Trả lại hai giá trị True/False. - CanRedo 2.5.6.3. True: có thể Undo lại được (như Word) False: Ngược lại Tương tự như thuộc tính CanUndo Một số phương thức thường dùng Tên Ý nghĩa AppendText Nối một chuỗi vào RitchTextBox Copy Xử lý phần nội dung bôi đen (như Word) Cut Paste Find Tìm kiếm một xâu trong RitchTextBox Focus Chuyển Focus vào RitchTextBox LoadFile Đọc nội dung một file vào RitchTextBox - 27 -
  • 28. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt SaveFile Ghi nội dung của RitchTextBox ra file Select Lấy ra một chuỗi trong RitchTextBox (tương tự TextBox) SelectAll Lấy tất cả nội dung của RitchTextBox Redo Xử lý Undo, Redo như Word Undo 2.5.6.4. Minh họa Giả sử có một Textbox có tên là richTextBox1. Chúng ta sẽ minh họa RitchTextbox qua sự kiện click của một Button có tên là btrichTextBox. Việc sử dụng các thuộc tính SelectedText, SelectionStart, SelectionLength, CanUndo, CanRedo tương tự như TextBox (Xem lại Code phần điều khiển TextBox) 2.5.6.4.1. Minh họa thuộc tính SelectionFont private void btRichTextBox_Click(object sender, EventArgs e) { //Sử dụng thuộc tính Font có thể lấy thông tin về Font của vùng Bôi đen (không phải tất cả) //Hoặc: Thay đổi Font của vùng bôi đen //Trước hết lấy thông tin về Font //InfoFont bao gồm tát cả các thông tin: Style, Tên Font... string InfoFont = richTextBox1.SelectionFont.ToString(); MessageBox.Show(InfoFont); //Chỉ lấy tên Font của vùng Bôi đen string FontName = richTextBox1.SelectionFont.Name.ToString(); MessageBox.Show("Vùng bôi đen có Font là: " + FontName); //Chỉ lấy Size của vùng Bôi đen string FontSize = richTextBox1.SelectionFont.Size.ToString(); MessageBox.Show("Vùng bôi đen có Size là: " + FontSize); - 28 -
  • 29. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt //................................................... } 2.5.6.4.2. Chọn Font cho vùng bôi đen thông qua thuộc tính SelectionFont (Chỉ vùng bôi đen) private void btRichTextBox_Click(object sender, EventArgs e) { FontDialog fo = new FontDialog(); //Hiển thị hộp thoại if (fo.ShowDialog() == DialogResult.OK) { //Nếu muốn đổi Font một đoạn lựa chọn thì dùng câu lệnh này richTextBox1.SelectionFont = fo.Font; //Còn nếu muốn đổi Font cho toàn bộ RichTextBox thì dùng câu lệnh này //richTextBox1.Font = fo.Font; } } 2.5.6.4.3. Minh họa thuộc tính SelectionColor private void btRichTextBox_Click(object sender, EventArgs e) { //Thuộc tính này lấy về màu của vùng được lựa chọn //Tương tự như thuộc tính SelectionFont string Color = richTextBox1.SelectionColor.Name.ToString(); MessageBox.Show(Color); } 2.5.6.4.4. Đặt màu cho vùng bôi đen thông qua thuộc tính SelectionColor private void btRichTextBox_Click(object sender, EventArgs e) { - 29 -
  • 30. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt ColorDialog cl = new ColorDialog(); //Hiển thị hộp thoại if (cl.ShowDialog() == DialogResult.OK) { //Nếu muốn đổi Font một đoạn lựa chọn thì dùng câu lệnh này richTextBox1.SelectionColor = cl.Color; } } 2.5.6.4.5. Việc sử dụng các phương thức: AppendText, Select, SelectAll, Undo, Redo, Undo tương tự như Textbox 2.5.6.4.6. Minh họa sử dụng phương thưc LoadFile private void btRichTextBox_Click(object sender, EventArgs e) { //Load nội dung File C:NET.rtf vào RitchTextBox //Tất nhiên ổ C của bạn phải tồn tại file C:NET.rtf richTextBox1.LoadFile(@"C:NET.rtf"); //-> Thường sử dụng cùng với điều khiển OpenFileDialog để mở một file trên máy } 2.5.6.4.7. Minh họa sử dụng phương thưc SavaFile private void btRichTextBox_Click(object sender, EventArgs e) { //Lưu nội dung RitchTextBox ra file richTextBox1.SaveFile(@"C:File.rtf") //-> Thường sử dụng cùng với điều khiển SaveFileDialog lưu file vào một nơi bất kì trên máy } 2.5.6.4.8. Minh họa Phương thức Find private void btRichTextBox_Click(object sender, EventArgs e) - 30 -
  • 31. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt { //Tìm kiếm một chuỗi trong RichTextBox -> nếu có thì bôi đen kết quả tìm thấy //Chú ý: Đặt thuộc tính HideSelection=False //rtfNoiDung.Find("Chào", 0, 100, RichTextBoxFinds.Reverse); //-> Ứng dụng trong tìm kiếm văn bản richTextBox1.Find("chào", 0, 100, RichTextBoxFinds.MatchCase); } → Sử dụng RitchTextBox viết chương trình soạn thảo văn bản đơn giản(tham khảo WordPad) 2.5.7. Nhóm điều khiển Menu 2.5.7.1. Điều khiển Menu Strip 2.5.7.1.1. Chức năng Điều khiển MenuStrip cho phép thiết kế hệ thống menu trên Form (menu một cấp hay nhiều cấp). Ví dụ hệ thống menu của chương trình Word, Visual Studio 2008….MenuStrip cho phép thiết kế menu với các điều khiển: ToolStripSeparator (Gạch phân cách) ToolStripMenuItem (Menu con). ToolStripCombobox (Combobox). ToolStripTextbox (Textbox) 2.5.7.1.2. Một số thuộc tính thường dùng Tên TextDirection Ý nghĩa Chọn hình thức trình bày Menu (quay ngược, quay - 31 -
  • 32. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt 900…) Items Thêm các menu con, kiểu của menu (Menu con, Textbox, Combobox, gạch phân cách). Thông qua giao diện đồ họa bạn có thể thêm các menu vào (tập các Items này là một Colleciton). RightToLeft Nhận một trong hai giá trị Yes hay No - Yes: trình bày menu từ phải qua trái No: trình bày menu từ trái qua phải 2.5.7.1.3. Một số thuộc tính thường dùng của ToolStripMenuItem Tên Checked CheckOnClick CheckState DisplayStyle Ý nghĩa - Nhận một trong hai giá trị True hay False True: cho phép xuất hiện biểu tượng Checkbox bên cạnh chuỗi Text của ToolStripMenuItem - False: Ngược lại Nhận một trong hai giá trị True hay False - True: Biểu tượng Checkbox xuất hiện bên cạnh chuỗi Text của ToolStripMenuItem (MenuItem) mỗi khi người dùng Click chọn vào nó - False: Ngược lại Trạng thái của Checkbox bên cạnh chuỗi Text của menu. Và nhận một trong 3 giá trị: UnChecked, Checked, Indeterminate (Chú ý: Thuộc tính Checked=True thì thuộc tính này mới có hiệu lực. Hiển nhiên rồi phải không? ☺) Hình thức trình bày của Menu và nhận một trong 4 giá trị - None: Không hiển thị gì cả (Text và Image) Text: Chỉ cho phép xuất hiện chuỗi mô tả Image: Chỉ cho phép xuất hiện ảnh( hoặc Icon) bên cạnh Text (xuất hiện ở phía ngoài cùng bên trái) ImageAndText=Image+Text - 32 -
  • 33. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt Image Hình ảnh xuất hiện bên cạnh chuỗi Text (chuỗi khai báo bên trong thuộc tính Text của MenuItem) ImageScaling Chọn hình thức trình bày của ảnh xuất hiện bên cạnh chuỗi. Và nhận một trong hai giá trị ShortcutKeyDisplayString - None: BÌnh thường SizeToFit: Hiển thị đúng kích cỡ của Image hay Icon. Chuỗi trình bày ứng với phím tắt mô tả cho MenuItem đó (Nối vào Text của MenuItem ví dụ: Open Ctrl+O) ShortcutKeys Chọn tổ hợp phím tắt ứng với MenuItem đó ShowShortcutKeys Nhận một trong hai giá trị True hay False - True: Cho phép trình bày chuỗi tổ hợp phím tắt của MenuItem (=True thì thuộc tính ShortcutKeyDisplayString mới có hiệu lực). - False: Ngược lại Chuỗi trình bày MenuItem, bạn có thể sử dụng kí tự & trước kí tự để sử dụng với phím Alt (phím nóng - phím tắt) Text TooltipText Chuỗi trợ giúp khi người dùng di chuyển chuột đến điều khiển MenuItem đó Visible 2.5.7.2. Điều khiển ContextMenuStrip 2.5.7.2.1. Chức năng Điều khiển ContextMenuStrip dùng để thiết kế menu popup (menu ngữ cảnh – menu xuất hiện khi người dùng nhấn chuột phải. Ví dụ: khi người dùng nhấn chuột phải vào Desktop xuất hiện một menu – đó chính là menu ngữ popup) . Để xuất hiện các menu Popup khi người dùng nhấn chuột phải vào các điều khiển (form, button, label, textbox…) bạn chỉ cần khai báo thuộc tính ContextMenuStrip của các điều khiển đó là một điều khiển ContextMenuStrip. Điều khiển ContextMenuStrip cho phép thiết kế menu với các điều khiển sau (tương tự như điều khiển MenuStrip). - 33 -
  • 34. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt ToolStripSeparator (Gạch phân cách) ToolStripMenuItem (Menu con). ToolStripCombobox (Combobox). ToolStripTextbox (Textbox) 2.5.7.2.2. Một số thuộc tính thường dùng Tên Ý nghĩa Items Thêm các mnu con, kiểu của menu (Menu con, Textbox, Combobox, gạch phân cách). Thông qua giao diện đồ họa bạn có thể thêm các menu vào (Collection) RightToLeft Nhận một trong hai giá trị True hay False ShowImageMargin True: Trình bày menu từ phải qua trái (căn lề là bên phải) - False: Trình bày menu từ trái qua phải (căn lề là bên trái) Hiển thị phần hình ảnh? - 2.5.8. Nhóm điều khiển Dialog 2.5.8.1. Điều khiển OpenFileDialog 2.5.8.1.1. Chức năng Điều khiển OpenFileDialog cho phép bạn chọn (select) tập tin đang tồn tại trên hệ thống, kiểm tra xem một tập tin có tồn tại hay không. Trong trường hợp bạn có nhu cầu chọn một Foder (chứ không phải File) thì bạn chọn điều khiển FolderBrowserDialog Ví dụ: Hộp thoại mở ra khi chúng ta chọn File → Open của chương trình Word hay Notepad… 2.5.8.1.2. Một số thuộc tính thường dùng Tên AddExtension Ý nghĩa - Nhận một trong hai giá trị True hay False - True: Cho phép thêm vào tên mở rộng (.txt, .jpg…) vào file False: Ngược lại - 34 -
  • 35. Đề cương môn học: Chuyên đề 01 CheckFileExists CheckPathExists DefaultExt Filter Biên soạn: Hoàng Quốc Việt - Nhận một trong hai giá trị True hay False True: Xuất hiện hộp cảnh báo nếu bạn nhập vào một tên file không tồn tại (nhập vào ô File name: trên hộp thoại OpenFileDialog ) - False: Ngược lại Nhận một trong hai giá trị True hay False - True: Kiểm tra đường dẫn tới file có hợp lệ hay không trước khi trả về. - False: Ngược lại Chọn tên mở rộng cho file (.txt, .jpg…) mặc định nếu người dùng không cung cấp tên mở rộng cho tập tin. Chọn bộ lọc cho hộp thoại (Chỉ chọn File nào). Ví dụ: File Text (*.txt)|*.txt| Word File (*.doc)|*.doc; FilterIndex Chọn số thứ tự cho bộ lọc (bộ lọc sẽ hiển thị trong mục Files Of Types) FileName Set or Get tên tệp tin bạn chọn FileNames Set or Get mảng chứa tệp tin chọn (trong trường hợp chọn nhiều tập tin) InitialDirectory Đường dẫn mặc định khi hộp thoại OpenFileDialog mở ra Multiselect Nhận một trong hai giá trị True hay False ReadOnlyChecked RestoreDirectory ShowReadOnly - True: Cho phép bạn chọn nhiều tập tin (ví du: Chọn nhiều bản nhạc để nghe…) - False: Ngược lại Nhận một trong hai giá trị True hay False - True: Check vào hộp thoại Checkbox Open as Read-Only bên dưới Combobox Files Of Types - False: Ngược lại (☻) (với điều kiện thuộc tính ShowReadOnly = True) Nhận một trong hai giá trị True hay False - True: Mở lại thư mục vừa mở ra lần trước, với điều kiện thuộc tính InitialDirectory không đặt gì - False: Không mở lại thư mục vừa mở lần trước Nhận một trong hai giá trị True hay False - True: Xuất hiện hộp Checkbox Open as Read-Only - 35 -
  • 36. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt bên dưới Combobox Files Of Types - False: Ngược lại Đặt tiêu đề (xuất hiện trên Titlebar) cho hộp thoại OpenFileDialog Title 2.5.8.1.3. Minh họa sử dụng điều khiển OpenFileDialog Giả sử chúng ta có một form có tên: frmOpenFileDialog, trên form có một điều khiển Textbox có tên Textbox1và một điều khiển OpenFileDialog có tên openFileDialog1. Chúng ta sử dụng hộp thoại OpenFileDialog để load nội dung một tệp text vào Textbox private void frmOpenFileDialog_Load(object sender, EventArgs e) { //Đặt một số thuộc tính bằng Code openFileDialog1.AddExtension = false; openFileDialog1.CheckFileExists = true; openFileDialog1.ReadOnlyChecked = true;//Check vào checkbox ->thuộc tính ShowReadOnly = true openFileDialog1.Filter = "File Text (*.txt)|*.txt| File Rtf (*.rtf)|*.rtf| All File|*.*"; openFileDialog1.FilterIndex = 0;//Chọn bộ lọc "File Text (*.txt)|*.txt" -> Chỉ chọn file Text openFileDialog1.FileName = "";//thay cho chuỗi openFileDialog1 xuất hiện trong hộp FileName openFileDialog1.InitialDirectory = "C:"; //Mở ổ C khi hộp thoại này hiển thị openFileDialog1.Multiselect = true; openFileDialog1.ShowReadOnly = true;//Xuất hiện Checkbox openFileDialog1.Title = "Cong nghe NET"; //Kiển tra hộp thoại có mở ra không - 36 -
  • 37. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt //Sử dụng phương thức ShowDialog() if (openFileDialog1.ShowDialog() == DialogResult.OK) { //Lấy về File bạn chọn. Giả sử tôi chọn File C:CongNgheNET.txt string FileBanChon = openFileDialog1.FileName; //Đọc file StreamReader sr = new StreamReader(FileBanChon); textBox1.Text = sr.ReadToEnd(); //Đóng luồng đọc sr.Close(); } } 2.5.8.2. Điều khiển SaveFileDialog 2.5.8.2.1. Chức năng Điều khiển SaveFileDialog cho phép bạn ghi một nội dung ra một tập tin (file) mới hay ghi đè lên tập tin đang tồn tại trên hệ thống của bạn. Ví dụ: Hộp thoại mở ra khi chúng ta chọn File → Save của chương trình Word, Notepad…. 2.5.8.2.2. Mốt số thuộc tính thường dùng Tên AddExtension CheckFileExists Ý nghĩa - Nhận một trong hai giá trị True hay False True: Cho phép thêm vào tên mở rộng (.txt, .jpg…) - False: Ngược lại Nhận một trong hai giá trị True hay False - True: Xuất hiện hộp cảnh báo nếu bạn nhập vào một tên file không tồn tại (nhập vào ô File name: trên hộp thoại SaveFileDialog ) - 37 -
  • 38. Đề cương môn học: Chuyên đề 01 CheckPathExists Biên soạn: Hoàng Quốc Việt - False: Ngược lại Nhận một trong hai giá trị True hay False - True: Kiểm tra đường dẫn tới file có hợp lệ hay không trước khi trả về. - False: Ngược lại Chọn bộ lọc cho hộp thoại (Chỉ chọn File nào). Ví dụ: Filter File Text (*.txt)|*.txt| Word File (*.doc)|*.doc; FilterIndex Chọn số thứ tự cho bộ lọc (bộ lọc sẽ hiển thị trong mục Files Of Types) FileName Set or Get tên tệp tin InitialDirectory Đường dẫn mặc định khi hộp thoại SaveFileDialog mở ra RestoreDirectory Nhận một trong hai giá trị True hay False - True: Mở lại thư mục vừa mở ra lần trước, với điều kiện thuộc tính InitialDirectory không đặt gì - False: Không mở lại thư mục vừa mở lần trước Đặt tiêu đề (xuất hiện trên Titlebar) cho hộp thoại SaveFileDialog Title ShowHelp Cho phép xuất hiện Button Help (?) hay không? OverwritePrompt Xuất hiện cảnh báo nếu bạn ghi đè vào một tập tin đã tồn tại 2.5.8.2.3. Minh họa sử dụng điều khiển SaveFileDialog Giả sử chúng ta có một form có tên: frmSaveFileDialog, trên form có một điều khiển Textbox có tên Textbox1và một điều khiển SaveFileDialog có tên saveFileDialog1. Chúng ta sử dụng hộp thoại SaveFileDialog để ghi nội dung Textbox vào một tệp Text qua sự kiện Click của một Button có tên btSave private void btSave_Click(object sender, EventArgs e) { //Đặt một số thuộc tính bằng Code saveFileDialog1.AddExtension = true;//Cho phép thêm vào tên mở rộng saveFileDialog1.OverwritePrompt = true;//Xuất hiện cảnh báo nếu tập tin đã - 38 -
  • 39. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt tồn tại saveFileDialog1.DefaultExt = "txt";//Chạy nếu: saveFileDialog1.AddExtension = true saveFileDialog1.CheckPathExists = true;//Kiểm tra đường dẫn có hợp lệ hay không saveFileDialog1.FileName = ""; saveFileDialog1.Filter = "Text File (*.txt)|*.txt"; saveFileDialog1.FilterIndex = 0; //saveFileDialog1.InitialDirectory = "C:";//Chọn đường dẫn khi hộp thoại mở ra saveFileDialog1.RestoreDirectory = true;//ĐK không đặt saveFileDialog1.InitialDirectory saveFileDialog1.ShowHelp = true; saveFileDialog1.Title = "Cong nghe NET"; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { //Lấy nội dung cần ghi string strNoiDung=textBox1.Text; //Lấy ra tên file cần ghi string strFileSave = saveFileDialog1.FileName; //Ghi file StreamWriter sw = new StreamWriter(strFileSave); sw.Write(strNoiDung); //đóng luồng sw.Close(); }//ví dụ rất đơn giản 2.5.8.3. Điều khiển FolderBrowerDialog - 39 -
  • 40. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt 2.5.8.3.1. Chức năng Điều khiển FolderBrowserDialog cho phép người dùng chọn (Select) thư mục đang tồn tại trong hệ thống, đồng thời có thể tạo mới thư mục ngay trong thư mục đang chọn (Chú ý: Điều khiển OpenFileDialog chỉ cho phép chọn file). 2.5.8.3.2. Một số thuộc tính thường dùng Tên Ý nghĩa Description Chuỗi mô tả về hộp thoại, xuất hiện bên dưới khung Title RootFolder Thư mục mặc định chọn khi hộp thoại mở ra. Bao gồm rất nhiều lựa chọn có sẵn SelectedPath Trả về tên thư mục (cả đuờng dẫn đầy đủ) mà người sử dụng chọn (các bạn chú ý thuộc tính này) ShowNewFolderButton Nhận một trong hai giá trị True hay False - True: Xuất hiện Buttons Make New Folder cho phép người dùng tạo ra thư mục mới trong thư mục bạn chọn False: Ngược lại 2.5.8.3.3. Minh họa sử dụng điều khiển Chúng ta minh họa sử dụng điều khiển FolderBrowsersDialog qua ứng dụng tạo Slide ảnh. Giả sử chúng ta có một form có tên: frmFolderBrowserDialog, trên form có chứa một số điều khiển sau: PictureBox có tên pictureBox1 để hiển thị ảnh Điều khiển folderBrowserDialog có tên folderBrowserDialog1 dùng để chọn thư mục chứa ảnh Điều khiển Timer có tên timer1 Button có tên btOpen //Khai báo mảng string[] MangAnh = null; int Index = 0; int CountImage; //Load private void frmFolderBrowserDialog_Load(object sender, EventArgs e) { - 40 -
  • 41. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt this.WindowState = FormWindowState.Maximized; pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; } //Mở thư mục chứa các File ảnh private void btOpen_Click(object sender, EventArgs e) { if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) { //Khai báo các mảng để chứa các ảnh khác nhau: jpg, jpeg string[] MangAnhJpg = null, MangAnhJpeg = null, MangAnhBitmap = null; //Lấy ra các phần tử của mảng bảng cách dùng lớp Directory //Ở đây tôi chọn thư mục: D:Pictures chứa rất nhiều ảnh của tôi MangAnhJpg = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.jpg");//CHÚ Ý CÂU LỆNH NÀY MangAnhJpeg = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.jpeg");//CHÚ Ý CÂU LỆNH NÀY MangAnhBitmap = Directory.GetFiles(folderBrowserDialog1.SelectedPath, "*.bmp");//CHÚ Ý CÂU LỆNH NÀY //Lấy ra chiều dài mảng int i = MangAnhJpg.Length; int j = MangAnhJpeg.Length; int k = MangAnhBitmap.Length; //Khai báo mảng mới là tổ hợp của 3 mảng MangAnh = new string[i+j+k]; //CHÚ Ý CÂU LỆNH NÀY //Xử lý về mảng Array.Copy(MangAnhJpg, 0, MangAnh, 0,i); //CHÚ Ý CÂU LỆNH NÀY Array.Copy(MangAnhJpeg, 0, MangAnh, i, j); //CHÚ Ý CÂU LỆNH NÀY Array.Copy(MangAnhBitmap, 0, MangAnh, i+j, k); //CHÚ Ý CÂU LỆNH NÀY //3 CÂU LỆNH NÀY ĐÚNG LOGIC CHƯA????? ^_^ ☺ //Lấy ra số ảnh CountImage = MangAnh.Length; //Hết ForEach timer1.Enabled = true; } } - 41 -
  • 42. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt //Chú ý: Đặt thuộc tính cho Timer //Enabled=true //Interval=2000 > sau 2 giây chuyển sang ảnh tiếp theo private void timer1_Tick(object sender, EventArgs e) { //Khai bào Image > Chú ý câu lệnh này Image img = Image.FromFile(MangAnh[Index]); //Hiển thị nên Picture pictureBox1.Image = img; //Chuyển đến ảnh tiếp theo Index++; if (Index >= End) Index = 0; } 2.5.9. ListView 2.5.9.1. Chức năng Điều khiển ListView dùng để trình bày các phần tử dạng danh sách với nhiều hình dạng khác nhau. 2.5.9.2. Một số khái niệm liên quan đến ListView Hình 1: Minh họa về ListView - 42 -
  • 43. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt Hình 2: Cột trong ListView Hình 3: Khái niệm ColumnHeader - 43 -
  • 44. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt Hình 4: Khái niệm ListViewItem Hình 5: Khái niệm SubItems - 44 -
  • 45. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt Hình 6: Minh họa về Group 2.5.9.3. Một số thuộc tính thường dùng Tên CheckBoxes Ý nghĩa Nhận một trong hai giá trị True hay False (mặc định là False) Columns - True: Hiển thị một checkbox bên cạnh phần tử đầu tiên của mỗi hàng (1 hàng = 1 ListviewItem) trong Listview False: Ngược lại Tập các cột trong ListView là một Collection. Thông qua thuộc tính này có thể thêm các cột vào Listview (Có thể thêm các cột vào Listview thông qua giao diện đồ họa hay có thể viết Code. Chú ý: Phải đặt thuộc tính View là Detail thì bạn mới có thể nhìn thấy các cột này) ContextMenuStrip Gắn một menu ngữ cảnh với điều khiển ListView (khi nhấn chuột phải vào Listview thì sẽ hiển thị menu này) FullRowSelect Nhận một trong hai giá trị True hay False - 45 -
  • 46. Đề cương môn học: Chuyên đề 01 GridLines Group - Biên soạn: Hoàng Quốc Việt True: Cho phép chọn (bôi đen) cả hàng (của phần tử đang được chọn. Chú ý: Thuộc tính View = Detail) False: Ngược lại Nhận một trong hai giá trị True hay False - True: Hiển thị lưới bao quanh và ngăn cách các hàng (Chỉ có hiệu lực nếu thuộc tính View = Detail) False: Ngược lại Khai báo nhóm để phân loại các phần tử sau khi trình bày trên điều khiển Listview HeaderStyle Đây là thuộc tính cho phép chọn Style cho Listview trong chế độ View là Report Items Là một Collection. Cho phép tạo ra các giá trị cho các hàng, cột trong Listview (tất nhiên có thể dùng giao diện đồ họa hay viết Code) LabelEdit LabelWap MultiSelect Nhận một trong hai giá trị True hay False - True: Cho phép thay đổi (sửa) Text của các phần tử (các Ô). False: Ngược lại Nhận một trong hai giá trị True hay False - True: Chuỗi DHSPKTHY sẽ tự động xuống hàng khi chiều dài không đủ để trình bày False: Ngược lại Nhận một trong hai giá trị True hay False - True: Cho phép chọn nhiều (ListviewItem). Mặc định là True False: Không cho phép chọn nhiều hàng - 46 - hàng
  • 47. Đề cương môn học: Chuyên đề 01 LargeImageList Biên soạn: Hoàng Quốc Việt Đối tượng ImageList chứa danh sách các Image theo chỉ số (Index) từ 0 đến n-1. Được sử dụng nếu thuộc tính View là LargeIcon SmallImageList Đối tượng ImageList chứa danh sách các Image theo chỉ số (index) từ 0 đến n-1. Được sử dụng nếu thuộc tính View là SmallIcon Scrollable Sorting Nhận một trong hai giá trị True hay False - True: Cho phép xuất hiện thanh trượt trong Listview (Khi số ListViewItem nhiều và vượt qua chiều cao của ListView) False: Ngược lại Sắp xếp giá trị các hàng (ListViewItem) trong ListView (Chỉ có hiệu lực nếu thuộc tính View là Detail). Thuộc tính này nhận một trong các giá trị sau None: Không Sắp xếp Ascending: Sắp xếp tăng Descending: Sắp xếp giảm SelectedItems Trả về danh sách các phần tử được chọn (bôi đen) CheckedItems Trả về danh sách các phần tử được check (tất nhiên thuộc tính CheckBoxes = True) View Các kiểu Hiển thị trên ListView. Thuộc tính View có thể nhận một số giá trị sau: LargeIcon SmallIcon List Detail Title → Mặc định là: LargeIcon - 47 -
  • 48. Đề cương môn học: Chuyên đề 01 2.5.9.4. Biên soạn: Hoàng Quốc Việt Một số phương thức thường dùng Tên Ý nghĩa Clear Xóa tất cả ListView RemoveAt Xóa bỏ một cột có chỉ số (ở vị trí) nào đó ……………………………… 2.5.9.5. Một số sự kiện thường dùng Tên SelectedIndexChanged Ý nghĩa Xảy ra khi người sử dụng thay đổi phần tử được chọn trong ListView ItemActivate Xảy ra khi chọn phần tử trên ListView ItemChecked Khi Check vào biểu tượng Checkbox của mỗi phần tử trên điều khiển ListView 2.5.9.6. Minh họa Giả sử chúng ta có một form có tên: frmListView. Trên đó có chứa một số điều khiển sau: Điều khiển ListView có tên listView1 (Chúng ta để tất cả các thuộc tính của listView1 với giá trị mặc định). Button btCheck: minh họa việc duyệt các hàng được check trên ListView Buttonbt RemoveAtColumns: Minh họa xóa một cột trong ListView Buttonbt RemoveAtItems: Minh họa xóa một hàng trong ListView Buttonbt ShowFile: Minh họa hiển thị tất cả các file trong một thư mục nên ListView Button btGroup: Minh họa về Group trong ListView Chúng ta sẽ minh họa sử dụng ListView qua sự kiện Click của các button trên. - 48 -
  • 49. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt 2.5.9.6.1. Tạo các cột, hàng cho ListView bằng code private void frmListView_Load(object sender, EventArgs e) { //Đặt một số thuộc tính cho điều khiển ListView1 bằng code //Bạn chỉ có thể nhìn thấy các cột nếu đặt thuộc tính View=Detail listView1.View = View.Details; listView1.GridLines = true; listView1.CheckBoxes = true;//Hiển thị checkbox: các bạn xem kết quả ở hinhg minh họa. //Thêm 4 cột vào Listview //Có thể thêm cột vào ListView theo cách này listView1.Columns.Add("Họ và tên", 100, HorizontalAlignment.Center); listView1.Columns.Add("Quê quán", 100, HorizontalAlignment.Center); listView1.Columns.Add("Lớp", 100, HorizontalAlignment.Center); //Cách 2: Có thể thêm vào theo cách này: Sử dụng ColumnHeader ColumnHeader ch = new ColumnHeader("chNgaySinh"); ch.Text = "Ngày sinh"; ch.TextAlign = HorizontalAlignment.Center; ch.Width = 100; listView1.Columns.Add(ch); //Thêm hàng thứ nhất vào ListView string[] Them = new string[] { "Nguyễn Văn Hải", "Hưng Yên", "TK4N1", "29-03-1987" }; ListViewItem lv = new ListViewItem(Them); listView1.Items.Add(lv); - 49 -
  • 50. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt //Thêm hàng thứ 2 string[] Them2 = new string[] { "Nguyễn Văn Hạnh", "Hà Nội", "TK4N1", "24-04-1987" }; ListViewItem lv2 = new ListViewItem(Them2); listView1.Items.Add(lv2); //Thêm hàng thứ 3 string[] Them3 = new string[] { "Phạm Thị Hạnh", "Hải Dương", "TK4N1", "04-10-1988"}; ListViewItem lv3 = new ListViewItem(Them3); listView1.Items.Add(lv3); //Thêm hàng thứ 4 string[] Them4 = new string[] { "Vũ Thị Hảo", "Bắc Ninh", "TK4N1", "25-12-1987" }; ListViewItem lv4 = new ListViewItem(Them4); listView1.Items.Add(lv4); } → Sau khi chạy có hình như sau: - 50 -
  • 51. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt 2.5.9.6.2. Duyệt xem những hàng nào được Check private void btCheck_Click(object sender, EventArgs e) { //Bạn phải tạo ra một Listview như mục 7.1 trước đã MessageBox.Show("Tên các sinh viên được Check là","Check",MessageBoxButtons.OK); //Duyệt các phần tử được Check thông qua thuộc tính CheckedItems foreach (ListViewItem lvi in listView1.CheckedItems) { //Lấy về phần tử thứ mấy (ô thứ mấy) của ListViewItem (của 1 hàng): sử dụng SubItems //DataGridView <-> ListView MessageBox.Show(lvi.SubItems[0].Text); } //Giờ thì bạn chạy và check thử vài hàng để thấy rõ kết quả } 2.5.9.6.3. Xóa một Cột tại vị trí nào đó private void btRemoveAtColumns_Click(object sender, EventArgs e) { //Chú ý: Tập các column trong Listview là một Collection nên có đầy đủ các phương thức của một Collection. //Ví dụ: Xóa một cột ở vị trí nào đó listView1.Columns.RemoveAt(1); //Giờ thì bạn chạy và nhấn vào Button này để thấy kết qủa để xem các kết quả } - 51 -
  • 52. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt Hình 7.2: Columns ↔ Collection 2.5.9.6.4. Xóa một hàng tại một vị trí nào đó → Hoàn toàn tương tự như xóa một cột private void btRemoveAtItems_Click(object sender, EventArgs e) { //Chú ý: Tập các Items trong Listview là một Collection nên có đầy đủ các phương thức của một Collection. //Ví dụ: Xóa một cột ở vị trí nào đó (tất nhiên bạn phải tạo ra một listview với các giá trị như mục 7.1) listView1.Items.RemoveAt(1); //Giờ thì bạn chạy và nhấn vào Button này để xem các kết quả } - 52 -
  • 53. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt Hình 7.4: Items ↔ Collection 2.5.9.6.5. Duyệt tất cả các file trong một thư mục và hiển thị nên ListView private void btShowFile_Click(object sender, EventArgs e) { //Listview (listView1) này hiển thị tất cả các File trong C:WINDOWS //Bạn có thể dùng hộp thoại FolderBrowserDialog để duyệt file trong thư mục bất kì mà bạn chọn //Phương thức Clear xóa toán bộ Listview listView1.Clear(); //Chọn một số thuộc tính cho Listview thông qua mã lệnh listView1.View = View.Details; listView1.FullRowSelect = true;//Cho phép chọn cả hàng như hình kết quả dưới listView1.GridLines = true; //Add các cột vào Listview bằng mã lệnh //Mỗi file có các đặc tính của file: Tên, kích thước, kiểu file (ReadOnly, System...) nên chúng ta tạo ra các cột tương ứng listView1.Columns.Add("Number", 100, HorizontalAlignment.Left); listView1.Columns.Add("Name", 300, HorizontalAlignment.Left); - 53 -
  • 54. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt listView1.Columns.Add("Size", 150, HorizontalAlignment.Left); listView1.Columns.Add("Type", 100, HorizontalAlignment.Left); //Nên khai báo đổi tượng DirectoryInfo để duyệt file //DirectoryInfo là một lớp nằm trong System.IO DirectoryInfo dir = new DirectoryInfo(@"C:WINDOWS"); //Khai báo i để lấy về Số thứ tự file: 1, 2, 3.... int i = 0; //Khai báo một ListviewItem - Một Hàng ListViewItem lvi; //Duyệt File () foreach (FileInfo f in dir.GetFiles("*.*")) { //Tăng giá trị i nên 1 i++; //Gán các thành phần cho lvi qua thuộc tính SubItems.Add lvi = new ListViewItem(i.ToString()); lvi.SubItems.Add(f.Name); lvi.SubItems.Add(f.Length.ToString()); lvi.SubItems.Add(f.Attributes.ToString()); //Sau khi đã gán phải Add vào Listview listView1.Items.Add(lvi); } //Hết - 54 -
  • 55. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt } Hình 7.5: Kết quả sau khi nhấn vào Button Show File 2.5.9.6.6. làm việc với Group trong ListView private void btGroup_Click(object sender, EventArgs e) { //Ý tưởng: Chúng ta muốn đưa tất cả các file có cùng thuộc tính vào một nhóm //làm việc với nhóm các bạn chú ý đối tượng ListViewGroup //Xóa Listview trướcđã listView1.Clear(); //Đặt một số thuộc tính bằng Code listView1.View = View.Details; //Khai báo 3 nhóm ListViewGroup gArchive; ListViewGroup gSystem; ListViewGroup gNormal; - 55 -
  • 56. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt //Add các cột vào Listview bằng mã lệnh listView1.Columns.Add("Number", 100, HorizontalAlignment.Left); listView1.Columns.Add("Name", 300, HorizontalAlignment.Left); listView1.Columns.Add("Size", 150, HorizontalAlignment.Left); listView1.Columns.Add("Type", 100, HorizontalAlignment.Left); //Add 3 nhóm - Group vào Listview gArchive = new ListViewGroup("Archive"); gSystem = new ListViewGroup("System"); gNormal = new ListViewGroup("Normal"); listView1.Groups.Add(gArchive); listView1.Groups.Add(gSystem); listView1.Groups.Add(gNormal); //Listview này hiển thị tất cả các File trong C:WINDOWS //Nên khai báo đổi tượng DirectoryInfo DirectoryInfo dir = new DirectoryInfo(@"C:WINDOWS"); //Khai báo i để lấy về Số thứ tự file: 1, 2, 3.... int i = 0; string ThuocTinhFile = ""; //Khai báo một ListviewItem-Một Hàng ListViewItem lvi; //Duyệt file và đưa vào Group các file cùng thuộc tính foreach (FileInfo f in dir.GetFiles("*.*")) { - 56 -
  • 57. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt i++; //Gán các thành phần cho lvi qua thuộc tính SubItems.Add lvi = new ListViewItem(i.ToString()); lvi.SubItems.Add(f.Name); lvi.SubItems.Add(f.Length.ToString()); //Lấy về thuộc tính tập tin và xử lý ThuocTinhFile = f.Attributes.ToString(); lvi.SubItems.Add(ThuocTinhFile); //Nhóm tập tin Archive if (ThuocTinhFile.StartsWith("Archive")) gArchive.Items.Add(lvi); //Nhóm tập tin Archive if (ThuocTinhFile.StartsWith("System")) gSystem.Items.Add(lvi); //Nhóm tập tin Archive if (ThuocTinhFile.StartsWith("Normal")) gNormal.Items.Add(lvi); //Sau khi đã gán phải Add vào Listview listView1.Items.Add(lvi); } //Hết- Kết quả xem hình dưới } - 57 -
  • 58. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt Hình 7.6: Group 2.5.9.6.7. Lấy về giá trị của một ô (SubItems) bất kì nào đó trên ListView (sự kiện listView1_ItemActivate) Giả sử chúng ta có hình như sau: Chúng ta muốn lấy thông tin về sinh viên “Phạm Thị Hạnh” bạn có thể sử dụng đoạn code sau: private void listView1_ItemActivate(object sender, EventArgs e) { ListViewItem lvi = listView1.FocusedItem; - 58 -
  • 59. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt MessageBox.Show(lvi.Text);//Lấy ra giá trị ô text đầu tiên //Lấy về cột thứ 1 - Cột Quê quán (Cột trông ListView có chỉ số bắt đầu = 0) string Cot1 = lvi.SubItems[1].Text; MessageBox.Show("Giá trị cột thứ 1: " + Cot1); //Lấy về cột thứ 2 - Cột Lớp string Cot2 = lvi.SubItems[2].Text; MessageBox.Show("Giá trị cột thứ 2: " + Cot2); //Giờ thì bạn chạy và Click vào một hàng xem để xem kết quả //Ứng dụng: Thường ứng dụng trong lập trình CSDL: Hiển hị tất cả các các thông tin (sinh viên chả hạn) //nên ListView. khi người dùng chọn một hàng trên ListView thì hiển thị các giá trị tương ứng nên //Các Textbox. khi đó bạn có thể chỉnh sửa các thông tin và Update vào CSDL.... //................ } - 59 -
  • 60. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt 2.5.10. DataGridView 2.5.10.1. Chức năng Điều khiển DataGridView dùng để hiển thị dữ liệu. 2.5.10.2. Một số khái niệm liên quan đến DataGridView Hình 1: Ví dụ về DataGirdView Hình 2: Khái niệm Columns trong DataGridView - 60 -
  • 61. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt Hình 3: Khái niệm về Rows trong DataGridView Hình 4: Khái niệm về Cells trong DataGridView → DataGridView ≡ Mảng 2 chiều → Có 2 cách để truy xuất đến một ô (để lấy giá trị) trong DataGridView (các bạn chú ý hai câu lệnh này) Cách 1: Tên_DataGridView[Chỉ_số_cột, Chỉ_số_hàng].Value - 61 -
  • 62. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt Cách 2: Tên_DataGridView.Rows[Chỉ_số_hàng].Cells[Chỉ_số_Cột].Value Ví dụ: Có một DataGridView như sau: Chúng ta muốn lấy giá trị của một ô bôi đen chúng ta có thể sử dụng câu lệnh sau (tên của DataGridView là: dgSinhVienTK4): string str = dgSinhVienTK4[0, 2].Value.ToString(); Hoặc string str = dgSinhVienTK4.Rows[2].Cells[0].Value.ToString(); 2.5.10.3. Một số thuộc tính thường dùng Tên AutoSizeColumnsMode Ý nghĩa Các kiểu lựa chọn với Cột (Đặt các chế độ khác nhau) AutoSizeRowsMode Các kiểu lựa chọn với Hàng (Đặt các chế độ khác nhau) BackGroundColor Chọn mầu nền cho DataGridView BorderStyle Đặt kiểu đường viền ngoài bao quanh cho DataGridView CellBorderStyle Đặt đường viền cho các ô - 62 -
  • 63. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt ColumnHeadersBorderStyle ColumnHeadersHeight ColumnHeadersVisible Nhận một trong hai giá trị True hay False - Columns True: Cho phép hiển thị tiêu đề các cột False: Không cho phép hiển thị tiêu để các cột Làm việc với cột (Đặt tiêu đề cho Headers, lựa chọn kiểu cột (Checkbox, Button, Image…). → Trong DataGridView một cột có thể là: Cột các Button, Cột các Checkbox… DataMember Chọn cơ sở dữ liệu để hiển thị nên DataGridView DataSource Chọn nguồn dữ liệu cho DataGridView (hai thuộc tính DataSource và DataMember hay đi với nhau) GridColor Chọn màu cho lưới (các hàng, các cột được ngăn cách nhau bởi lưới) MultiSelect Cho phép/Không cho phép chọn nhiều dòng? ReadOnly Nhận một trong hai giá trị True hay False - True: Cho phép thay đổi giá trị các các phần tử (các ô hay các Cell). False: không cho phép thay đổi giá trị các phần tử. RowHeadersBorderStyle Chọn kiểu viền cho các Hàng (Rows). RowHeaderVisible Nhận một trong hai giá trị True hay False - True: Cho phép hiển thị Headers của hàng(Cột đầu tiên ở mép ngoài bên trái) - 63 -
  • 64. Đề cương môn học: Chuyên đề 01 2.5.10.4. Một số sự kiện thường dùng - Tên CellClick Biên soạn: Hoàng Quốc Việt False: Ngược lại Ý nghĩa Xảy ra khi người dùng nhấn chọn một ô bất kì nào đó trên DataGridView (tất nhiên DataGridView phải có dữ liệu) Chú ý: Trong DataGridView thì khái niệm Ô ≡ Cell ……………………………… 2.5.10.5. Minh họa - 64 -
  • 65. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt Giả sử chúng ta có một form có tên: frmDataGridView. Trên đó có chứa một số điều khiển sau: Điều khiển DataGridView có tên dataGridView1(Chúng ta để tất cả các thuộc tính của dataGridView1với giá trị mặc định). Button btCreate: minh họa việc tạo DataGridView với số hàng và số cột xác định Button btRemove: Minh họa xóa một cột, một hàng trong DataGridView Button btGet: Minh họa việc lấy số hàng và số cột trong DataGridView Button btAddCombobox: Minh họa việc Add một cột là Combobox vào DataGridView Button btAddCheck: Minh họa việc Add một cột là Checkbox vào DataGridView Giao diện của chương trình như sau: Chúng ta sẽ minh họa sử dụng DataGridView qua sự kiện Click của các button trên. 2.5.10.5.1. Tạo các cột trong DataGridView (bằng Code) //Sự kiện Load của Form private void frmDataGridView_Load(object sender, EventArgs e) { //Đặt thuộc tính cho DataGridView thông qua mã lệnh dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;//Chú ý thuộc tính này //Để thêm các cột vào DataGridView bạn có thể thêm thông qua thuộc tính - 65 -
  • 66. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt COLUMNS trên hộp thoại Properties //Hoặc bạn có thể thêm bằng Code dataGridView1.Columns.Add("clName", "Họ và Tên"); dataGridView1.Columns.Add("clQueQuan", "Quê quán"); dataGridView1.Columns.Add("clLop", "Lớp"); dataGridView1.Columns.Add("clNgaySinh", "Ngay sinh"); //Thêm một hàng mới vào (hàng mới này chưa có dữ liệu gì) dataGridView1.Rows.Add(); //Đưa dữ liệu vào hàng mới vừa tạo ra (Đặt giá trị cho một ô) -> Các bạn chú ý có hai cách như thế này dataGridView1[0, 0].Value = "Nguyễn Văn Hải"; dataGridView1.Rows[0].Cells[1].Value = "Hưng Yên"; dataGridView1[2, 0].Value = "TK4N1"; dataGridView1.Rows[0].Cells[3].Value = "29-03-1987"; } //Hết → sau khi chạy chương trình: form frmDataGridView sẽ có kết quả như sau: 2.5.10.5.2. Đặt số hàng và số cột cho DataGridView //Sự kiện Load của Form - 66 -
  • 67. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt private void btCreate_Click(object sender, EventArgs e) { //Đặt số hàng và số cột cho DataGridView (Ví dụ: thiết kế trong chơi cờ Caro) //Ví dụ: Tạo một DataGridView với 50 hàng và 50 Cột dataGridView1.ColumnCount = 50; //Chú ý thuộc tính này dataGridView1.RowCount = 50; //Chú ý thuộc tính này //Thiết lập độ rộng cho các Ô for (int i = 0; i < 50; i++) { dataGridView1.Columns[i].Width = 15; dataGridView1.Rows[i].Height = 15; } } //Đã xong rồi. Giờ thì bạn chạy xem nào 2.5.10.5.3. Xóa một hàng (hay 1 cột, hay tất cả các hàng các cột) của DataGridView private void brRemove_Click(object sender, EventArgs e) { //Tập các hàng, các cột trong DataGridView là một Collection //Nên nó có đầy đủ các thuộc tính và phương thức của một Collection //Xóa hàng thứ 1 (có chỉ số là 0) dataGridView1.Rows.RemoveAt(0); //Xóa tất cả các hàng: dataGridView1.Rows.Clear(); //Tất nhiên nếu chúng ta có 2 hàng thì chúng ta không thể thực hiện câu lệnh: dataGridView1.Rows.RemoveAt(2); //Xóa cột thứ 2 (có chỉ số là 1) dataGridView1.Columns.RemoveAt(1); //Xóa tất cả các Cột: - 67 -
  • 68. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt dataGridView1.Columns.Clear(); } Rows ↔ Collection Columns ↔ Collection 2.5.10.5.4. Lấy về số hàng và số cột hiện có của DataGridView private void btGet_Click(object sender, EventArgs e) { //Lấy về số hàng và số cột int i = dataGridView1.Rows.Count; //Lấy về số hàng - 68 -
  • 69. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt int j = dataGridView1.Columns.Count;//Lấy về số cột //Thông báo string HC = "Số hàng: " + i.ToString() +'n' + "Số cột: " + j.ToString(); MessageBox.Show(HC); } 2.5.10.5.5. Add thêm một cột là Combobox vào DataGridView private void frmDataGridView_Load(object sender, EventArgs e) { //Đặt thuộc tính cho DataGridView thông qua mã lệnh dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;//Chú ý thuộc tính này //Để thêm các cột vào DataGridView bạn có thể thêm thông qua thuộc tính COLUMNS trên hộp thoại Properties //Hoặc bạn có thể thêm bằng Code dataGridView1.Columns.Add("clName", "Họ và Tên"); dataGridView1.Columns.Add("clQueQuan", "Quê quán"); dataGridView1.Columns.Add("clLop", "Lớp"); dataGridView1.Columns.Add("clNgaySinh", "Ngay sinh"); //Thêm một hàng mới vào (hàng mới này chưa có dữ liệu gì) dataGridView1.Rows.Add(); //Đưa dữ liệu vào hàng mới vừa tạo ra (Đặt giá trị cho một ô) -> Các bạn chú ý có hai cách như thế này dataGridView1[0, 0].Value = "Nguyễn Văn Hải"; dataGridView1.Rows[0].Cells[1].Value = "Hưng Yên"; - 69 -
  • 70. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt dataGridView1[2, 0].Value = "TK4N1"; dataGridView1.Rows[0].Cells[3].Value = "29-03-1987"; } //Phương thức đưa dữ liệu vào Combobox private static void AddData(ref DataGridViewComboBoxColumn comboboxColumn) { { comboboxColumn.Items.AddRange( new string[] { "SV1", "SV2", "SV3"}); } } // Add thêm một cột là Combobox vào DataGridView!!! private void btAddCombobox_Click(object sender, EventArgs e) { //Khai báo mảng làm DataSource cho Combobox string[] Mang = { "SV1", "SV2", "SV3" }; //Khai báo một cột thuộc kiểu Combobox DataGridViewComboBoxColumn comboboxColumn = new DataGridViewComboBoxColumn(); //Đặt thông số và đưa dữ liệu vào Combobox comboboxColumn.HeaderText = "Cột Combobox"; AddData(ref comboboxColumn);// Câu lệnh này<>comboboxColumn.DataSource = Mang; //Câu lệnh Insert này đưa cột vào vị trí đầu của DataGridView dataGridView1.Columns.Insert(0, comboboxColumn); - 70 -
  • 71. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt // Add một cột vào vị trí cuối cùng của DataGridView (Chưa có dữ liệu). comboboxColumn = new DataGridViewComboBoxColumn(); comboboxColumn.HeaderText = "Cột Combobox "; dataGridView1.Columns.Add(comboboxColumn); //Sử dụng phương thức Add mà chưa có thông số comboboxColumn.DisplayIndex = 3; //Thì mặc định đưa vào cuối DataGridView còn nếu có //comboboxColumn.DisplayIndex = 3; thì đưa vào cột 3 } → Sau khi chạy có kết quả như sau: 2.5.10.5.6. Add thêm một cột là Checkbox vào DataGridView //Sự kiện Load của Form private void frmDataGridView_Load(object sender, EventArgs e) { //Đặt thuộc tính cho DataGridView thông qua mã lệnh dataGridView1.AutoSizeColumnsMode = - 71 -
  • 72. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt DataGridViewAutoSizeColumnsMode.Fill;//Chú ý thuộc tính này //Để thêm các cột vào DataGridView bạn có thể thêm thông qua thuộc tính COLUMNS trên hộp thoại Properties //Hoặc bạn có thể thêm bằng Code dataGridView1.Columns.Add("clName", "Họ và Tên"); dataGridView1.Columns.Add("clQueQuan", "Quê quán"); dataGridView1.Columns.Add("clLop", "Lớp"); dataGridView1.Columns.Add("clNgaySinh", "Ngay sinh"); //Thêm một hàng mới vào (hàng mới này chưa có dữ liệu gì) dataGridView1.Rows.Add(); //Đưa dữ liệu vào hàng mới vừa tạo ra (Đặt giá trị cho một ô) -> Các bạn chú ý có hai cách như thế này dataGridView1[0, 0].Value = "Nguyễn Văn Hải"; dataGridView1.Rows[0].Cells[1].Value = "Hưng Yên"; dataGridView1[2, 0].Value = "TK4N1"; dataGridView1.Rows[0].Cells[3].Value = "29-03-1987"; } //Add private void btAddCheckbox_Click(object sender, EventArgs e) { DataGridViewCheckBoxColumn ch = new DataGridViewCheckBoxColumn(); { ch.HeaderText = "Check"; //Chọn vị trí hiển thị của cột: Cột thứ 0, 1 hay 2... ch.DisplayIndex = 3; - 72 -
  • 73. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt //Có cho phép Chọn nhiều hay không? (Chỉ Check được vào một Checkbox) ch.FalseValue = true; //Nếu cho phép chọn nhiều thì dùng lệnh này: ch.TrueValue = true; } //Chèn vào DataGridView dataGridView1.Columns.Add(ch); // <-> dgSinhVienTK5.Columns.Insert(3,ch); } → Sau khi chạy có kết quả như sau: 2.5.10.5.7. Lấy giá trị của một ô bất kì bạn chọn trên DataGridView Giả sử chúng ta có một DataGridView có các giá trị như sau: - 73 -
  • 74. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt Yêu cầu: Chúng ta muốn lấy ra giá trị của một ô (Cells) bất kì mà bạn chọn Giải quyết: Sử dụng sự kiện CellClick của điều khiển DataGridView như sau: //CÁC BẠN HỌC CÔNG NGHỆ NET HÃY NHỚ ĐOẠN MÃ NÀY private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { //Lấy về vị trí của Hàng và cột đang được chọn //Hai câu lệnh này QUAN TRỌNG các bạn chú ý int Hang = e.RowIndex; //<-> int HangHienTai = dataGridView1.CurrentRow.Index; int Cot = e.ColumnIndex; //Lấy ra vị trí (Hàng và cột) mà bạn chọn string ViTriBanChon = 'n' + "Hàng: " + Hang.ToString() + 'n' + "Cột: " + Cot.ToString(); MessageBox.Show("Vị trí đang chọn: " + ViTriBanChon); //Lấy ra giá trị của ô (Cells) mà bạn chọn string GiaTri = dataGridView1[Cot, Hang].Value.ToString(); //Hoặc: string GiaTri = dataGridView1.Rows[Hang].Cells[Cot].Value.ToString(); MessageBox.Show("Ô bạn chọn có giá trị: "+GiaTri); //Giờ các bạn chạy thử xem nào? ^.^ } 2.5.10.5.8. Bắt sự kiện SelectedIndexChanged của cột là combobox //Khai báo kiểu cột DataGridViewComboBoxColumn cbcl; - 74 -
  • 75. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt private void frmDataGridView_Load(object sender, EventArgs e) { //Đặt một số thuộc tính thông qua Code (sau khi Add các cột vào) dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; ///Đặt số cột //dataGridView1.ColumnCount = 10; //dataGridView1.RowCount = 10; ///Add thêm các cột vào dataGridView1.Columns.Add("clMaSV", "Mã SV"); dataGridView1.Columns.Add("clTen", "Tên"); dataGridView1.Columns.Add("clLop", "Lớp"); dataGridView1.Columns.Add("clNgaySinh", "Ngày sinh"); dataGridView1.Columns.Add("clQuequan", "Quê quán"); ///Add thêm một cột vào DataGridView (Chưa có giá trị) dataGridView1.Rows.Add(); dataGridView1[0, 0].Value = "M01"; dataGridView1[1, 0].Value = "Nguyễn Tuấn Anh"; dataGridView1[2, 0].Value = "Tk4N1"; dataGridView1[3, 0].Value = "13-02-1986"; dataGridView1[4, 0].Value = "Hưng Yên"; //Thêm một hàng mới - Cách 2 string[] str = new string[5] { "M02", "Nguyễn Thị Bích", "TK4N2", "14-021985", "Hưng Yên"}; - 75 -
  • 76. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt dataGridView1.Rows.Add(str); ///Phươnng thức Add, remove...Một cột hay hàng ///Lấy giá trị của một ô bất kì: Sự kiên CellClick ///Lấy ra giá trị của một ô và hiển thị nên các textbox ///Lấy sự kiện của cột là Combobox ///----------------------------------------------------------------------------------//Add thêm một cột là combobox vào string[] Mang = new string[5] { "M01", "M02", "M03", "M04", "M05" }; // cbcl= new DataGridViewComboBoxColumn(); cbcl.HeaderText = "Cột Combobox"; cbcl.Items.AddRange(Mang); dataGridView1.Columns.Add(cbcl);//Add vào vị trí cuối cùng (Cột cuối cùng) cbcl.DisplayIndex = 2; //Add+DisplayIndex thì đưa vào vị trí chỉ định <->Insert (nhưng # Insert ở chỗ: chỉ số vẫn là cuối cùng) //Còn hiển thị so ta chỉ định //Add thêm một cột với vị trí chỉ định: Insert cbcl = new DataGridViewComboBoxColumn(); cbcl.HeaderText = "Cột Combobox2"; cbcl.Items.AddRange(Mang); dataGridView1.Columns.Insert(0, cbcl); } //----------------------------------------------------------------------------------------------//Lây về sự kiện của Combobox (Cột trong DataGridView) - 76 -
  • 77. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt ComboBox Combo; int i = 1; void SuKien(object sender, EventArgs e) { string str = Combo.Text; if(i==1) { MessageBox.Show(str); i = 0; } } //Quan trọng private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { if (e.Control is ComboBox) { Combo = (ComboBox)e.Control; Combo.SelectedIndexChanged += new EventHandler(SuKien); i = 1; } } //Sự kiện CellClick lấy về giá trị của một Ô private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { int Cot = e.ColumnIndex; - 77 -
  • 78. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt int Hang = e.RowIndex; if (dataGridView1[Cot, Hang].Value != null) { MessageBox.Show(dataGridView1[Cot, Hang].Value.ToString()); } } //End - 78 -
  • 79. Đề cương môn học: Chuyên đề 01 2.6. Biên soạn: Hoàng Quốc Việt User Control 2.6.1. Khái niệm User là điều khiển do người dùng tạo ra (không có sẵn trong tập các Control của VS). User Control được xây dựng Khi muốn kết hợp chức năng của một hoặc nhiều điều khiển với nhau hoặc khi cần có những cách hiển thị đặc biệt hay những xử lý khác hơn. Ví dụ: Xây dựng DataGridView tích hợp sẵn các phương thức Text2DataGridView, DataGridView2Text (dùng nhiều lần) 2.6.2. Cách xây dựng các User Control 2.6.2.1. - 2.6.2.2. User Control dùng trong một dự án Kết hợp nhiều điều khiển: Project Add New Item… Kế thừa từ một điều khiển: Tạo Add Class dựng Kế thừa điều khiển cần xây User Control dùng trong nhiều dự án File New Project Chọn Winform Class Library - 79 - User Control
  • 80. Đề cương môn học: Chuyên đề 01 2.7. Biên soạn: Hoàng Quốc Việt Thao tác với file XML 2.7.1. XML là gì? XML viết tắt của chữ eXtensible Markup Language (ngôn ngữ nâng cấp có thể mở rộng) là một bộ qui luật về cách chia một tài liệu ra làm nhiều phần, rồi đánh dấu và ráp các phần khác nhau lại để dễ nhận diện chúng. Tổ hợp Web toàn cầu W3C gọi XML là "một cú pháp thông dụng cho việc biểu thị cấu trúc trong dữ liệu". Dữ liệu có cấu trúc tham chiếu đến dữ liệu được gán nhãn cho nội dung, ý nghĩa, hoặc công dụng. XML có cấu trúc giống như HTML tuy nhiên HTML sử dụng những thẻ được định nghĩa trước (trong một tài liệu html không thể sử dụng thẻ do người dùng định nghĩa), còn trong trang XML hoàn toàn có thể sử dụng những thẻ do người dùng định nghĩa. ≡ 2.7.2. Cú pháp XML Một trang XML phải tuân thủ các quy luật sau. 1. Một trang XML phải bắt đầu bằng XML declaration (ví dụ: <?xml version="1.0" encoding="utf-8" ?>) 2. Phải có một root (gốc) Element duy nhất, gọi là Document Element, nó chứa tất cả các Elements khác trong tài liệu. 3. Mỗi Child Element phải nằm trọn bên trong Element cha của nó. 4. Mỗi opening Tag phải có một closing Tag giống như nó (Nếu Tag nào không chứa gì ở giữa thì phải chấm dứt bằng "/>", thí dụ như <BR/>, <HR/>…). opening Tag và closing Tag phải được đánh vần y như nhau, chữ hoa hay chữ thường. 5. Các Tag không được xen kẽ nhau (thí dụ như <Class>TK6<Lop>TK6</Class></Lop> là bất hợp lệ vì <Lop> nằm trong Tag Class). 6. Giá trị Attribute trong XML phải được gói giữa một cặp ngoặc kép 2.7.3. Đọc/ghi file XML trong C# - 80 -
  • 81. Đề cương môn học: Chuyên đề 01 Biên soạn: Hoàng Quốc Việt 2.7.3.1. Ghi dữ liệu ra file XML Trong C# để ghi dữ liệu ra file XML chúng ta có thể sử dụng 1 các đối tượng sau: XmlTextWriter XmlWriter XmlDocument Minh họa: Để tạo trang XML SinhVien.xml có cấu trúc như bên dưới chúng ta có thể sử dụng XmlTextWriter hay XmlDocument (trước khi sử dụng các đối tượng này phải khai báo namespace using System.Xml;). - Trang SinhVien.xml Sử dụng đối tượng XmlTextWriter: XmlTextWriter xmlText = new XmlTextWriter("SinhVien.xml", null); //Ghi chú thích xmlText.WriteComment("Đọc ra file XML"); //Ghi dữ liệu: 1 lớp có nhiều sinh viên (tên, năm sinh) xmlText.WriteStartElement("Lop"); //Bản ghi thứ nhất xmlText.WriteStartElement("SinhVien"); xmlText.WriteAttributeString("ID","1"); xmlText.WriteStartElement("Ten"); xmlText.WriteString("Hoàng Quốc Việt"); xmlText.WriteEndElement();//</Name> xmlText.WriteStartElement("NamSinh"); xmlText.WriteValue(1985); xmlText.WriteEndElement(); xmlText.WriteEndElement(); - 81 -