using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
namespace ch3_4
{
 /// <summary>
 /// Form1 的摘要说明。
 /// </summary>
 public class Form1 : System.Windows.Forms.Form
 {
  public Form1()
  {
   //
   // Windows 窗体设计器支持所必需的
   //
   InitializeComponent();
   //初始化TreeView的根节点
   InitialTreeView();
  
   //
   // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
   //
  }
  /// <summary>
  /// 清理所有正在使用的资源。
  /// </summary>
  protected override void Dispose( bool disposing )
  {
   if( disposing )
   {
    if (components != null)
    {
     components.Dispose();
    }
   }
   base.Dispose( disposing );
  }
          
  private void InitialTreeView()
  {
      //将驱动器字符串数组设为空
   string[] drivers=null;
   //检索此计算机上逻辑驱动器的名称
   drivers=Directory.GetLogicalDrives();
   int i=0;
   //初始化每一个逻辑驱动器
   while ( i<drivers.GetLength(0))
   {
    this.treeView1.Nodes.Add(new TreeNode(drivers[i],1,1));
    string path=drivers[i];
    string[] dirs=null;
    try
    {
     //获得指定驱动器中第一级目录的名称
     dirs=Directory.GetDirectories(path);
    }
    catch(Exception  error)
    {
     //错误处理为空,即忽略
    }
    if (dirs!=null)
    {
     //为每一个代表驱动器的根节点添加子节点
     for (int j=0;j<dirs.Length;j++)
     {
      //获得节点的去掉路径后的目录名
      TreeNode node = new TreeNode(dirs[j].ToString().Substring(dirs[j].ToString().LastIndexOf(" \\")+1));
      //设置不选定状态下的图标
      node.ImageIndex =2;
      //设置打开状态下的图标
      node.SelectedImageIndex =0;
      //添加节点
      this.treeView1.Nodes[i].Nodes.Add(node);
     }
    }
    //继续下一个循环
    i++;
   }
  
  }
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main()
  {
   Application.Run(new Form1());
  }
  private void treeView1_BeforeExpand(object sender, System.Windows.Forms.TreeViewCancelEventArgs e)
  {
   
            //获取发出信息的节点
   TreeNode node=e.Node;
   //设置它为treeView的当前节点
   this.treeView1.SelectedNode=node;
   string path=node.FullPath;
   string[] dirs=null;
   try
   {
    //获得当前节点所有的子节点
    dirs=Directory.GetDirectories(path);
   }
   catch(Exception  error)
   {
    //错误处理为空,即忽略
   }
           
   if (dirs!=null)
   {
    //为每一个当前节点的字节点添加子节点
    for (int j=0;j<dirs.Length;j++)
    { 
     //如果当前节点的子节点数为0,则为它添加子节点
     //否则说明已经添加过或则没有子目录
     if (node.Nodes[j].Nodes.Count==0)
     {
      //调用函数为子节点添加子节点
      addDirectroy(node.Nodes[j],dirs[j]);
     }
     
    }
   }
  }
  private void addDirectroy(TreeNode node,string path)
  {
   
    string[] dirs=null;
    try
    {
     dirs=Directory.GetDirectories(path);
    }
    catch(Exception  e)
    {
     //错误处理为空,即忽略
    }
    if(dirs!=null)
    {
     for (int j=0;j<dirs.Length;j++)
     {
      //添加新的子节点
      TreeNode nodeNew= new TreeNode(dirs[j].ToString().Substring(dirs[j].ToString().LastIndexOf(" \\")+1));
      //设置不选定状态下的图标
      nodeNew.ImageIndex =2;
      //设置打开状态下的图标
      nodeNew.SelectedImageIndex =0;
      node.Nodes.Add(nodeNew);
     }
    }
  
  }
  
  private void checkBox1_CheckedChanged(object sender, System.EventArgs e)
  {
   this.treeView1.Sorted = this.checkBox1.Checked;
  }
  private void checkBox2_CheckedChanged(object sender, System.EventArgs e)
  {
   this.treeView1.ShowLines=this.checkBox2.Checked;
  }
  private void checkBox3_CheckedChanged(object sender, System.EventArgs e)
  {
   this.treeView1.ShowRootLines=this.checkBox3.Checked;
  }
  private void checkBox4_CheckedChanged(object sender, System.EventArgs e)
  {
   this.treeView1.CheckBoxes=this.checkBox4.Checked;
  }
         private void checkBox5_CheckedChanged(object sender, System.EventArgs e)
  {
   this.treeView1.ShowPlusMinus=this.checkBox5.Checked;
  }
  private void checkBox6_CheckedChanged(object sender, System.EventArgs e)
  {
   this.treeView1.HideSelection=this.checkBox6.Checked;
  }
  private void checkBox7_CheckedChanged(object sender, System.EventArgs e)
  {
   this.treeView1.HotTracking=this.checkBox7.Checked;
  }
 }
}