GV: Hoàng Quốc ViệtPath Đường dẫn cần theo dõi có thể là ổ đĩa hay một thư mục kết hợp sử dụng với điều khiển FolderBrowserDialog để theo dõi sự thay đổi của một folder bất kì do bạn ch
Trang 1GV: Hoàng Quốc Việt
Path Đường dẫn cần theo dõi (có thể là ổ đĩa hay một thư mục) (kết hợp
sử dụng với điều khiển FolderBrowserDialog để theo dõi sự thay đổi của một folder bất kì do bạn chọn)
Filter Bộ lọc loại tập tin (theo dõi sự thay đổi của các file Text, file doc hay
tất cả các file)
EnableRaisingEvents Nhận một trong hai giá trị True hay False
- True: Cho phép các sự kiện có hiệu lực khi có thay đổi không
(thường chọn là true)
- False: ngược lại
IncludeSubdirectories Nhận một trong hai giá trị True hay False
- True: Theo dõi sự thay đổi của cả các thư mục con của thư mục bạn chọn
- False: Ngược lại (tất nhiên rồi ☻) NotifyFilter Bộ lọc đối với sự kiện Changed (thay đổi về tên, thuộc tính file, thời
4 Minh họa sử dụng điều khiển FileSystemWatcher
Giả sử chúng ta có form có tên: frmFileSystemWatcher Trên form đó có chứa: điều khiển FolderBrowserDilog có tên folderBrowserDialog1 để chọn
thư mục bất kì cần theo dõi, điều khiển FileSystemWatcher có tên
fileSystemWatcher1, một listbox có tên lstFileSystemWatcher (mỗi khi có sự
thay đổi thì dòng thông báo được thêm vào Listbox này) và một Button có tên
btSelect để chọn thư mục cần theo dõi.
→ XEM CODE TRONG PROJECT KÈM THEO (frmFileSystemWatcher)
Trang 2//Chọn thư mục cần theo dõi
privatevoid btSelect_Click(object sender, EventArgs e)
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
string strFolderCanTheoDoi = folderBrowserDialog1.SelectedPath;
//Đường dẫn cần theo dõi
//Bộ lọc đối với sự kiện Changed
fileSystemWatcher1.NotifyFilter = NotifyFilters.Attributes | NotifyFilters.CreationTime | NotifyFilters.DirectoryName |
NotifyFilters.FileName | NotifyFilters.Size;
//Xử lý các sự kiện
//Nếu thuộc tính EnableRaisingEvents=False thì các câu lệnh này không có hiệu lực
fileSystemWatcher1.Created += newFileSystemEventHandler(CreatedFileAndFolder);
fileSystemWatcher1.Deleted += newFileSystemEventHandler(Delete);
fileSystemWatcher1.Changed += newFileSystemEventHandler(Changed);
fileSystemWatcher1.Renamed += newRenamedEventHandler(Renamed);
Trang 3GV: Hoàng Quốc Việt
publicvoid CreatedFileAndFolder(object sender, FileSystemEventArgs e)
{
lstFileSystemWatcher.Items.Add("Create: " + e.FullPath + "Vừa được tạo ra");
}
//Phương thức thực thi khi có file hay folder được Xóa đi
publicvoid Delete(object sender, FileSystemEventArgs e)
{
lstFileSystemWatcher.Items.Add("Delete: " + e.FullPath + "Vừa được Xóa đi");
}
//Phương thức thực thi khi có file hay folder thay đổi nội dung
publicvoid Changed(object sender, FileSystemEventArgs e)
{
lstFileSystemWatcher.Items.Add("Changed: " + e.FullPath + " Vừa mới thay đổi!");
}
//Phương thức thực thi khi có file hay folder thay đổi tên
publicvoid Renamed(object sender, RenamedEventArgs e)
Trang 42 Một số thuộc tính thường dùng
Active Nhận một trong hai giá trị True hay False
- True: Cho phép cửa sổ Tooltip được xuất hiện
- False: Không cho phép BackColor Chọn mầu nền cho cửa sổ Tooltip (chính là khung hình chữ nhật hiện
ra) AutomaticDelay Thời gian tính bằng phần ngàn giây áp dụng cho 3 thuộc tính ở dưới
đây: AutoPopDelay, InitiaDelay, ReshowDelay
AutoPopDelay Khoảng thời gian mà cửa sổ điều khiển tooltip xuất hiện kể từ lúc
người dùng di chuyển chuột vào điều khiển cho đến khi kết thúc (1000=1s) (Nói gắn gọn: Khoảng thời gian mà nó sẽ được xuất
hiện khi người dùng di chuyển chuột vào điều khiển)
InitialDelay Khoảng thời gian mà cửa sổ điều khiển tooltip sẽ chờ để được
xuất hiện kể từ khi người dùng di chuyển chuột vào điều khiển (Ví
dụ đặt thuộc tính là 1000 thì sau khi di chuyển chuyển vào điều khiển 1s thì cửa sổ tooltip sẽ xuất hiện)
ReshowDelay Khoảng hời gian mà cửa sổ sẽ tắt kể từ khi người dùng di chuyển
chuột ra ngoài điều khiển IsBalloon Nhận một trong hai giá trị True hay False
- True: Cửa sổ hình chữ nhật bật nên với các góc bo tròn
- False: Cửa sổ hiện nên có hình chữ nhật TooltipIcon Biểu tượng xuất hiện trên hộp Tooltip
TooltipTitle Chuỗi xuất hiện bên cạnh Icon ở trên(Không phải là Tooltip)
3 Sử dụng điều khiển Tooltip
Khi kéo một điều khiển Tooltip vào Form thì mặc định tên của nó là: toolTip1 Khi đó
các điều khiển trên Form (Textbox, Button hay Label… ) tự động có thêm một thuộc tính
nữa là: Tooltip on Tooltip1 (Với Tooltip1 là tên của điều khiển vừa đưa vào - Thuộc tính
mới này nằm trong hộp thoại Properties).Bạn chỉ cần đặt giá trị cho thuộc tính này (thuộc
tính Tooltip on Tooltip1 của các điều khiển như Textbox, Button…chứ không phải của
tooltip) là một chuỗi gợi nhắc nào đó Lúc chạy chương trình khi trỏ chuột vào điều khiển
đó hiện nên thông báo (Chuỗi vừa nhập ở thuộc tính Tooltip on Tooltip1)
Trang 5GV: Hoàng Quốc Việt
BlinkRate Khoảng thời gian giữa hai lần nhấp nháy (1000=1s)
BlinkStyle Chọn kiểu hiển thị cho điều khiển ErrorProvider Nhận 1 trong 3 giá
trị:
- Khi có lỗi mới nhấp nháy (BlinkIfDifferentError - mặc định).
- Nhấp nháy liên tục (AlwaysBlink),
- Không bao giờ nhấp nháy (NeverBlink).
Icon Icon xuất hiện bên cạnh điều khiển, có thể chọn Icon bất kì trên máy
tính của bạn chứ không nhất thiết là Icon mặc định của VS (hình tròn đỏ)
SetError Khai báo chuỗi xuất hiện tương tự như thuộc tính Error on
errorProvider1.
GetError Nhận chuỗi từ thuộc tính Error on errorProvider1 của điều khiển.
Clear Loại bỏ tất cả các chuỗi diển giải cho các điều khiển
4 Sử dụng điều khiển ErrorProvider
Khi kéo một điều khiển ErrorProvider vào Form thì mặc định tên của nó là:
errorProvider1 Khi đó các điều khiển trên Form (Textbox, Button hay
Label… ) tự động có thêm một thuộc tính nữa là: Error on errorProvider1 (Với errorProvider1 là tên của điều khiển Error Provider vừa đưa vào - Thuộc
tính mới này nằm trong hộp thoại Properties). Bạn chỉ cần đặt giá trị cho
thuộc tính này là một chuỗi nào đó (thuộc tính Error on errorProvider1 của
các điều khiển như Textbox, Button…chứ không phải của điều khiển ErrorProvider) Lúc chạy chương trình thì có một biểu tượng hình tròn đỏ bên
cạnh điều khiển mà bạn đặt thuộc tính Error on errorProvider1, khi trỏ vào đó
sẽ xuất hiện dòng thông báo trên).
Ví dụ: Chúng ta có một form: frmErrorProvider Trên form có 2 điều khiển
Textbox có tên là: txtUser, txtPass và một button có tên btLogin Khia nhấn vào nút btLogin nếu giá trị của 2 ô txtUser và txtPass để trống (“”) thì xuất
hiện điều điều khiển ErrorProvider bên cạnh các điều khiển này
Trang 6privatevoid btLogin_Click(object sender, EventArgs e)
{
//Chúng ta có thể kéo một điều khiển ErrorProvider vào form và đặt các thuộc tính
//Cho các điều khiển txtUser, txtPass và điều khiển ErrorProvider bạn vừa tạo ra
//Ở đây khai báo đối tượng ErrorProvider bằng code
//Khai báo đối tượng thuộc kiểu ErrorProvider
ErrorProvider ep = newErrorProvider();
//Đặt các thuộc tính
ep.Clear();
ep.BlinkRate = 300;
ep.BlinkStyle = ErrorBlinkStyle.BlinkIfDifferentError;
//Đặt cho một một điều khiển (Textbox) sử dụng phương thức SetError
Trang 7GV: Hoàng Quốc Việt
Maximum Giới hạn trên (cực đại) của điều khiển ProgressBar
Minimum Giới hạn dưới (cực tiểu) của điều khiển ProgressBar
Value Giá trị hiện hành đang xử lý trên điều khiển ProgressBar
Style Kiểu trình bày của ProgressBar và nhận 1 trong 3 giá trị:
- Blocks: Tô từng khối (các khối có cách nhau) màu xanh từ trái qua phải
- Continuous: Tô màu xanh (liền nhau) từ trái qua phải
- Marquee: Cuộn màu xanh chạy từ trái qua phải
3. Ví dụ đơn giản về ProgressBar
Giả sử chúng ta có form: frmProgresBar Trên form có một điều khiển ProgressBar có tên progressBar1, một điều khiển timer có tên timer1 và một label có tên là label1 Chúng ta minh họa sử dụng ProgressBar qua ví dụ đơn
//Sự kiện Tick của Timer
privatevoid timer1_Tick(object sender, EventArgs e)
Trang 8CheckBoxes Nhận một trong hai giá trị True hay False (mặc định là False)
- 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
Columns 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
- 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 GridLines 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
Group 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 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 LabelWap Nhận một trong hai giá trị True hay False
- True: Chuỗi §HSPKTHYẽ tự động xuống hàng khi chiều dài không
đủ để trình bày
- False: Ngược lại MultiSelect Nhận một trong hai giá trị True hay False
- True: Cho phép chọn nhiều hàng (ListviewItem) Mặc định là True
- False: Không cho phép chọn nhiều hàng LargeImageList Đố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 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 Sorting 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
Trang 9GV: Hoàng Quốc Việt
RemoveAt Xóa bỏ một cột có chỉ số (ở vị trí) nào đó
5. Một số khái niệm liên quan đến ListView
Hình 1: Minh họa về ListView
Trang 10Hình 2: Cột trong ListView
Hình 3: Khái niệm ColumnHeader
Trang 11GV: Hoàng Quốc Việt
Hình 4: Khái niệm ListViewItem
Hình 5: Khái niệm SubItems
Trang 12Hình 6: Minh họa về Group
6. Minh họa ListView
Giả sử chúng ta có một điều khiển ListView có tên là LV (thuộc tính Name=LV), và cóthuộc tính View=Detail
Chúng ta minh họa ListView qua một số bước sau:
Bước 1: ListView khi chưa làm gì.
Bước 2: Thêm một cột vào ListView
LV.Columns.Add( "Name" ,100, HorizontalAlignment Left);
//Hoặc 3 câu lệnh dưới đây
//ColumnHeader ch = new ColumnHeader("clName");
//ch.Text = "Name";
//LV.Columns.Add(ch);
Trang 13GV: Hoàng Quốc Việt
Bước 3: Thêm cột thứ 2 vào ListView
LV.Columns.Add( "Size" ,100, HorizontalAlignment Left);
//Hoặc 3 câu lệnh dưới đây
//ColumnHeader ch = new ColumnHeader("clSize");
////Hoặc sử dụng 3 câu lệnh sau
//string[] HangMoi = new string[] { "TK4.doc", "30Kb" };
//ListViewItem lvi = new ListViewItem(Them);
//LV.Items.Add(lvi);
Trang 15GV: Hoàng Quốc Việt
7. Sử dụng điều khiển ListView qua một số Code
8. 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
12. 7.1 Tạo các cột, hàng cho ListView bằng code
13. private void frmListView_Load(object sender, EventArgs e)
14. {
15. //Đặt một số thuộc tính cho điều khiển ListView1 bằng code
16. //Bạn chỉ có thể nhìn thấy các cột nếu đặt thuộc tính View=Detail
17. listView1.View = View.Details;
18. listView1.GridLines = true;
19. listView1.CheckBoxes = true;//Hiển thị checkbox: các bạn xem kết quả ở hinhg minh họa
20
21. //Thêm 4 cột vào Listview
22. //Có thể thêm cột vào ListView theo cách này
28. ColumnHeader ch = newColumnHeader("chNgaySinh");
29. ch.Text = "Ngày sinh";
30. ch.TextAlign = HorizontalAlignment.Center;
Trang 1631. ch.Width = 100;
32. listView1.Columns.Add(ch);
33
34. //Thêm hàng thứ nhất vào ListView
35. string[] Them = newstring[] { "Nguyễn Văn Hải", "Hưng Yên", "TK4N1", "29-03-1987" };
36. ListViewItem lv = newListViewItem(Them);
Trang 17GV: Hoàng Quốc Việt
58
59 7.2 Duyệt xem những hàng nào được Check
60. private void btCheck_Click(object sender, EventArgs e)
61. {
62. //Bạn phải tạo ra một Listview như mục 7.1 trước đã
63. MessageBox.Show("Tên các sinh viên được Check
là","Check",MessageBoxButtons.OK);
75 7.3 Xóa một Cột tại vị trí nào đó
76. private void btRemoveAtColumns_Click(object sender, EventArgs e)
Trang 1888 Hình 7.2: Columns ↔ Collection
89 7.4 Xóa một hàng tại một vị trí nào đó
90 → Hoàn toàn tương tự như xóa một cột
91. private void btRemoveAtItems_Click(object sender, EventArgs e)
92. {
93. //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
94. //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)
Trang 19GV: Hoàng Quốc Việt
100.
101
102 Hình 7.4: Items ↔ Collection
103 7.5 Duyệt tất cả các file trong một thư mục và hiển thị nên ListView
104. private void btShowFile_Click(object sender, EventArgs e)
111. //Chọn một số thuộc tính cho Listview thông qua mã lệnh
112. listView1.View = View.Details;
113. listView1.FullRowSelect = true;//Cho phép chọn cả hàng như hình kết quả dưới
114. listView1.GridLines = true;
115
116. //Add các cột vào Listview bằng mã lệnh
117. //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
118. listView1.Columns.Add("Number", 100, HorizontalAlignment.Left);
119. listView1.Columns.Add("Name", 300, HorizontalAlignment.Left);
120. listView1.Columns.Add("Size", 150, HorizontalAlignment.Left);
121. listView1.Columns.Add("Type", 100, HorizontalAlignment.Left);