Giao diện là nơi cung cấp chức năng cho người sử dụng, do đó cần có đầy đủ
các chức năng, dễ sử dụng và sử dụng an toàn
 Giao diện là nơi cung cấp các trợ giúp, do đó cần có đầy đủ các hướng dẫn sử
dụng, kịp thời và hiệu quả
 Phần mềm là công cụ sử dụng hàng ngày, nên giao diện cần có khả năng tùy 
biến và linh hoạt để tránh nhàm chán
- Với vai trò quan trọng như trên, giao diện phần mềm cần phải đạt được các yêu cầu 
sau:
 Thân thiện: người sử dụng sẽ không có cảm giác lúng túng, mất tự tin khi sử
dụng chương trình vì mọi công cụ đã được hiển thị rõ ràng và sắp xếp có thứ tự
theo quy trình nghiệp vụ.
 Dễ sử dụng: mọi danh mục, thanh công cụ, biểu tượng, văn bản minh họa được 
thiết kế gần gũi với nhận thức của người dùng, giúp họ tiếp cận nhanh mọi chức 
năng của chương trình.
 Tin cậy: một giao diện với màu sắc, đường nét sắc sảo, nội dung rõ ràng, mạch 
lạc và bố trí hợp lý sẽ tạo cảm giác thoải mái và tin tưởng cho người sử dụng.
              
                                            
                                
            
 
            
                 196 trang
196 trang | 
Chia sẻ: Mr Hưng | Lượt xem: 1027 | Lượt tải: 0 
              
            Bạn đang xem trước 20 trang nội dung tài liệu Bài giảng Lập trình giao diện, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
àn phím. 
- Hai thuộc tình quan trọng của lớp KeyPressEventArgs: 
 KeyChar: mã ASCII của ký tự được nhấnKey 
 Handled: True/False: cho biết sự kiện KeyPress có được xử lý/chưa xử lý. Nếu 
chưa xử lý, ứng dụng sẽ xử lý mặc định. 
- Xử lý sự kiện KeyPress trên form: 
 Khai báo hàm xử lý sự kiện KeyPress 
 Thiết lập thuộc tính KeyPreview = True 
 Trong tab Event, double click lên sự kiện KeyPress 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 130 
- Xử lý sự kiện KeyPress trên control: 
 Khi chúng ta nhấn một phím trên các control cho phép nhập dữ liệu (TextBox, 
ComboBox), sự kiện KeyPress của các control này cũng được phát sinh và cách 
xử lý tương tự như đối với Form 
 Ví dụ: xử lý sự kiện KeyPress trên TextBox, chỉ cho phép nhập số: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 131 
 Char.IsDigit (key): trả về True nếu key là kí tự số 
 Char.IsControl (key): trả về True nếu key là kí tự điều khiển 
1.3. Sự kiện KeyUp, KeyDown 
- Sự kiện KeyDown được phát sinh khi một phím được nhấn 
- Sự kiện KeyUp được phát sinh khi phím được nhả 
- Hàm xử lý hai sự kiện này nhận vào đối số là đối tượng của lớp KeyEventArgs, có 
chứa số thông tin về các ký tự non-character (Shift, Ctrl, Alt, PgUp, PgDn,) 
- Các thuộc tính của lớp KeyEventArgs 
 Alt, Control, Shift : phím tương ứng được nhấn 
 KeyCode: Trả về một giá trị trong enum Keys tương đương với một phím được 
