用TreeView控件实现资源管理器(显示本地硬盘下所有文件夹和文件,并可以浏览图片)(示例代码下载)
用TreeView控件实现资源管理器(显示本地硬盘下所有文件夹和文件,并可以浏览图片)(示例代码下载) (一).说明
用TreeView控件实现资源管理器,显示本地硬盘下所有文件夹和文件,并可以浏览图片
(二).图片示例
(三).代码
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
namespace 图像格式转II
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class FormMain : System.Windows.Forms.Form
{
private System.Windows.Forms.TreeView treeViewDir;
private System.Windows.Forms.Splitter splitter1;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.PictureBox pictureBox;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
private Bitmap bitmap;
//public void Bitmap(string filename,bool useIcm);//**********
public FormMain()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
pictureBox.Top=treeViewDir.Top;
pictureBox.Left=treeViewDir.Left;
pictureBox.Width=panel1.Width;
pictureBox.Height=panel1.Height;
bitmap=null;
FillDirTree();
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.treeViewDir = new System.Windows.Forms.TreeView();
this.splitter1 = new System.Windows.Forms.Splitter();
this.panel1 = new System.Windows.Forms.Panel();
this.pictureBox = new System.Windows.Forms.PictureBox();
this.panel1.SuspendLayout();
this.SuspendLayout();
//
// treeViewDir
//
this.treeViewDir.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(0)), ((System.Byte)(192)), ((System.Byte)(192)));
this.treeViewDir.Dock = System.Windows.Forms.DockStyle.Left;
this.treeViewDir.ImageIndex = -1;
this.treeViewDir.Location = new System.Drawing.Point(0, 0);
this.treeViewDir.Name = 'treeViewDir';
this.treeViewDir.SelectedImageIndex = -1;
this.treeViewDir.Size = new System.Drawing.Size(136, 373);
this.treeViewDir.TabIndex = 0;
this.treeViewDir.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViewDir_AfterSelect);
this.treeViewDir.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.treeViewDir_BeforeExpand);
//
// splitter1
//
this.splitter1.Location = new System.Drawing.Point(136, 0);
this.splitter1.Name = 'splitter1';
this.splitter1.Size = new System.Drawing.Size(8, 373);
this.splitter1.TabIndex = 1;
this.splitter1.TabStop = false;
//
// panel1
//
this.panel1.Controls.Add(this.pictureBox);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(144, 0);
this.panel1.Name = 'panel1';
this.panel1.Size = new System.Drawing.Size(360, 373);
this.panel1.TabIndex = 2;
this.panel1.Resize += new System.EventHandler(this.panel1_Resize);
//
// pictureBox
//
this.pictureBox.BackColor = System.Drawing.Color.FromArgb(((System.Byte)(192)), ((System.Byte)(192)), ((System.Byte)(255)));
this.pictureBox.Dock = System.Windows.Forms.DockStyle.Fill;
this.pictureBox.Location = new System.Drawing.Point(0, 0);
this.pictureBox.Name = 'pictureBox';
this.pictureBox.Size = new System.Drawing.Size(360, 373);
this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.pictureBox.TabIndex = 0;
this.pictureBox.TabStop = false;
//
// FormMain
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(504, 373);
this.Controls.Add(this.panel1);
this.Controls.Add(this.splitter1);
this.Controls.Add(this.treeViewDir);
this.Name = 'FormMain';
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = '图像浏览';
this.panel1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private void FillDirTree()
{
string[] drivers=Environment.GetLogicalDrives();
for(int i=0;i<drivers.Length;i++)
{
Console.WriteLine('i={0}',i);
if(PlatformInvokeKernel32.GetDriveType(drivers[i])==PlatformInvokeKernel32.DRIVE_FIXED)
{
DirNode root=new DirNode(drivers[i]);
treeViewDir.Nodes.Add(root);
AddDirs(root);
}
}
}
private void AddDirs(TreeNode node)
{
try
{
DirectoryInfo dir=new DirectoryInfo(GetPathFromNode(node));
DirectoryInfo[] e=dir.GetDirectories();
FileInfo[] f=dir.GetFiles();
string name;
for(int i=0;i<e.Length;i++)
{
name=e[i].Name;
if(!name.Equals('.')&&!name.Equals('..'))
{
node.Nodes.Add(new DirNode(name));
}
}
for(int i=0;i<f.Length;i++)
{
name=f[i].Name;
node.Nodes.Add(new DirNode(name));
}
}
catch
{
}
}
private string GetPathFromNode(TreeNode node)
{
if(node.Parent==null)
{
return node.Text;
}
return Path.Combine(GetPathFromNode(node.Parent),node.Text);
}
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new FormMain());
}
private void panel1_Resize(object sender, System.EventArgs e)
{
pictureBox.Top=treeViewDir.Top;
pictureBox.Left=treeViewDir.Left;
if(bitmap!=null)
{
if(bitmap.Width>bitmap.Height)
{
pictureBox.Width=panel1.Width;
pictureBox.Height=
(int)((double) bitmap.Height*panel1.Width/bitmap.Width);
}
else
{
pictureBox.Height=panel1.Height;
pictureBox.Width=
(int)((double) bitmap.Width*panel1.Height/bitmap.Height);
}
}
else
{
pictureBox.Width=panel1.Width;
pictureBox.Height=panel1.Height;
}
pictureBox.Refresh();
}
private void treeViewDir_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
if(bitmap!=null)
{
bitmap.Dispose();
}
try
{
string fileName=GetPathFromNode(e.Node);
bitmap=new Bitmap(fileName);
FileInfo f=new FileInfo(fileName);
if(bitmap.Width>bitmap.Height)
{
pictureBox.Width=panel1.Width;
pictureBox.Height=
(int)((double) bitmap.Height*panel1.Width/bitmap.Width);
}
else
{
pictureBox.Height=panel1.Height;
pictureBox.Width=
(int)((double) bitmap.Width*panel1.Height/bitmap.Height);
}
pictureBox.Image=bitmap;
this.Text='图像浏览'+f.Name;
}
catch
{
pictureBox.Width=panel1.Width;
pictureBox.Height=panel1.Height;
}
}
private void treeViewDir_BeforeExpand(object sender, System.Windows.Forms.TreeViewCancelEventArgs e)
{
DirNode nodeExpanding=(DirNode)e.Node;
if(!nodeExpanding.SubDirectoriesAdded)
{
AddSubDirs(nodeExpanding);
}
}
private void AddSubDirs(DirNode node)
{
for(int i=0;i<node.Nodes.Count;i++)
{
AddDirs(node.Nodes[i]);
}
node.SubDirectoriesAdded=true;
}
}
}
(四).示例代码下载
http://www.cnblogs.com/Files/ChengKing/TreeView_WinForm.rar