http://kmlinux/~culik/wiki
namespace tree
{
public class MyNode : TreeNode
{
public string path;
public bool scanned = false;
}
}
private void showDrives (TreeNodeCollection above)
{
DriveInfo [] info = DriveInfo.GetDrives ();
foreach (DriveInfo d in info)
{
MyNode node = new MyNode();
node.path = d.ToString();
node.Text = d.Name;
node.ToolTipText = d.ToString();
above.Add(node);
showDir2 (node, d.RootDirectory, 1);
}
}
private void showDir2 (MyNode above,
DirectoryInfo dir,
int level)
{
try
{
above.scanned = true;
foreach (DirectoryInfo d in dir.GetDirectories())
{
MyNode node = new MyNode();
node.path = d.FullName;
node.Text = d.Name;
node.ToolTipText = d.FullName;
above.Nodes.Add(node);
if (level > 1)
showDir2(node, d, level - 1);
}
}
catch (Exception e)
{
TreeNode node = new TreeNode();
node.Text = e.ToString();
node.ForeColor = Color.Red;
}
}
private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
// e.Cancel = true;
MyNode node = e.Node as MyNode;
if (node != null)
showDir3 (node, 2);
}
private void showDir3 (MyNode above, int level)
{
if (above.scanned)
{
if (level > 1)
foreach (MyNode n in above.Nodes)
showDir3 (n, level - 1);
}
else
{
showDir2 (above, new DirectoryInfo (above.path), level);
}
}
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
listView1.Items.Clear ();
while (tabControl1.TabPages.Count >= 2)
tabControl1.TabPages.RemoveAt (1);
MyNode node = e.Node as MyNode;
if (node != null)
{
try
{
DirectoryInfo dir = new DirectoryInfo(node.path);
FileInfo[] files = dir.GetFiles();
foreach (FileInfo f in files)
{
ListViewItem item = new ListViewItem();
item.Text = f.Name;
item.ToolTipText = f.FullName;
item.SubItems.Add("" + f.Length);
item.SubItems.Add("" + f.LastWriteTime);
listView1.Items.Add(item);
/*
Icon icon = Icon.ExtractAssociatedIcon(f.FullName);
imageList1.Images.Add(icon);
item.ImageIndex = imageList1.Images.Count;
*/
string key = f.Extension;
bool img = false;
if (key == ".jpg" || key == ".bmp")
{
key = f.Name;
img = true;
}
if (!imageList1.Images.ContainsKey(key))
{
if (!img)
{
Icon icon = Icon.ExtractAssociatedIcon(f.FullName);
imageList1.Images.Add(key, icon);
}
else
{
Bitmap p = new Bitmap (f.FullName);
Bitmap t = new Bitmap (imageList1.ImageSize.Width,
imageList1.ImageSize.Height);
Graphics g = Graphics.FromImage (t);
g.DrawImage (p, 0, 0, t.Width, t.Height);
imageList1.Images.Add(key, t);
}
}
item.ImageIndex = imageList1.Images.IndexOfKey(key);
}
}
catch (Exception ee)
{
ListViewItem item = new ListViewItem ();
item.Text = ee.ToString();
item.ForeColor = Color.Red;
}
}
}
private void showDir(TreeNode above, string path)
{
// using System.IO;
DirectoryInfo dir = new DirectoryInfo (path);
DirectoryInfo [] info = dir.GetDirectories ();
foreach (DirectoryInfo d in info)
{
TreeNode node = new TreeNode ();
node.Text = d.Name;
node.ToolTipText = d.FullName;
if (above == null)
treeView1.Nodes.Add(node);
else
above.Nodes.Add(node);
showDir(node, d.FullName);
}
}
private void listView1_DoubleClick(object sender, EventArgs e)
{
foreach (ListViewItem item in listView1.SelectedItems)
{
String s = item.ToolTipText;
TabPage page = new TabPage();
page.Text = s;
tabControl1.TabPages.Add(page);
if (s.EndsWith(".jpg") || s.EndsWith(".bmp"))
{
Panel p = new Panel();
p.Parent = page;
p.Dock = DockStyle.Fill;
p.BackgroundImage = new Bitmap(s);
}
}
}