nhấn. Ví dụ nhấn phím A, thì KeyCode sẽ trả về Keys.A 
 KeyData: Giá trị kiểu Keys kết hợp bởi nhiều phím (các phím modifier và phím 
thông thường) à Để kiểm tra tổ hợp phím, sử dụng KeyData. 
Ví dụ: 
if (e.KeyData == (Keys.Control | Keys.A)) { //... } 
 KeyValue: Giá trị của KeyCode theo kiểu integer 
 Modifiers: xác định được các phím nào được nhấn (SHIFT, CTRL và ALT), chỉ 
trả về các giá trị của các phím SHIFT, CTRL, ALT và None , có thể kiểm tra kết 
hợp các phím bằng toán tử OR ‘|’. 
Ví dụ: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 132 
- Xử lý sự kiện KeyDown, KeyUp: 
 Khai báo hàm: 
 Hàm xử lý: 
1.4. Ví dụ về xử lý sự kiện bàn phím 
- Tạo form và thiết kế giao diện như sau: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 133 
- Khai báo các sự kiện KeyPress, KeyDown, KeyUp và viết code: 
- Chạy ứng dụng và nhấn thử các phím, xem kết quả: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 134 
2. Sự kiện chuột (Mouse) 
- Các sự kiện về chuột bao gồm: 
 MouseClick: click chuột lên Form/Control 
 MouseDoubleClick: nhấp đúp chuột trên form 
 MouseDown: nhấn phím chuột 
 MouseMove: con trỏ chuột di chuyển 
 MouseUp: nhả phím chuột 
 MouseWheel: cuộn nút giữa chuột 
 MouseEnter: con trỏ chuột đi vào phạm vi điều khiển 
 MouseHover: con trỏ chuột dao động trên điều khiển 
 MouseLeave: con trỏ chuột rời khỏi điều khiển 
- Các hàm xử lý sự kiện chuột (MouseClick, MouseDoubleClick, MouseDown, 
MouseUp, MouseMove) nhận vào đối số là đối tượng của lớp MouseEventArgs, kế 
thừa từ lớp System.EventArgs 
- Lớp MouseEventArgs bao gồm các thuộc tính chứa các thông tin liên quan đến các 
sự kiện chuột như phím nào của chuột được nhấn, vị trí con trỏ chuột,... 
- Một số thuộc tính của lớp MouseEventArgs: 
 Button: cho biết nút nào của chuột được nhấn 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 135 
 Clicks: số lần nhấn phím chuột 
 X: tọa độ x của vị trí con trỏ chuột 
 Y; tọa độ y của vị trí con trỏ chuột 
 Location: vị trí con trỏ chuột theo Point 
- Khai báo và xử lý sự kiện chuột trên form: 
- Viết code xử lý sự kiện: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 136 
- Ví dụ sử dụng chuột di chuyển đối tượng trên form 
 Thiết kế giao diện như sau: 
 Khai báo các hàm xử lý sự kiện MouseDown, MouseUp, MouseMove trên 
pictureBox1: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 137 
 Viết code xử lý: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 138 
 Biên dịch và chạy chương trình, dùng chuột rê quả bóng thả vào hình chữ nhật 
màu xanh, nhả chuột, xem kết quả 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 139 
Chương VI: MẢNG – CHUỖI 
MỤC TIÊU 
 Mô tả, khởi tạo và sử dụng thành thạo kiểu dữ liệu mảng trong lập trình 
 Mô tả, khởi tạo và sử dụng thành thạo các kiểu dữ liệu tập hợp trong .Net 
 Mô tả, khởi tạo và sử dụng thành thạo kiểu dữ liệu chuỗi trong lập trình 
 Sử dụng thành thạo lớp StringBuilder khi thao tác động với chuỗi 
1. Mảng 
1.1. Giới thiệu về mảng 
- Mảng là một tập hợp có thứ tự của những đối tượng có cùng một kiểu dữ liệu. 
- Các phần tử trong mảng được truy xuất theo tên và vị trí, chỉ số bắt đầu bằng zero. 
Ví dụ: mảng số nguyên có tên là c, gồm 12 phần tử: 
- Trong C#, mảng là kiểu dữ liệu tham chiếu, được xem là một đối tượng bao 
gồm các phương thức, thuộc tính 
- Có nhiều loại mảng: mảng một chiều, mảng nhiều chiều, 
- Trong ngôn ngữ C#, những đối tượng Array là đối tượng của kiểu System.Array 
- Các thuộc tính cơ bản của class Array: 
 Length: thuộc tính chiều dài của mảng 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 140 
 Rank: thuộc tính số chiều của mảng 
- Các phương thức cơ bản của class Array: 
 BinarySearch(): tìm kiếm trên mảng một chiều đã sắp thứ tự. 
 Clear(): thiết lập các thành phần của mảng về 0 hay null. 
 Copy(): sao chép một vùng của mảng vào mảng khác. 
 Reverse(): đảo thứ tự của các thành phần trong mảng một chiều 
 Sort(): sắp xếp giá trị trong mảng một chiều 
 GetLowerBound(): trả về cận dưới của chiều xác định trong mảng 
 GetUpperBound(): trả về cận trên của chiều xác định trong mảng 
 SetValue(): thiết lập giá trị cho một thành phần xác định trong mảng. 
1.2. Khai báo mảng 
- Cú pháp: type[ ] array-name; 
 Ví dụ: 
int [] pins; 
- Khai báo và cấp phát vùng nhớ cho mảng với từ khóa new: 
 Ví dụ: 
int [] pins= new int [4]; //tạo mảng số nguyên gồm 4 phần tử 
- Khai báo và khởi tạo các phần tử mảng: 
 Ví dụ: 
string [ ] arrColors = { "Red", "Green", "Blue" }; 
int [ ] pins = new int [4]{ 9, 3, 7, 2 }; 
Random r = new Random (); 
 int [ ] pins = new int [4] { r.Next() % 10, 
 r.Next() % 10, 
 r.Next() % 10, 
 r.Next() % 10 }; 
1.3. Làm việc với mảng 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 141 
- Xác định số phần tử mảng: sử dụng thuộc tính Length 
 Ví dụ: 
int size = arrayInt.Length; 
- Sắp xếp mảng: nếu các thành phần của mảng là kiểu định nghĩa trước (predefined 
types), ta có thể sắp xếp tăng dần bằng cách gọi phương thức static Array.Sort() 
 Ví dụ: 
int [] arrayInt = { 5, 7,3, 8, 2 }: 
Array.Sort (arrayInt ); 
 Kết quả: thứ tự các phần tử trong mảng arrayInt sẽ là 2, 3, 5, 7, 8 
- Duyệt mảng: 
 Duyệt từng phần tử dựa vào chỉ số như C++: 
 Dùng lệnh foreach duyệt qua từng phần tử trong mảng 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 142 
1.4. Truyền mảng cho phương thức 
- Truyền mảng như tham số cho phương thức bằng cách truyền vào tên của mảng 
(không có ngoặc [ ]) 
- Mảng luôn được truyền bằng tham chiếu 
 Ví dụ: 
o Trong hàm Test, sau lời gọi ModifyArray, mảng array sẽ chứa các phần 
tử {2, 4, 6, 8, 10} 
- Truyền mảng bằng tham trị: 
 Sự thay đổi giá trị các phần tử mảng trong phương thức sẽ ảnh hưởng đến đối 
tượng ngoài phương thức 
 Sự thay đổi tham chiếu của biến trong phương thức không ảnh hưởng đến đối 
tượng ngoài phương thức. 
 Ví dụ: 
- Truyền mảng bằng tham chiếu 
 Sự thay đổi tham chiếu của biến trong phương thức sẽ ảnh hưởng đến đối tượng 
ngoài phương thức. 
 Ví dụ: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 143 
1.5. Mảng nhiều chiều 
- Mảng cần phải có hai hoặc nhiều chỉ số mới xác định được một phần tử của mảng 
được gọi là mảng nhiều chiều, phổ biến nhất là mảng hai chiều. 
- Mảng hai chiều là mảng cần hai chỉ số để xác định được một phần tử. Mảng hai 
chiều được chia thành hai loại: mảng hình chữ nhật và Zagged array. 
- Mảng hình chữ nhật: có dạng bảng, trong đó các hàng có cùng kích thước (có 
cùng số cột). Mỗi phần tử trong mảng được xác định qua hai chỉ số: hàng và cột 
theo quy ước: chỉ số thứ nhất là hàng, chỉ số thứ hai là cột của phần tử, đều bắt đầu 
= 0 
- Khai báo mảng hai chiều hình chữ nhật theo cú pháp: type[ , ] array-name; 
 Ví dụ: 
int [ , ] arrInt = new int [2,3]; 
//khai báo và cấp phát vùng nhớ cho mảng số nguyên arrInt hai hàng, ba cột 
int [ , ] arrInt = { { 1, 2 }, { 3, 4 } }; 
//khai báo và khởi trị cho mảng số nguyên arrInt hai hàng, hai cột 
int [ , ] arrInt = new int [ , ] { {1,2}, {3,4}, {5,6}, {7,8}}; 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 144 
//khai báo và khởi trị cho mảng số nguyên arrInt bốn hàng, hai cột 
string[ , ] arrString = { { "Lennon", "John" }, 
 { "McCartney", "Paul" }, 
 { "Harrison", "George" }, 
 { "Starkey", "Richard" } }; 
//khai báo và khởi trị cho mảng chuỗi (string) arrString bốn hàng, hai cột 
- Duyệt mảng hai chiều: 
 Sử dụng phương thức GetLenght ( n ) để truy xuất số phần tử của mỗi chiều 
 Sử dụng hai vòng lặp for để duyệt qua các hàng và cột tương tự cú pháp C++ 
- Zagged array: là mảng hai chiều, trong đó mỗi hàng là một mảng và kích thước 
các phần tử trong mỗi hàng là không bằng nhau. Với kiểu mảng này, các hàng phải 
được khai báo tường minh. 
 Duyệt mảng Zagged array: sử dụng lệnh foreach 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 145 
1.6. Các lớp tập hợp thông dụng 
1.6.1. Giới thiệu 
- Mảng là kiểu dữ liệu cho phép chúng ta lưu trữ một tập hợp các phần tử một cách 
khá hiệu quả. Tuy nhiên, mảng cũng có một số hạn chế đối với người lập trình như: 
 Kích thước của mảng không thể thay đổi khi chương trình thực thi 
 Các phần tử lưu trong mảng phải có cùng kiểu dữ liệu 
 Khi thêm hoặc xóa các phần tử trong mảng, ta phải duyệt và dời các phần tử liên 
quan 
 ... 
- .NET framework cung cấp một thư viện các lớp với các phương thức cho phép thao 
tác với tập hợp một cách dễ dàng như: 
 Lớp ArrayList 
 Lớp Hashtable 
 Lớp SortedList 
 Lớp Queue 
 Lớp Stack 
 ... 
- Các lớp trên nằm trong namespace System.Collections. Do đó, để sử dụng các lớp 
tập hợp này, chúng ta phải khai báo: using System.Collections; 
1.6.2. Lớp ArrayList: 
- Là lớp lưu trữ tập hợp các đối tượng theo kiểu mảng, các phần tử được truy xuất 
thông qua chỉ số. 
- Kích thước của ArrayList có thể thay đổi lúc thực thi. 
- ArrayList có thể lưu các phần tử thuộc các kiểu dữ liệu khác nhau. 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 146 
- Kích thước mặc định của ArrayList là 0. Nếu các phần tử được lấp đầy, kích thước 
của ArrayList sẽ tự động tăng gấp đôi. 
- ArrayList cho phép lưu giá trị null cũng như giá trị trùng lặp. 
- Một số phương thức của lớp ArrayList: 
 Add: thêm một phần tử vào cuối danh sách 
 Insert: chèn một phần tử vào danh sách tại vị trí được chỉ định 
 Remove: xóa phần tử khỏi danh dách 
 RemoveAt: xóa phần tử khỏi danh sách theo vị trí 
 Contains: kiểm tra một phần tử có thuộc danh sách hay không (True: có, False: 
không) 
 IndexOf: trả về chỉ số của một phần tử trong danh sách 
 Sort: sắp xếp danh sách đối với những kiểu dữ liệu định nghĩa trước 
- Một số thuộc tính của lớp ArrayList: 
 Count: số phần tử trong danh sách 
 Capacity: số phần tử mà ArrayList có thể chứa 
- Ví dụ sử dụng ArrayList: 
Kết quả 
1.6.3. Lớp SortedList - Hashtable: 
- SortedList: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 147 
 Là lớp danh sách kiểu từ điển, trong đó mỗi phần tử chứa trong nó được xác định 
thông qua hai trường Key và Value. 
 Các phần tử chứa trong SortedList sẽ tự động được xếp thứ tự dựa vào trường 
Key 
- Lớp Hashtable: tương tự SortedList, nhưng các phần tử không được tự động sắp 
xếp do đó thao tác trên Hashtable nhanh hơn so với SortedList. 
- Ví dụ sử dụng SortedList: 
1.6.4. Lớp Stack: 
- Là loại danh sách mà các phần tử được tổ chức như một ngăn xếp theo thứ tự LIFO 
(LastIn First Out) 
- Thao tác thêm phần tử vào Stack và lấy phần tử ra khỏi Stack đều được thực hiện 
tại một đầu của danh sách. 
- Ví dụ sử dụng Stack: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 148 
1.6.5. Lớp Queue: 
- Là loại danh sách mà các phần tử được tổ chức như một ngăn xếp theo thứ tự FIFO 
(First In First Out) 
- Các phần tử được thêm vào cuối danh sách và được lấy ra từ đầu danh sách 
- Ví dụ sử dụng Queue: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 149 
2. Chuỗi (String) 
2.1. Giới thiệu 
- Chuỗi là một dãy các ký tự Unicode liên tiếp nhau trong bộ nhớ và không thể thay 
đổi. Vì vậy, các phương thức áp dụng lên chuỗi không làm thay đổi nội dung bản 
thân chuỗi gốc mà chỉ có thể trả về một chuỗi mới. 
- Trong .NET, chuỗi là kiểu dữ liệu tham chiếu, mỗi chuỗi là một đối tượng của lớp 
string. 
- .Net Framework còn cung cấp lớp System.String là lớp được thiết kế để lưu trữ 
chuỗi, bao gồm các phương thức và thuộc tính, trong đó có rất nhiều các phương 
thức static cho phép người lập trình có thể thao tác và xử lý chuỗi một cách dễ dàng. 
- Một số ký hiệu chuỗi đặc biệt: 
 Ký hiệu \ : thường đặt trước các kí tự đặc biệt để hiển thị chúng, như: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 150 
 Ví dụ: 
 Ký hiệu @: 
 Dùng đặt trước tên biến khi tên biến trùng với từ khóa trong C#. 
Ví dụ: 
 int @new = 10; 
 Dùng để thay thế ký tự \ để cách viết tự nhiên hơn 
Ví dụ: 
o Thay vì viết: 
 string path = “D:\\Baitap”; 
o Ta có thể viết: 
string path = @”D:\Baitap”; 
o Thay vì viết: 
string literalTwo = "Line One\nLine Two"; 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 151 
o Ta có thể viết: 
string literalTwo = @"Line One 
Line Two"; 
: 
2.2. Phương thức khởi tạo của lớp string (string constructor) 
- Lớp string cung cấp tám phương thức khởi tạo cho phép tạo chuỗi với nhiều cách 
khác nhau. 
- Ví dụ sử dụng phương thức thiết lập của class string: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 152 
2.3. Các phương thức của lớp String 
2.3.1. Phương thức static (public static): 
- Compare: so sánh 2 chuỗi (,=?) 
- Concat: nối 2 chuỗi 
- Copy: tạo một bản sao của một chuỗi 
- Equals: true/false cho biết hai chuỗi có bằng nhau hay không 
- Format: định dạng xuất cho chuỗi 
- Join: ghép nối chuỗi từ một mảng chuỗi 
2.3.2. Phương thức thành viên của lớp: 
- CompareTo: so sánh một chuỗi với chuỗi khác 
- EndsWith: true/false, xác định chuỗi kết thúc của một chuỗi? 
- StartsWith: true/false, xác định chuỗi bắt đầu của một chuỗi? 
- Equals: true/false, kiểm tra một chuỗi có bằng với một chuỗi khác? 
- Insert: chèn vào chuỗi một chuỗi khác 
- Remove: xóa các ký tự trong một chuỗi 
- LastIndexOf: vị trí tìm thấy của ký tự trong chuỗi từ cuối chuỗi 
- Split: tách chuỗi 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 153 
- SubString: trả về một chuỗi con từ một chuỗi 
- ToCharArray: sao chép một số ký tự từ chuỗi sang mảng 
- ToLower: trả về chuỗi ký tự thường từ một chuỗi 
- ToUpper: trả về chuỗi ký tự hoa từ một chuỗi 
- Trim: trả về chuỗi đã được cắt bỏ khoảng trắng đầu và cuối từ một chuỗi 
- TrimStart: trả về chuỗi đã được cắt bỏ khoảng trắng đầu từ một chuỗi 
- TrimEnd: trả về chuỗi đã được cắt bỏ khoảng trắng cuối từ một chuỗi 
2.4. Các thao tác với chuỗi 
2.4.1. So sánh chuỗi: 
- Sử dụng toán tử == 
- Sử dụng phương thức Equal 
 Ví dụ: 
bool bRes = s1.Equal (s2); 
 bRes = true: s1 = s2 
 bRes = false: s1 != s2 
- CompareTo 
 Ví dụ: 
int result = s1.CompareTo (s2); 
 result s2 
 result = 0: s1 = s2 
 result >0: s1 < s2 
- Ví dụ về so sánh chuỗi: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 154 
2.4.2. Trích chuỗi: sử dung phương thức SubString 
- SubString (int index): trả về chuỗi con bắt đầu từ vị trí index 
- SubString (int index, int leng): trả về chuỗi con gồm leng ký tự bắt đầu từ vị trí 
index 
- Ví dụ: 
2.4.3. Nối chuỗi: 
- Sử dụng toán tử + 
- Sử dụng String.Concat (string s1, string s2) 
- Ví dụ: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 155 
2.4.4. Tìm chuỗi con: 
Một số phương thức xác định vị trí chuỗi con/ký tự trong chuỗi: 
- LastIndexOf: vị trí xuất hiện cuối cùng của 1 chuỗi con hoặc kí tự trong chuỗi 
- LastIndexOfAny: vị trí xuất hiện cuối cùng của bất kì 1 hoặc 1 tập kí tự trong chuỗi 
- IndexOf: vị trí xuất hiện đầu tiên của 1 chuỗi con hoặc kí tự trong chuỗi 
- IndexOfAny: vị trí xuất hiện đầu tiên của bất kì 1 hoặc 1 tập kí tự trong chuỗi 
 Cú pháp: public int IndexOfAny ( char [] anyOf, int startIndex, int count ) 
 Ví dụ: 
const string value1 = "Darth is my enemy."; 
const string value2 = "Visual Basic is hard."; 
int index1 = value1.IndexOfAny(new char[] { 'e', 'B' }); 
string s1 = value1.Substring(index1); 
//s1 = “enemy.” 
int index2 = value2.IndexOfAny(new char[] { 'e', 'B' }); 
string s2 = value2.Substring(index2); 
//s2 = “Basic is hard.” 
2.4.5. Thay thế chuỗi con trong chuỗi: 
- Sử dụng phương thức Replace(string oldValue, string newValue) 
2.4.6. Loại bỏ khoảng trắng / ký tự trong chuỗi 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 156 
- Trim:trả về chuỗi đã loại bỏ các ký tự trắng hoặc các ký tự nằm trong mảng tham 
số 
- TrimStart: trả về chuỗi đã loại bỏ các ký tự trắng đầu chuỗi 
- TrimEnd: trả về chuỗi đã loại bỏ các ký tự trắng cuối chuỗi 
- Ví dụ: 
2.4.7. Loại bỏ chuỗi con trong chuỗi: sử dung phương thức Remove 
- Remove (int index) 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 157 
- Remove (int index, int count) 
- Ví dụ: 
2.4.8. Tách chuỗi vào mảng: sử dụng phương thức Split 
- Ví dụ: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 158 
2.4.9. Ráp chuỗi từ mảng: sử dụng phương thức Join 
- Ví dụ: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 159 
2.5. Lớp StringBuilder 
Lớp String cung cấp rất nhiều phương thức cho phép xử lý chuỗi, tuy nhiên vẫn hạn 
chế do không thể thay đổi động nội dung và kích thước chuỗi. Để khắc phục nhược điểm 
này của lớp string, .Net Framework cung cấp lớp StringBuilder cho phép tạo, thao tác và 
xử lý đối với chuỗi khi chương trình thực thi. 
- Khai báo và khởi tạo đối tượng StringBuilder:: 
 StringBuilder sb = new StringBuilder(); 
 StringBuilder sb = new StringBuilder(int leng) 
 StringBuilder sb = new StringBuilder(string s) 
 StringBuilder sb = new StringBuilder(string s, int leng) 
 ... 
- Một số thuộc tính của class StringBuilder: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 160 
 Lenght: chiều dài hiện tại của chuỗi 
 Capacity: dung lượng tối đa mà chuỗi có thể chứa. 
- Một số phương thức của class StringBuilder: 
 Append: nối một chuỗi vào cuối chuỗi 
 AppendFormat: định dạng chuỗi khi nối vào 
 Insert: chèn một chuỗi vào cuối chuỗi 
 Replace: thay thế tất cả thể hiện của một ký tự bằng các ký tự khác 
 EnsureCapacity: đảm bảo (thiết lập lại) kích thước hiện tại mà đối tương 
StringBuilder có thể chứa. 
- Các thao tác với class StringBuilder: 
 Ví dụ thay đổi kích thước chuỗi khi chương trình thực thi, sử dụng phương 
thức EnsureCapacity: 
- Ví dụ nối chuỗi sử dụng phương thức Append: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 161 
 Ví dụ sử dụng phương thức AppendFormat: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 162 
 Ví dụ sử dụng phương thức Insert, Remove: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 163 
 Ví dụ sử dụng phương thức Replace: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 164 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 165 
Chương VII: LÀM VIỆC VỚI FILE VÀ THƯ MỤC 
 MỤC TIÊU 
o Tạo, đọc, ghi và cập nhật được file 
o Sử dụng được lớp File và Directory để truy xuất được thông tin về file 
và thư mục lưu trữ trên máy tính 
o Thao tác thành thạo khi truy cập file tuần tự 
o Sử dụng được các lớp FileStream, StreamReader, StreamWriter để đọc 
và ghi file text 
o Sử dụng được lớp FileStream và BinaryFormater để đọc và ghi các đối 
tượng vào file 
1. Lớp File, Directory và Stream 
1.1. Giới thiệu: 
- Khi muốn đọc hay ghi dữ liệu vào/ra tập tin hay muốn truyền dữ liệu từ máy này 
sang máy khác, ta phải tổ chức dữ liệu theo cấu trúc tuần tự các byte hay các gói 
tin . Điều này dễ liên tưởng dữ liệu như là các luồng dữ liệu chảy từ từ nguồn 
đến đích. 
- Thư viện .NET Framework cung cấp lớp Stream và các lớp kế thừa) để chương 
trình có thể sử dụng trong các thao tác nhập xuất dữ liệu như đọc/ghi tập tin, truyền 
dữ liệu qua mạng 
- Một số lớp Stream thông dụng: 
 Stream: Lớp trừu tượng, cung cấp chức năng đọc/ghi dữ liệu theo bye 
 BinaryReader: Đọc dữ liệu nhị phân 
 BinaryWriter: Ghi dữ liệu nhị phân 
 File, FileInfo, Directory, DirectoryInfo: cung cấp các phương thức cho phép 
