Chia sẻ

Nội dung

Giới thiệu

[C#] Trong bài viết này csharpcanban.com sẽ hướng dẫn các bạn sử dụng Treeview Control để lập trình phần mềm hiện danh sách ổ đĩa và thư mục trên Winform giống như Windows Explorer, có ví dụ và code Demo, các bạn có thể tải về để sử dụng.

Khi lập trình ứng dụng với C# sẽ xuất hiện nhiều tình huống mà lập trình viên cần phải sử dụng Treeview Control . Treeview trong Winform là một Control thường được sử dụng để hiển thị các Items dưới dạng cây, các bạn có thể xem lại bài học cơ bản Hướng dẫn sử dụng Treeview Control ở đây.

Trước khi vào bài này, các bạn cần nắm vững các kiến thức sau:

– Cơ bản về mảng;

– Cơ bản về lớp System.IO;

Xây dựng phần mềm

Bước 1. Tạo một Project Winform mới và đặt tên là HDTreeviewDiskAndFolder

Bước 2. Kéo vào Form1 một Treeview

Bước 3. Kéo vào Form1 một ImageList

Bước 4. Tìm các icon trên mạng để thêm vào Imagelist,

Lưu ý:

Csharpcanban.com thường tìm icon ở iconarchive.com.

– Sử dụng các icon có kích thước 16×16.

– Sử dụng các mũi tên Lên hoặc Xuống để thay đổi chỉ số (Index) của icon.

Bước 5. Lựa chọn thuộc tính ImageList cho Treeview, thực hiện như sau

– Nhấp chuột trái vào Treeview trên Form1.

– Mở cửa sổ con Properties của Treeview

– Trong thuộc tính ImageList hãy chọn imageList1.

Bước 6. Thêm namespace using System.IO vào chương trình

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

Bước 7. Trong sự kiện Load() của Form1 thêm mã lệnh sau

Xem thêm  [C#,WPF] Tạo ứng dụng chạy với quyền quản trị

Sự kiện Load() của Form1 sẽ thực hiện ngay khi Form1 được bật lên, trong sự kiện này chúng ta sẽ thực hiện liệt kê các ổ đĩa có sẵn trên Windows.

private void Form1_Load(object sender, EventArgs e)
        {
            //Liệt kê danh sách ổ đĩa
            string[] drives = Environment.GetLogicalDrives();

            foreach (string drive in drives)
            {
                DriveInfo di = new DriveInfo(drive);
                int driveImage;

                switch (di.DriveType)    //Gán icon cho ổ đĩa
                {
                    case DriveType.CDRom:
                        driveImage = 3;
                        break;
                    case DriveType.Network:
                        driveImage = 5;
                        break;
                    case DriveType.NoRootDirectory:
                        driveImage = 4;
                        break;
                    case DriveType.Unknown:
                        driveImage = 6;
                        break;
                    default:
                        driveImage = 2;
                        break;
                }

                TreeNode node = new TreeNode(drive.Substring(0, 1), driveImage, driveImage);
                node.Tag = drive;

                if (di.IsReady == true)
                    node.Nodes.Add("...");

                treeView1.Nodes.Add(node);
            }

        }

Bước 8. Thêm mã sau vào sự kiện BeforeExpand của Treeview.

Sự kiện BeforeExpand của Treeview lập tức được thực thi sau khi người dùng nhấp chuột vào dấu cộng (+) hoặc icon trên Treeview, sự kiện này có tác dụng liệt kê toàn bộ các Item con thông qua đường dẫn mà chúng ta sẽ lưu vào thuộc tính Tag của mỗi Item trên Treeview.

private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
        {
            if (e.Node.Nodes.Count > 0)
            {
                if (e.Node.Nodes[0].Text == "..." && e.Node.Nodes[0].Tag == null)
                {
                    e.Node.Nodes.Clear();

                    //Liệt kê danh sách thư mục con
                    string[] dirs = Directory.GetDirectories(e.Node.Tag.ToString());

                    foreach (string dir in dirs)
                    {
                        DirectoryInfo di = new DirectoryInfo(dir);
                        TreeNode node = new TreeNode(di.Name, 0, 1);

                        try
                        {
                            //Lưu đường dẫn vào thuộc tính tag của node để sau này sử dụng
                            node.Tag = dir;

                            //Kiểm tra xem có thư mục con hay không thì thêm 3 dấu chấm
                            if (di.GetDirectories().Count() > 0)
                                node.Nodes.Add(null, "...", 0, 0);
                        }
                        catch (UnauthorizedAccessException)
                        {
                            //Hiển thị Icon thư mục đã bị khóa
                            node.ImageIndex = 1;
                            node.SelectedImageIndex = 1;
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "DirectoryLister",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        finally
                        {
                            e.Node.Nodes.Add(node);
                        }
                    }
                }
            }

        }

Và đây là thành quả!!!

Mã nguồn phần mềm

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace HDTreeviewDiskAndFolder
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //Liệt kê danh sách ổ đĩa
            string[] drives = Environment.GetLogicalDrives();

            foreach (string drive in drives)
            {
                DriveInfo di = new DriveInfo(drive);
                int driveImage;

                switch (di.DriveType)    //Gán icon cho ổ đĩa
                {
                    case DriveType.CDRom:
                        driveImage = 3;
                        break;
                    case DriveType.Network:
                        driveImage = 5;
                        break;
                    case DriveType.NoRootDirectory:
                        driveImage = 4;
                        break;
                    case DriveType.Unknown:
                        driveImage = 6;
                        break;
                    default:
                        driveImage = 2;
                        break;
                }

                TreeNode node = new TreeNode(drive.Substring(0, 1), driveImage, driveImage);
                node.Tag = drive;

                if (di.IsReady == true)
                    node.Nodes.Add("...");

                treeView1.Nodes.Add(node);
            }

        }

        private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
        {
            if (e.Node.Nodes.Count > 0)
            {
                if (e.Node.Nodes[0].Text == "..." && e.Node.Nodes[0].Tag == null)
                {
                    e.Node.Nodes.Clear();

                    //Liệt kê danh sách thư mục con
                    string[] dirs = Directory.GetDirectories(e.Node.Tag.ToString());

                    foreach (string dir in dirs)
                    {
                        DirectoryInfo di = new DirectoryInfo(dir);
                        TreeNode node = new TreeNode(di.Name, 0, 1);

                        try
                        {
                            //Lưu đường dẫn vào thuộc tính tag của node để sau này sử dụng
                            node.Tag = dir;

                            //Kiểm tra xem có thư mục con hay không thì thêm 3 dấu chấm
                            if (di.GetDirectories().Count() > 0)
                                node.Nodes.Add(null, "...", 0, 0);
                        }
                        catch (UnauthorizedAccessException)
                        {
                            //Hiển thị Icon thư mục đã bị khóa
                            node.ImageIndex = 1;
                            node.SelectedImageIndex = 1;
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "DirectoryLister",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        finally
                        {
                            e.Node.Nodes.Add(node);
                        }
                    }
                }
            }

        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            System.Diagnostics.Process.Start("https://csharpcanban.com");
        }
    }
}

Lời kết

Như vậy, trên đây csharpcanban.com đã Hướng dẫn các bạn xây dựng một chương trình Sử dụng Treeview để hiện danh sách ổ đĩa và thư mục bằng C#. Thực sự là quá đơn giản đúng không các bạn. Hãy thực hành ngay để nắm được nguyên lý hoạt đông của Treeview nhé các bạn. Nếu gặp khó khăn khi Sử dụng Treeview để xây dựng phần mềm hiển thị danh sách ổ đĩa và thư mục hãy đặt câu hỏi trong phần bình luận ở dưới đây. Csharpcanban.com sẽ hướng dẫn các bạn chi tiết nhất.

Xem thêm  [C#] Hướng dẫn sử dụng hộp thoại Print Dialog

Trong các bài tiếp theo mình sẽ tiếp tục hướng dẫn các bạn sử dụng Microsoft Visual Studio C#, sử dụng các Control trong C#, đó là sử dụng Combobox, Listbox, Radio Button, và nhiều Control khác, hãy thường xuyên theo dõi website csharpcanban.com để cập nhật các bài học mới nhé các bạn.

Bản quyền

Nội dung trên csharpcanban.com được biên soạn, biên dịch từ nhiều nguồn khác nhau, đồng thời đã được viết thành chương trình chạy. Csharpcanban.Com bảo lưu mọi quyền đối với những bài viết này. Mọi hình thức sao chép đều cần phải được Csharpcanban.Com cấp phép.

Tải CODE

Để tải Code, các bạn hãy nhấp vào Nốt bấm dưới đây. Do mình dử dụng dịch vụ ưu trữ của MediaFire cho nên các bạn hoàn toàn yên tâm là không có virus đâu nhé.

Mật mã giải nén: csharpcanban.com

ĐĂNG KÝ MUA HÀNG

    Email (*)

    Điện thoại (*)

    Tên sản phẩm/Dịch vụ:


    Chia sẻ

    Trả lời

    Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *