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
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.
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