Skip to content
1

Sử Dụng TreeView Để Hiển Thị Danh Sách Ổ Đĩa & Thư Mục

tải xuống

Bạn cần hiển thị một cây thư mục trong TreeView. Tuy nhiên, việc lấp đầy cấu trúc cây thư mục khi khởi động tốn quá nhiều thời gian.
Ngoài ra, bạn có thể sử dụng kỹ thuật đệ quy để xây dựng toàn bộ cây thư mục. Tuy nhiên, việc quét hệ thống file theo cách này có thể chậm, đặc biệt đối với các ổ đĩa lớn. Vì lý do này, các phần mềm quản lý file chuyên nghiệp (bao gồm Windows Explorer) sử dụng một kỹ thuật khác: chỉ hiển thị những thông tin nào người dùng cần đến.
TreeView rất thích hợp với cách tiếp cận này vì nó cung cấp sự kiện BeforeExpand (sự kiện này phát sinh trước khi một cấp mới được hiển thị). Bạn có thể sử dụng một placeholder (như dấu hoa thị hay nút rỗng) trong tất cả các nhánh chưa được thêm vào. Điều này cho phép bạn thêm vào các phần của cây thư mục khi chúng được hiển thị.
Để sử dụng kiểu giáp pháp này, yêu cầu bạn cần có một số khái niệm sau:
+ Cơ bản về mảng
+ Cơ bản về lớp System.IO
+ Cơ bản về lập trình win form với C# (hay trên nền .Net)
+ Cơ bản cách làm việc với TreeView.

Thêm điều khiển TreeView lên form và thiết lập mã lệnh cho nó:
+ Tạo một project Visual C# – Windows Application mới, đặt tên tùy ý (ở đây mình đặt là SExplorer101)
+ Thêm control TreeView vào Form1, tên mặc định: treeView1. Đặt thuộc tính: Dock: Fill để có thể co giãn TreeView theo Form1 (chỉ để dễ theo dõi kết quả hiển thị).
+ Trong phần code của Form1 thêm using System.IO; vào bên dưới danh sách using để có thể sử dụng các lớp liên quan.
+ Sự kiện:
- Form1_Load (bắt đầu load form đồng thời khởi tạo các ổ đĩa có trong máy lên TreeView)
Code:

       private void Form1_Load(object sender, EventArgs e)
        {
            String[] drives = Directory.GetLogicalDrives(); //Lấy tất cả ổ đĩa và lưu vào mảng drives
            for (int i = 0; i < drives.Length; i++) //Thêm các ổ đĩa vào TreeView đồng thời tạo các nút con “giả” (*) cho nó
            {
                TreeNode tn = new TreeNode(drives[i]);
                treeView1.Nodes.Add(tn); // Ổ đĩa
                tn.Nodes.Add(new TreeNode(“*”)); // Nút con “giả”
            }
        }

- treeView1_BeforeExpand (trước khi người dùng mở các nút cha thì đồng thời thêm vào danh sách thư mục thật bên trong nhánh cha đó)
. Có 1 điểm lưu ý thế này: Nếu như thư mục đó không có thư mục con thì không thêm nút con “giả” vào cho nó.
. Xóa nút con “giả” đã tạo trước đó
. Sắp xếp danh sánh thư mục con cho rõ ràng và chuyên nghiệp
. Thêm WaitCursor và bỏ WaitCursor đi khi đã thực hiện xong
. Bẫy lỗi (nếu có).
Code:

       private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
        {
            Form1.ActiveForm.Cursor = System.Windows.Forms.Cursors.WaitCursor;
            if (e.Node.Nodes.Count != 0)
                e.Node.Nodes.RemoveAt(0); //Xóa nút con “giả”
            String[] dirs;
            try
            {
 
                dirs = Directory.GetDirectories(e.Node.FullPath); //Lấy danh sách thư mục
                Array.Sort(dirs); //và sắp xếp chúng
            }
            catch (Exception pe) //Bẫy lỗi
            {
                MessageBox.Show(pe.Message, ”Error!”);
                goto err;
            }
            for (int i = 0; i < dirs.Length; i++) //thêm danh sách thư mục vào nút con đó
            {
                String dirName = dirs[i];
                TreeNode tn = new TreeNode(Path.GetFileName(dirName));
                e.Node.Nodes.Add(tn);
                String[] subdirs;
                try
                {
                    subdirs = Directory.GetDirectories(dirs[i]); // kiểm tra xem thư mục mới vừa thêm có thư mục con hay không. Nếu có thì thêm một nút con “giả” vào.
                    if (subdirs.Length > 0)
                        tn.Nodes.Add(“temp”);
                }
                catch
                { goto err; }
 
            }
        err:
            Form1.ActiveForm.Cursor = System.Windows.Forms.Cursors.Default;
        }

- treeView1_BeforeSelect (khi người dùng chọn một nút bất kỳ nào đó, xử lý để nhận biết thông tin)
Code:

       private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
        {
            Form1.ActiveForm.Text = e.Node.FullPath;
        }

Tới đây coi như đã hoàn tất, bạn có thể biên dịch và chạy thử, kết quả đạt được sẽ như sau:

VN:F [1.9.22_1171]
Rating: 10.0/10 (2 votes cast)
Sử Dụng TreeView Để Hiển Thị Danh Sách Ổ Đĩa & Thư Mục, 10.0 out of 10 based on 2 ratings

Chỉnh sửa lần cuối:

Comments

  1. Jun 4 2013

    Enjoy your blog )
    http://qqfauzm.com” my blog

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
    Reply

(bắt buộc)
(bắt buộc)

Ghi chú: Bạn có thể sử dụng tag HTML . Email của bạn sẽ được giữ bí mật.

Subcrible

Close Box

A password will be e-mailed to you.

Please enter your username or email address.
You will receive a link to reset the password via email.