thao tác với tập tin và thư mục như tạo, xóa, đổi tên, liệt kê file và thư mục,... 
 FileStream: Đọc/ ghi tập tin theo cơ chế đồng bộ / bất đồng bộ, mặc định là 
đồng bộ. 
 TextReader, TextWriter: lớp trừu tượng cho phép đọc, ghi ký tự 
 StringReader, StringWriter: kế thừa từ TextReader, TextWriter, cài đặt thêm 
các phương thức đọc, ghi chuỗi. 
1.2. Lớp File: 
- Một số phương thức static của class File: 
 AppentText: ghi nội dung văn bản vào cuối file 
 Copy: sao chép file 
 CreateText: tạo file văn bản 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 166 
 Delete: Xóa file 
 Exists: kiểm tra sự tồn tại của file 
 GetCreationTime: trả về đối tượng DateTime là thời điểm file được tạo 
 GetLastAccessTime: trả về đối tượng DateTime là lần cuối cùng truy cập file 
 GetLastWriteTime: trả về đối tượng DateTime là lần cuối cùng cập nhật nội 
dung file 
 Move: di chuyển file 
 Open: mở file 
 OpenRead: mở file chỉ đọc 
 OpenText: mở file văn bản 
 OpenWrite: mở file để ghi 
1.3. Lớp Directory: 
- Một số phương thức của class Directory: 
 CreateDirectory: tạo thư mục 
 Delete: Xóa thư mục 
 Exists: kiểm tra sự tồn tại của thư mục 
 GetCreationTime: trả về đối tượng DateTime là thời điểm thư mục được tạo 
 GetLastAccessTime: trả về đối tượng DateTime là lần cuối cùng truy cập thư 
