Tài liệu Tìm hiểu C# và ứng dụng của C# p 19 - Pdf 10

Lập trình với C# Gvhd: Nguyễn Tấn Trần Minh Khang
119
13.1.2 Tạo một ứng dụng Windows Form khác
Trong ứng dụng trên ta đã thảo luận sơ qua về ứng dụng Windows Form, phần này
ta sẽ tạo một ứng dụng Windows khác thực tế hơn. Ứng dụng có tên là
FileCopier, cho phép chép hay xóa một hoặc nhiều tập tin từ vị trí này sang vị
trí khác. Mục đích của ứng dụng là minh họa sâu hơn về các kỹ năng lập trình C# và
giúp người đọc hiểu thêm về namespace
Windows.Forms
. Giao diện của ứng
dụng sau khi hoàn chỉnh sẽ như sau :
Lập trình với C# Gvhd: Nguyễn Tấn Trần Minh Khang
120
Hình 13-7 Giao diện người dùng của ứng dụng FileCopier.

Giao diện của ứng dụng gồm các thành phần sau :
• Labels: Các tập tin nguồn (Source Files) and Thư múc đích (Target Directory).

Buttons: Bỏ các dấu chọn trên cây bên trái (Clear), Copy, Delete, and Cancel.
• Checkbox : ghi đè lên nếu đã có sẵn ( "Overwrite if exists" )

Checkbox : hiển thị đường dẫn của mục được trọn ở cây bên phải.
• Hai cây (TreeView) chứa tập tin.
Khi người dùng nhấn vào Button ‘Copy’ thì tất các tập tin được chọn ở cây bên
trái sẽ được chép qua cây bên phải, cũng như khi nhấn vào Button ‘Delete’ thì sẽ
xóa các tập tin được chọn.
13.1.2.1 Tạo giao diện cho ứng dụng
Đầu tiên ta tạo một dự án Windows Form mới có tên FileCopier. IDE sẽ hiển thị
màn hình thiết kế (
Designer
) lên, ta sẽ thực hiện kéo thả các Label, Button,

false
và chỉ liệt ke thư mục. Mặc nhiên
thì điều khiển cây cho phép chọn nhiều mục một lúc, nhưng ta sẽ chỉnh lại sao cho
chỉ cây bên trái
tvwSource mới được chọn nhiều mục một lúc,bên phải thì không.
Ta sẽ tạo ra một hàm đẩy dữ liệu vào cây :
private void FillDirectoryTree(TreeView tvw, bool isSource)
Có 2 tham số :
TreeView tvw
: điều khiển cây cần đẩy dữ liệu vào
Bool isSource: cờ xác định là dữ liệu đẩy cho cây. Nếu isSource
là true thì cây sẽ liệt kê cả tập tin và thư mục, false thì chỉ có
tập tin.
Hàm này sẽ được dùng chung cho cả hai điều khiển cây :
Lập trình với C# Gvhd: Nguyễn Tấn Trần Minh Khang
122
FillDirectoryTree(tvwSource, true);
FillDirectoryTree(tvwTargetDir, false);
Đối tượng TreeNode
Điều khiển
TreeView có một thuộc tính Nodes. thuộc tính này nhận vào một đối
tượng
TreeNodeCollection
, đối tượng này thực chất là một mảng chứa các đối
tượng
TreeNode
, mỗi một
TreeNode
là một nút trên cây.
Trước tiên ta cần khởi tạo cây về rỗng :

{
GetSubDirectoryNodes(ndRoot, ndRoot.Text, true);
}
else
{
GetSubDirectoryNodes(ndRoot, ndRoot.Text, false);
}
Lập trình với C# Gvhd: Nguyễn Tấn Trần Minh Khang
123
Duyệt đệ qui trên các thư mục con
Hàm GetSubDirectoryNodes() bắt đầu bằng việc gọi hàm GetDirectories() để nhận
về một danh sách các đối tượng DirectoryInfo :
private void GetSubDirectoryNodes(
TreeNode parentNode, string fullName, bool getFileNames)
{
DirectoryInfo dir = new DirectoryInfo(fullName);
DirectoryInfo[] dirSubs = dir.GetDirectories( );
Ở đây ta thấy node truyền vào có tên là parentNode ( nút cha ), nghĩa là những nút
sau này sẽ được xem là nút con của nó. Bạn sẽ rõ hơn khi tìm hiểu hết hàm này.
Ta tiến hành duyệt qua danh sách các thư mục con dirSubs, bỏ qua các mục có trạng
thái là ẩn ( Hidden ).
foreach (Directory dirSub in dirSubs)
{
if ( (dirSub.Attributes & FileSystemAttributes.Hidden) != 0 )
{
continue;
}
FileSystemAttributes là biến có kiểu enum, nó chứa một số giá trị như : Archive,
Compressed, Encrypted, Hidden, Normal, ReadOnly …Nếu như mục hiện hành
không ở trạng thái ẩn, ta sẽ tạo ra một TreeNode mới với tham số là tên của nó. Sau

‘Copy’,’Delete’ hay ‘Clear’.
Ta sẽ khảo sát sự kiện trên điều khiển cây trước.
Sự kiện chọn một nút trên điều khiển cây bên trái
Khi người dùng muốn chọn một tập tin hay thư mục để chép hay xóa. Ứng với mỗi
lần chọn sẽ phát sinh ra một số sự kiện tương ứng. Ta sẽ bắt sự kiện AfterCheck của
điều khiển cây. Ta gõ vào các đoạn mã sau :
tvwSource.AfterCheck +=
new TreeViewEventHandler( this.tvwSource_AfterCheck );
Ta viết lệnh thực thi cho hàm bắt sự kiện AfterCheck có tên là
tvwSource_AfterCheck, hàm này có hai tham số : đầu tiên là biến Sender chứa
thông tin về đối tượng phát sinh ra sự kiện, thứ hai là đối tượng
TreeViewEventArgs chứa thông tin về sự kiện phát ra. Ta sẽ đánh dấu là chọn cho
thư mục được chọn và tất cả các tập tin hay thư mục con của thư mục đó thông qua
hàm SetCheck() :
protected void tvwSource_AfterCheck (
object sender, System.Windows.Forms.TreeViewEventArgs e)
{
SetCheck(e.node,e.node.Checked);
}
Hàm SetCheck() sẽ tiến hành thực hiện đệ qui trên nút hiện hành, hàm gồm hai
tham số : nút cần đánh dấu và cờ xác định là đánh dấu hay bỏ đánh dấu chọn, nếu
thuộc tính Count bằng không ( nghĩa là nút này là nút lá ) thì ta sẽ đánh dấu chọn
cho nút đó. Nếu không ta gọi đệ qui lại hàm SetCheck() :
private void SetCheck(TreeNode node, bool check)
{
node.Checked = check;
foreach (TreeNode n in node.Nodes)
{
if (node.Nodes.Count == 0)
{


Nhờ tải bản gốc
Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status