Và nhận một trong hai giá trị - GrowOnly: Cho phép - và GrowAndShrink: Không cho phép 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
Trang 1MỤC LỤC
BÀI 1 TỔNG QUAN VỀ NET VÀ CÁC CONTROL TRONG C# 7
1.1 Môi trường thực thi ngôn ngữ chung – CLR 7
1.2 Ngôn ngữ trung gian - IL 8
1.3 Giới thiệu về Net Framework 9
1.4 Tạo một ứng dụng Windows form 10
1.5 Lớp Control 10
1.6 Form 12
1.6.1 Chức năng 12
1.6.2 Một số thuộc tính thường dùng 12
1.6.3 Một số sự kiện thường dùng 15
1.6.4 Minh họa 16
BÀI 2 MỘT SỐ CONTROL TRONG C# 20
2.1 Textbox 20
2.1.1 Chức năng 20
2.1.2 Một số thuộc tính thường dùng 20
2.2 RichTextBox 27
2.2.1 Chức năng 27
2.2.2 Một số thuộc tính thường dùng 27
2.3 DataGridView 33
2.3.1 Chức năng 33
2.3.2 Một số khái niệm liên quan đến DataGridView 33
2.4 ListView 51
2.4.1 Chức năng 51
2.4.2 Một số khái niệm liên quan đến ListView 51
BÀI 3 THỰC HÀNH MỘT SỐ CONTROL TRONG C# (BUỔI 1) 69
Trang 23.1 Mục tiêu 69
3.2 Nội dung thực hành 69
3.3 Bài tập tự làm 72
BÀI 4 THẢO LUẬN VỀ CÁC CONTROL 73
4.1 Mục tiêu 73
4.2 Tổ chức thực hiện 73
4.3 Nội dung thảo luận 73
4.3.1 Bài thảo luận số 1 73
4.3.2 Bài thảo luận số 2 74
4.3.3 Bài thảo luận số 3 75
BÀI 5 THỰC HÀNH MỘT SỐ CONTROL TRONG C# (BUỔI 2) 76
5.1 Mục tiêu 76
5.2 Nội dung thực hành 76
5.3 Bài tập tự làm 80
BÀI 6 USER CONTROL 81
6.1 User Control (UC) 81
6.1.1 Khái niệm 81
6.1.2 Xây dụng UC 81
BÀI 7 THỰC HÀNH USER CONTROL 82
7.1 Mục tiêu 82
7.2 Nội dung thực hành 82
7.3 Bài tập tự làm 85
BÀI 8 THAO TÁC VỚI FILE XML VÀ REGISTRY 86
8.1 Thao tác với file XML 86
8.1.1 XML là gì? 86
8.1.2 Cú pháp XML 86
Trang 38.1.3 Đọc/ghi file XML trong C# 87
8.2 Thao tác với Registry 90
8.2.1 Giới thiệu về Registry 90
8.2.2 Cấu trúc Registry của Windows 91
8.2.3 Thao tác với Registry trong C# 92
BÀI 9 THỰC HÀNH THAO TÁC VỚI FILE XML VÀ REGISTRY 94
9.1 Mục tiêu 94
9.2 Nội dung thực hành 94
9.3 Bài tập tự làm 98
BÀI 10 THẢO LUẬN VỀ USER CONTROL VÀ CÁC THAO TÁC VỚI XML, REGISTRY 100
10.1 Mục tiêu 100
10.2 Tổ chức thực hiện 100
10.3 Nội dung thảo luận 100
10.3.1 Bài thảo luận số 1 100
10.3.2 Bài thảo luận số 2 100
10.3.3 Bài thảo luận số 3 101
BÀI 11 GIỚI THIỆU ADO.NET 102
11.1 Giới thiệu ADO.NET 102
11.2 Các mô hình thao tác với CSDL 103
11.3 Kết nối đến nguồn dữ liệu bằng đối tượng Connection 104
11.3.1 Chức năng 104
11.3.2 Khai báo 104
11.3.3 Kết nối tới Cơ sở dữ liệu 105
11.4 Thực thi câu lệnh SQL bằng đối tượng Command 107
11.4.1 Chức năng 107
Trang 411.4.3 Các phương thức thường của đối tượng Command 108
11.4.4 Sử dụng đối tượng Command 109
11.5 Truy vấn và nhận về dữ liệu với DataReader 112
11.5.1 Chức năng 112
11.5.2 Khai báo 112
11.5.3 Sử dụng đối tượng DataReader 113
BÀI 12 THỰC HÀNH ĐỐI TƯỢNG CONNECTION, COMMAND VÀ DATAREADER 115
12.1 Mục tiêu 115
12.2 Nội dung thực hành 115
12.3 Bài tập tự làm 119
BÀI 13 ĐỐI TƯỢNG DATAADAPTER, DATASET VÀ PARAMETER 122
13.1 Cập nhật và truy vấn dữ liệu với đối tượng DataAdapter 122
13.1.1 Chức năng 122
13.1.2 Khai báo đối tượng DataAdapter 122
13.1.3 Sử dụng đối tượng DataAdapter 122
13.2 Mô hình DataSet 124
13.2.1 Chức năng 124
13.2.2 Khai báo 124
13.2.3 Mô hình DataSet 124
13.3 Đối tượng Parameter 125
13.3.1 Chức năng 125
13.3.2 Sử dụng 125
BÀI 14 THỰC HÀNH ĐỐI TƯỢNG DATAADAPTER, DATASET VÀ PARAMETER 128
14.1 Mục tiêu 128
14.2 Nội dung thực hành 128
Trang 514.3 Bài tập tự làm 135
BÀI 15 THẢO LUẬN VỀ CÁC ĐỐI TƯỢNG CỦA ADO 137
15.1 Mục tiêu 137
15.2 Tổ chức thực hiện 137
15.3 Nội dung thảo luận 137
15.3.1 Bài thảo luận số 1 137
15.3.2 Bài thảo luận số 2 138
15.3.3 Bài thảo luận số 3 139
BÀI 16 SẮP XẾP VÀ TÌM KIẾM DỮ LIỆU VỚI DATAVIEW, LINQ 140
16.1 Ràng buộc dữ liệu với các điều khiển 140
16.1.1 Mục đích 140
16.1.2 Sử dụng 140
16.2 Sử dụng DataView trong sắp xếp và tìm kiếm dữ liệu 140
16.2.1 Chức năng 140
16.2.2 Một số thuộc tính thường dùng 141
16.2.3 Một số Phương thức của đối tượng DataView 141
16.2.4 Ví dụ sử dụng đối tượng DataView 141
16.3 LINQ 143
16.3.1 Giới thiệu về LINQ 143
16.3.2 Các thành phần của LINQ 143
16.3.3 LINQ vs ADO.NET 147
16.3.4 Cài đặt LinQ 147
16.3.5 Sử dụng LinQ 149
BÀI 17 THỰC HÀNH SỬ DỤNG DATAVIEW VÀ LINQ 152
17.1 Mục tiêu 152
17.2 Nội dung thực hành 152
Trang 617.3 Bài tập tự làm 154
BÀI 18 THẢO LUẬN VỀ LINQ 157
18.1 Mục tiêu 157
18.2 Tổ chức thực hiện 157
18.3 Nội dung thảo luận 157
18.3.1 Bài thảo luận số 1 157
18.3.2 Bài thảo luận số 2 158
BÀI 19 THIẾT KẾ REPORT VỚI CRYSTAL REPORT 159
19.1 Thiết kế báo cáo với Crystal Report 159
19.2 Nạp và hiển thị Report trong chương trình 167
19.3 Thiết kế Report động 167
19.3.1 Mục đích 167
19.3.2 Sử dụng 168
BÀI 20 THỰC HÀNH THIẾT KẾ REPORT VỚI CRYSTAL REPORT 171
20.1 Mục tiêu 171
20.2 Nội dung thực hành 171
20.3 Bài tập tự làm 173
Trang 7BÀI 1 TỔNG QUAN VỀ NET VÀ CÁC CONTROL TRONG C#
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ệ
Trang 8Trong 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
Trang 91.3 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
Trang 101.4 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
1.5 Lớp Control
C# (các công cụ của bộ VS nói riêng) bao gồm một tập các điều khiển được MS xây dựng sẵn Một số điều khiển được hiển thị trong công cụ Toolbox của VS
Trang 11Ngoài ra để lấy các điều khiển chưa được hiển thị trên công cụ Toolbox chúng ta
có thể lấy ra bằng cách: Tools Choose Toolbox Items…
Trang 12AcceptButton 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 đó
- 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
Trang 13AutoSizeMode 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ị
- GrowOnly: Cho phép
- và GrowAndShrink: Không cho phép
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 )
- 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)
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)
chữ FormBorderStyle Chọn Style cho Form (Có 7 lựa chọn khác nhau)
- True: Cho phép xuất hiện Buton có dấu ? trên Titlebar
Trang 14(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
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
- 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
- True: Cho phép nút MaximizeBox trên Titlebar có hiệu lực
- False: Ngược lại
- 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
- True: Cho phép hiện Form dưới khay Taskbar
- False: Ngược lại StartPosition 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)
Trang 15Text Giá trị Text của Form
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…)
1.6.3 Một số sự kiện thường dùng
AutoSizeChanged 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
thuộc Form
DoubleClick Xảy ra khi người dùng DoubleClick vào vùng làm việc
của Form
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
Trang 16phím (tùy thuộc vào xử lý của chúng ta)
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)
Form MouseLeave Xảy ra khi di chuyển chuột ra khỏi vùng làm việc của
Form
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
1.6.4 Minh họa
Trang 171.6.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);
}
1.6.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
//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");
Trang 18//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");
//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
Trang 20BÀI 2 MỘT SỐ CONTROL TRONG C#
- 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)
- 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
AutoCompleteCustomSource Ba thuộc tính này ý nghĩa tương tự như của
thuộc tính của điều khiển Combobox AutoCompleteMode
AutoComplete Source
Trang 21HideSelection Nhận một trong hai giá trị True hay False
- True: Không cho phép các thuộc tính: SelectionStart…có hiệu lực
- False: Ngược lại
Textbox
- 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ó)
- False: Cho phép nhập/hiển thị giá trị của Textbox trên một dòng
PasswordChar 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
điều kiện thuộc tính Multiline=True mới nhìn thấy thanh cuộn)
TabIndex
- True: có thể Undo lại được (như Word)
- False: Ngược lại
o SelectionStart
o SelectionLength
Trang 22o ………
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.1.2.1 Một số phương thức thường dùng
AppendText Nối một chuỗi (string) vào giá trị Text hiện có của
Textbox Copy
Xử lý phần nội dung bôi đen (như Word) Cut
Paste
2.1.2.2 Một số sự kiện thường dùng
KeyPress Xảy ra khi người dùng nhấn phím trên bàn phím (tất
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…)
MouseClick Xảy ra khi người dùng Click chuột trên điều khiển
Trang 23Textbox
TextChanged Xảy ra khi giá trị Text của Texbox (hay gọi giá trị
Textbox) thay đổi
2.1.2.3 Minh họa
Trang 242.1.1.1.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: "+ 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.1.1.1.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.1.1.1.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
Trang 25Nếu có thì nó tự Bôi đen từ đó
2.1.1.1.4 Minh họa thuộc tính CanUndo và phương thức Undo
private void btTextbox_Click(object sender, EventArgs e)
2.1.1.1.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);
Trang 26//<-> 2 câu lệnh này
//textBox1.SelectionStart = 10;
//textBox1.SelectionStart = 5;
}
2.1.1.1.6 Minh họa phương thức AppendText
private void btTextbox_Click(object sender, EventArgs e)
2.1.1.1.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.1.1.1.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))
Trang 27→ 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)
SelectedText Lấy về chuỗi được lựa chọn (chuỗi mà chúng ta
bôi đ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)
Trang 28SelectionColor Lấy thông tin về Color của chuỗi được bôi đen
được lựa chọn
- True: có thể Undo lại được (như Word)
- False: Ngược lại
2.2.2.1 Một số phương thức thường dùng
Cut
Paste
TextBox)
Undo
Trang 292.2.2.2 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
Trang 30Việ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.2.2.2.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);
Trang 31//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.2.2.2.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.2.2.2.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)
2.2.2.2.5 Việc sử dụng các phương thức: AppendText, Select, SelectAll, Undo, Redo,
Undo tương tự như Textbox
2.2.2.2.6 Minh họa sử dụng phương thưc LoadFile
private void btRichTextBox_Click(object sender, EventArgs e)
Trang 32{
//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.2.2.2.7 Minh họa sử dụng phương thưc SavaFile
private void btRichTextBox_Click(object sender, EventArgs e)
2.2.2.2.8 Minh họa Phương thức Find
private void btRichTextBox_Click(object sender, EventArgs e)
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)
Trang 332.3 DataGridView
2.3.1 Chức năng
Điều khiển DataGridView dùng để hiển thị dữ liệu
2.3.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
Trang 34Hì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
Trang 35Cá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();
DataGridView
Trang 36ColumnHeadersBorderStyle
ColumnHeadersHeight
ColumnHeadersVisible Nhận một trong hai giá trị True hay False
- 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
Columns 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)
cách nhau bởi lưới)
- 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)
- 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)
- False: Ngược lại
Trang 38Giả 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.3.1.1.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
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
Trang 39//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";
//Sự kiện Load của Form
private void btCreate_Click(object sender, EventArgs e)
{
Trang 40//Đặ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
} //Đã xong rồi Giờ thì bạn chạy xem nào
2.3.1.1.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: dataGridView1.Columns.Clear();
}