mục 
 GetLastWriteTime: trả về đối tượng DateTime là lần cuối cùng cập nhật nội 
dung thư mục 
 Move: di chuyển thư mục 
2. Làm việc với file và thư mục 
2.1. Đọc, ghi tập tin nhị phân: 
- Sử dụng lớp cơ sở Stream. Lớp Stream có rất nhiều phương thức nhưng quan trọng 
nhất là năm phương thức Read(), Write(), BeginRead(), BeginWrite() và Flush(). 
- Thực hiện như sau: 
 Tạo đối tượng Stream để đọc hoặc ghi 
 Sử dụng phương thức File.OpenRead để đọc và File.OpenWrite để ghi vào tập 
tin 
 Ví dụ: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 167 
2.2. Đọc, ghi tập tin văn bản: 
Sử dụng hai lớp StreamReader và StreamWriter 
- StreamReader: dọc tập tin với các hàm Read, ReadLine 
- StreamWriter: ghi vào tập tìn với các hàm Write, WriteLine 
- Ví dụ: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 168 
2.3. Tạo, xóa, di chuyển file: 
Sử dụng các phương thức static của lớp File: 
- File.Create( "file_name" ); 
- File.Delete( "file_name" ); 
- File.Move ( "source_file" , "dest_file" ) 
2.4. Tạo, xóa, di chuyển thư mục: 
Sử dụng các phương thức static của lớp Directory: 
- Directory.CreateDirectory ( "dir_name" ); 
- Directory.Delete( "dir_name" ); 
- Directory.Move ( "source_dir" , "dest_dir") 
2.5. Truy xuất thông tin của file: 
Sử dụng các phương thức static của lớp File: 
- File.GetCreationTime("file_name"); 
- File.GetLastAccessTime("file_name"); 
- File.GetAttributes("file_name"); 
- File. GetLastWriteTime ( "file_name"); 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 169 
2.6. Truy xuất thông tin của thư mục: 
Sử dụng các phương thức static của lớp Directory 
- Directory.GetCreationTime("dir_name"); 
- Directory.GetLastAccessTime("dir_name"); 
- Directory.GetAttributes("dir_name"); 
- Directory.GetLastWriteTime( "dir_name" ); 
2.7. Liệt kê file và thư mục con trong thư mục: 
Sử dụng các phương thức static của lớp Directory 
- Directory.GetFiles ("dir_name"); 
- Directory.GetDirectories ("dir_name"); 
- Ví dụ sử dụng class File và Directory truy xuất và liệt kê thông tin file và thư mục: 
 Thiết kế giao diện: 
 Viết code: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 170 
 Khai báo và viết code cho sự kiện KeyDown trên textbox txtInput: 
Bài giảng Lập trình giao diện 
ThS. Nguyễn Thị Mai Trang 171 
3. Serialization 
- Serialize là một quá trình chuyển đổi một cấu trúc dữ liệu hoặc đối tượng thành một 
định dạng có thể lưu trữ được vào file, bộ nhớ, hoặc vận chuyển thông qua mạng. 
Ví dụ: ta có thể tạo một đối tượng hình tròn và vẽ trên giao diện chương trình, sau 
đó lưu thành file. 
- Deserialization:quá trình phục hồi dữ liệu lưu trong file trở lại tr
            Các file đính kèm theo tài liệu này:
 ltgd2015full_0242.pdf ltgd2015full_0242.pdf