功能实现(模拟资源管理器左边的treeview功能):
1.初始化时候加载"我的电脑"里面的驱动器(包含移动介质),
2.当选择驱动器时候,打开(折叠)文件(夹)列表.并确定是否包含子文件(夹)
3.选择文件(夹)时候,打开(折叠)文件(夹)列表.并确定是否包含子文件(夹)
特点:
只加载需要目录,并非一次性加载全部内容
=============================================
程序界面:treeview控件treeviewPhoto
============================================
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Text.RegularExpressions;
namespace CarShow
{
public partial class PhotoManage : Form
{
public PhotoManage()
{
InitializeComponent();
}
private void PhotoManage_Load(object sender, EventArgs e)
{
// statusLabel.Text = "程序制作:海风 mngzilin csdn 时间:2010-04-10";
InitPhotoList();
}
void InitTree()
{
ImageList img = new ImageList();
Image temp = Image.FromFile("ico//disk.png");
img.Images.Add(new Bitmap(temp));
temp.Dispose();
temp = Image.FromFile("ico//folder.png");
img.Images.Add(new Bitmap(temp));
temp.Dispose();
temp = Image.FromFile("ico//file.png");
img.Images.Add(new Bitmap(temp));
temp.Dispose();
treeviewPhoto.ImageList = img;
foreach (DriveInfo Dri in DriveInfo.GetDrives())
{
if (Dri.DriveType == DriveType.Fixed || Dri.DriveType == DriveType.Removable)
{
TreeNode tn=treeviewPhoto.Nodes.Add(Dri.Name);
tn.ImageIndex =tn.SelectedImageIndex= 0;
BindNode(tn, Dri.RootDirectory);
}
}
}
void BindNode(TreeNode tn,DirectoryInfo di)//绑定节点
{
try
{
tn.Nodes.Clear();
FileSystemInfo[] fsi = di.GetFileSystemInfos();
foreach (FileSystemInfo fs in fsi)
{
if (fs is DirectoryInfo)
{
TreeNode TN=tn.Nodes.Add((fs as DirectoryInfo).Name);
TN.ImageIndex =TN.SelectedImageIndex= 1;
if ((fs as DirectoryInfo).GetFileSystemInfos().GetEnumerator().MoveNext())//入过下级有内容
TN.Nodes.Add("Loading...");//绑定前显示Loading字样
}
if (fs is FileInfo && Regex.IsMatch((fs as FileInfo).Extension, ".bmp|.png|.jpg|.jpeg|.gif", RegexOptions.IgnoreCase))//如果是图片
{
TreeNode TN = tn.Nodes.Add((fs as FileInfo).Name,(fs as FileInfo).Name);
TN.ImageIndex =TN.SelectedImageIndex= 2;
}
}
}
catch { }
}
private void treeviewPhoto_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Node.IsExpanded)//当点击节点时候
{
BindNode(e.Node, new DirectoryInfo(e.Node.FullPath));//绑定下级节点
}
}
}
}