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 |
Chia sẻ: Mr Hưng | Lượt xem: 861 | 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