<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FCSharp_Tutorial%2FGUI_Windows_Forms%2FFile_Explore</id>
		<title>Csharp/CSharp Tutorial/GUI Windows Forms/File Explore - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FCSharp_Tutorial%2FGUI_Windows_Forms%2FFile_Explore"/>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/GUI_Windows_Forms/File_Explore&amp;action=history"/>
		<updated>2026-04-29T20:33:49Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/GUI_Windows_Forms/File_Explore&amp;diff=5349&amp;oldid=prev</id>
		<title> в 15:31, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/GUI_Windows_Forms/File_Explore&amp;diff=5349&amp;oldid=prev"/>
				<updated>2010-05-26T15:31:53Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 15:31, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/GUI_Windows_Forms/File_Explore&amp;diff=5350&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/CSharp_Tutorial/GUI_Windows_Forms/File_Explore&amp;diff=5350&amp;oldid=prev"/>
				<updated>2010-05-26T12:15:05Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==A File Explore Clone==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt;/* Quote from &lt;br /&gt;
Programming .NET Windows Applications&lt;br /&gt;
By Jesse Liberty, Dan Hurwitz&lt;br /&gt;
First Edition October 2003 &lt;br /&gt;
Pages: 1246 (More details)&lt;br /&gt;
*/&lt;br /&gt;
using System;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Collections;&lt;br /&gt;
using System.ruponentModel;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.IO;&lt;br /&gt;
using System.Diagnostics;    //  for Process.Start&lt;br /&gt;
namespace csExplorerClone&lt;br /&gt;
{&lt;br /&gt;
  public class Form1 : System.Windows.Forms.Form&lt;br /&gt;
  {&lt;br /&gt;
    private System.Windows.Forms.Splitter splitter1;&lt;br /&gt;
    private System.Windows.Forms.ListView lv;&lt;br /&gt;
    private System.Windows.Forms.TreeView tvw;&lt;br /&gt;
    private System.Windows.Forms.MainMenu mainMenu1;&lt;br /&gt;
    private System.Windows.Forms.MenuItem menuItem1;&lt;br /&gt;
    private System.Windows.Forms.MenuItem mnuSmallIcons;&lt;br /&gt;
    private System.Windows.Forms.MenuItem mnuLargeIcons;&lt;br /&gt;
    private System.Windows.Forms.MenuItem mnuList;&lt;br /&gt;
    private System.Windows.Forms.MenuItem mnuDetails;&lt;br /&gt;
    &lt;br /&gt;
    public enum ColumnType&lt;br /&gt;
    {&lt;br /&gt;
      Alpha,&lt;br /&gt;
      Numeric,&lt;br /&gt;
      DateTimeValue&lt;br /&gt;
    }&lt;br /&gt;
    /// &amp;lt;summary&amp;gt;&lt;br /&gt;
    /// Required designer variable.&lt;br /&gt;
    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;
    private System.ruponentModel.Container components = null;&lt;br /&gt;
    public Form1()&lt;br /&gt;
    {&lt;br /&gt;
      InitializeComponent();&lt;br /&gt;
      //  Similar to TreeViews program&lt;br /&gt;
      //  Use an array to add filenames to the ImageLists&lt;br /&gt;
      String[] arFiles = {&lt;br /&gt;
        @&amp;quot;C:\Program Files\Microsoft Visual Studio .NET\Common7\&amp;quot; + &lt;br /&gt;
                @&amp;quot;Graphics\icons\computer\form.ico&amp;quot;,&lt;br /&gt;
        @&amp;quot;C:\Program Files\Microsoft Visual Studio .NET\Common7\&amp;quot; + &lt;br /&gt;
                @&amp;quot;Graphics\icons\win95\clsdfold.ico&amp;quot;, &lt;br /&gt;
        @&amp;quot;C:\Program Files\Microsoft Visual Studio .NET\Common7\&amp;quot; + &lt;br /&gt;
                @&amp;quot;Graphics\icons\win95\openfold.ico&amp;quot;, &lt;br /&gt;
        @&amp;quot;C:\Program Files\Microsoft Visual Studio .NET\Common7\&amp;quot; + &lt;br /&gt;
                @&amp;quot;Graphics\bitmaps\assorted\happy.bmp&amp;quot;,&lt;br /&gt;
        @&amp;quot;C:\Program Files\Microsoft Visual Studio .NET\Common7\&amp;quot; + &lt;br /&gt;
                @&amp;quot;Graphics\bitmaps\outline\NoMask\doc.bmp&amp;quot;,&lt;br /&gt;
        @&amp;quot;C:\Program Files\Microsoft Visual Studio .NET\Common7\&amp;quot; + &lt;br /&gt;
                @&amp;quot;Graphics\bitmaps\outline\NoMask\exe.bmp&amp;quot;,&lt;br /&gt;
        @&amp;quot;C:\Program Files\Microsoft Visual Studio .NET\Common7\&amp;quot; + &lt;br /&gt;
                @&amp;quot;Graphics\bitmaps\outline\NoMask\txt.bmp&amp;quot;,&lt;br /&gt;
        @&amp;quot;C:\Program Files\Microsoft Visual Studio .NET\Common7\&amp;quot; + &lt;br /&gt;
                @&amp;quot;Graphics\bitmaps\outline\NoMask\windoc.bmp&amp;quot;&lt;br /&gt;
        };&lt;br /&gt;
      ImageList imgListSmall = new ImageList();  //  default size 16x16&lt;br /&gt;
      ImageList imgListLarge = new ImageList();&lt;br /&gt;
      imgListLarge.ImageSize = new Size(32,32);&lt;br /&gt;
      for (int i = 0; i &amp;lt; arFiles.Length; i++)&lt;br /&gt;
      {&lt;br /&gt;
        imgListSmall.Images.Add(Image.FromFile(arFiles[i]));    &lt;br /&gt;
        imgListLarge.Images.Add(Image.FromFile(arFiles[i]));    &lt;br /&gt;
      }&lt;br /&gt;
      tvw.Size = new Size(ClientSize.Width / 3, ClientSize.Height);&lt;br /&gt;
      tvw.BackColor = Color.Moccasin;&lt;br /&gt;
      tvw.HideSelection = false;  &lt;br /&gt;
      tvw.ImageList = imgListSmall;&lt;br /&gt;
      tvw.ImageIndex = 1;&lt;br /&gt;
      tvw.SelectedImageIndex = 2;&lt;br /&gt;
      //  End similar to TreeViews program&lt;br /&gt;
      lv.BackColor = Color.PaleTurquoise;&lt;br /&gt;
      lv.ForeColor = Color.DarkBlue;&lt;br /&gt;
      lv.HideSelection = false;&lt;br /&gt;
      lv.SmallImageList = imgListSmall;&lt;br /&gt;
      lv.LargeImageList = imgListLarge;&lt;br /&gt;
      lv.View = View.SmallIcon;&lt;br /&gt;
      lv.Activation = ItemActivation.Standard;  // default&lt;br /&gt;
      lv.MultiSelect = true;      // default&lt;br /&gt;
      lv.HoverSelection = false;    // default&lt;br /&gt;
      lv.Sorting = SortOrder.None;  // default&lt;br /&gt;
      lv.AllowColumnReorder = true;&lt;br /&gt;
      lv.FullRowSelect = true;&lt;br /&gt;
      lv.GridLines = true;&lt;br /&gt;
      lv.HeaderStyle = ColumnHeaderStyle.Clickable;    // default&lt;br /&gt;
      lv.LabelEdit = true;&lt;br /&gt;
      &lt;br /&gt;
      //  Similar to TreeViews program&lt;br /&gt;
      //  Fill the directory tree&lt;br /&gt;
      FillDirectoryTree();&lt;br /&gt;
    }&lt;br /&gt;
    //  These 3 methods essentially same as in TreeViews program&lt;br /&gt;
    private void FillDirectoryTree()&lt;br /&gt;
    {&lt;br /&gt;
      //  Populate with the contents of the local hard drive.&lt;br /&gt;
      //  Suppress redraw until tree view is complete&lt;br /&gt;
      tvw.BeginUpdate();&lt;br /&gt;
           //  First clear all the nodes.&lt;br /&gt;
      tvw.Nodes.Clear();&lt;br /&gt;
      //  Get the logical drives and put them into the root nodes.&lt;br /&gt;
      //  Fill an array with all the logical drives on the machine.&lt;br /&gt;
      string[] strDrives = Environment.GetLogicalDrives();&lt;br /&gt;
      //  Iterate through the drives, adding them to the tree.&lt;br /&gt;
      //  Use a try/catch block, so if a drive is not ready, &lt;br /&gt;
      //  e.g. an empty floppy or CD, it will not be added to the tree.&lt;br /&gt;
            foreach (string rootDirectoryName in strDrives)&lt;br /&gt;
           {&lt;br /&gt;
        try &lt;br /&gt;
        {&lt;br /&gt;
          //  Find all the first level subdirectories.&lt;br /&gt;
          //  If the drive is not ready, this will throw an &lt;br /&gt;
          //  exception, which will have the effect of &lt;br /&gt;
          //  skipping that drive.&lt;br /&gt;
          Directory.GetDirectories(rootDirectoryName);&lt;br /&gt;
          //  Create a node for each root directory&lt;br /&gt;
          TreeNode ndRoot = new TreeNode(rootDirectoryName);&lt;br /&gt;
          //  Add the node to the tree&lt;br /&gt;
          tvw.Nodes.Add(ndRoot);&lt;br /&gt;
 &lt;br /&gt;
          //  Set colors based on Index property.&lt;br /&gt;
           //  Index not set until after node added to collection.&lt;br /&gt;
          if (ndRoot.Index % 2 == 0)&lt;br /&gt;
          {&lt;br /&gt;
            ndRoot.BackColor = Color.LightYellow;&lt;br /&gt;
            ndRoot.ForeColor = Color.Green;&lt;br /&gt;
          }&lt;br /&gt;
          //  Add subdirectory nodes.&lt;br /&gt;
          //  Hard code getFileNames to false.&lt;br /&gt;
          GetSubDirectoryNodes(ndRoot, false);&lt;br /&gt;
        }&lt;br /&gt;
        catch  (System.IO.IOException)&lt;br /&gt;
        {&lt;br /&gt;
          //  let it through&lt;br /&gt;
              }&lt;br /&gt;
        catch  (Exception e)&lt;br /&gt;
        {&lt;br /&gt;
                //  Catch any other errors.&lt;br /&gt;
          MessageBox.Show(e.Message);&lt;br /&gt;
              }&lt;br /&gt;
      }&lt;br /&gt;
         &lt;br /&gt;
          tvw.EndUpdate();&lt;br /&gt;
         &lt;br /&gt;
    }      //  close FillDirectoryTree&lt;br /&gt;
    private void GetSubDirectoryNodes(TreeNode parentNode, &lt;br /&gt;
                          bool getFileNames)&lt;br /&gt;
    {&lt;br /&gt;
      //  Exit this method if the node is not a directory.&lt;br /&gt;
      DirectoryInfo di = new DirectoryInfo(parentNode.FullPath);&lt;br /&gt;
      if ((di.Attributes &amp;amp; FileAttributes.Directory) == 0)&lt;br /&gt;
      {&lt;br /&gt;
        return;&lt;br /&gt;
      }&lt;br /&gt;
           //  Clear all the nodes in this node.&lt;br /&gt;
      parentNode.Nodes.Clear();&lt;br /&gt;
      //  Get an array of strings containing all the subdirectories in the parent node.&lt;br /&gt;
      string[] arSubs = Directory.GetDirectories(parentNode.FullPath);&lt;br /&gt;
      //  Add a child node for each subdirectory.&lt;br /&gt;
      foreach (string subDir in arSubs)&lt;br /&gt;
      {&lt;br /&gt;
              DirectoryInfo dirInfo = new DirectoryInfo(subDir);&lt;br /&gt;
              // do not show hidden folders&lt;br /&gt;
              if ((dirInfo.Attributes &amp;amp; FileAttributes.Hidden)!= 0)&lt;br /&gt;
              {&lt;br /&gt;
                 continue;&lt;br /&gt;
              }&lt;br /&gt;
        TreeNode subNode = new TreeNode(dirInfo.Name);&lt;br /&gt;
        parentNode.Nodes.Add(subNode);&lt;br /&gt;
            &lt;br /&gt;
        //  Set colors based on Index property.&lt;br /&gt;
        if (subNode.Index % 2 == 0)&lt;br /&gt;
          subNode.BackColor = Color.LightPink;&lt;br /&gt;
      }&lt;br /&gt;
//  This section of code is never called in this program.  Vestigial from TreeViews.cs&lt;br /&gt;
//      if (getFileNames)&lt;br /&gt;
//      {&lt;br /&gt;
//              //  Get any files for this node.&lt;br /&gt;
//              string[] files = Directory.GetFiles(parentNode.FullPath);&lt;br /&gt;
//&lt;br /&gt;
//              // After placing the nodes, &lt;br /&gt;
//              // now place the files in that subdirectory.&lt;br /&gt;
//              foreach (string str in files)&lt;br /&gt;
//              {&lt;br /&gt;
//          FileInfo fi = new FileInfo(str);&lt;br /&gt;
//          TreeNode fileNode = new TreeNode(fi.Name);&lt;br /&gt;
//          parentNode.Nodes.Add(fileNode);&lt;br /&gt;
//&lt;br /&gt;
//          //  Set the icon&lt;br /&gt;
//          fileNode.ImageIndex = 0;&lt;br /&gt;
//          fileNode.SelectedImageIndex = 3;&lt;br /&gt;
//&lt;br /&gt;
//          //  Set colors based on Index property.&lt;br /&gt;
//          if (fileNode.Index % 2 == 0)&lt;br /&gt;
//            fileNode.BackColor = Color.LightGreen;&lt;br /&gt;
//              }&lt;br /&gt;
//      }&lt;br /&gt;
    }  // close GetSubDirectoryNodes&lt;br /&gt;
    private void tvw_BeforeExpand(object sender, &lt;br /&gt;
                  TreeViewCancelEventArgs e)&lt;br /&gt;
    {&lt;br /&gt;
      tvw.BeginUpdate();&lt;br /&gt;
      foreach (TreeNode tn in e.Node.Nodes)&lt;br /&gt;
      {&lt;br /&gt;
        GetSubDirectoryNodes(tn, false);&lt;br /&gt;
      }&lt;br /&gt;
      tvw.EndUpdate();      &lt;br /&gt;
    }    &lt;br /&gt;
    &lt;br /&gt;
    // This populates the list view after a tree node is selected&lt;br /&gt;
    private void tvw_AfterSelect(object sender, &lt;br /&gt;
                  TreeViewEventArgs e)&lt;br /&gt;
    {&lt;br /&gt;
      lv.Clear();&lt;br /&gt;
      lv.BeginUpdate();&lt;br /&gt;
      &lt;br /&gt;
      DirectoryInfo di = new DirectoryInfo(e.Node.FullPath);&lt;br /&gt;
      FileSystemInfo[] afsi = di.GetFileSystemInfos();&lt;br /&gt;
      foreach (FileSystemInfo fsi in afsi)&lt;br /&gt;
      {&lt;br /&gt;
        ListViewItem lvi = new ListViewItem(fsi.Name);&lt;br /&gt;
        &lt;br /&gt;
        if ((fsi.Attributes &amp;amp; FileAttributes.Directory) != 0)&lt;br /&gt;
        {&lt;br /&gt;
          lvi.ImageIndex = 1;&lt;br /&gt;
          lvi.SubItems.Add(&amp;quot;&amp;quot;);      // Bytes subitem&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
          switch(fsi.Extension.ToUpper())&lt;br /&gt;
          {&lt;br /&gt;
            case &amp;quot;.DOC&amp;quot; :&lt;br /&gt;
              lvi.ImageIndex = 4;&lt;br /&gt;
              break;&lt;br /&gt;
            case &amp;quot;.EXE&amp;quot; :&lt;br /&gt;
              lvi.ImageIndex = 5;&lt;br /&gt;
              break;&lt;br /&gt;
            case &amp;quot;.TXT&amp;quot; :&lt;br /&gt;
              lvi.ImageIndex = 6;&lt;br /&gt;
              break;&lt;br /&gt;
            default :&lt;br /&gt;
              lvi.ImageIndex = 7;&lt;br /&gt;
              break;&lt;br /&gt;
          }&lt;br /&gt;
          //  Bytes subitem, w/ commas&lt;br /&gt;
          //  Cast FileSystemInfo object to FileInfo object so the &lt;br /&gt;
          //    size can be obtained.&lt;br /&gt;
          lvi.SubItems.Add(((FileInfo)fsi).Length.ToString(&amp;quot;N0&amp;quot;));&lt;br /&gt;
        }&lt;br /&gt;
        //  Add the remaining subitems to the ListViewItem&lt;br /&gt;
        lvi.SubItems.Add(fsi.Extension);            // type&lt;br /&gt;
        lvi.SubItems.Add(fsi.LastWriteTime.ToString());  // modified&lt;br /&gt;
        //  Build up the Attributes string&lt;br /&gt;
        string strAtt = &amp;quot;&amp;quot;;&lt;br /&gt;
        if ((fsi.Attributes &amp;amp; FileAttributes.ReadOnly) != 0)&lt;br /&gt;
          strAtt += &amp;quot;R&amp;quot;;&lt;br /&gt;
        if ((fsi.Attributes &amp;amp; FileAttributes.Hidden) != 0)&lt;br /&gt;
          strAtt += &amp;quot;H&amp;quot;;&lt;br /&gt;
        if ((fsi.Attributes &amp;amp; FileAttributes.System) != 0)&lt;br /&gt;
          strAtt += &amp;quot;S&amp;quot;;&lt;br /&gt;
        if ((fsi.Attributes &amp;amp; FileAttributes.Archive) != 0)&lt;br /&gt;
          strAtt += &amp;quot;A&amp;quot;;&lt;br /&gt;
        lvi.SubItems.Add(strAtt);        // attributes&lt;br /&gt;
        lv.Items.Add(lvi);&lt;br /&gt;
      }  //  end foreach&lt;br /&gt;
      &lt;br /&gt;
      lv.Columns.Add(&amp;quot;Name&amp;quot;, 150, HorizontalAlignment.Left);&lt;br /&gt;
      lv.Columns.Add(&amp;quot;Bytes&amp;quot;, 75, HorizontalAlignment.Right);&lt;br /&gt;
      lv.Columns.Add(&amp;quot;Ext.&amp;quot;, 50, HorizontalAlignment.Left);&lt;br /&gt;
      lv.Columns.Add(&amp;quot;Modified&amp;quot;, 125, HorizontalAlignment.Left);&lt;br /&gt;
      lv.Columns.Add(&amp;quot;Attrib.&amp;quot;, 50, HorizontalAlignment.Left);&lt;br /&gt;
      &lt;br /&gt;
      lv.EndUpdate();&lt;br /&gt;
    }                //  close tvw_AfterSelect&lt;br /&gt;
    &lt;br /&gt;
    private void mnuView_Click(object sender, EventArgs e)&lt;br /&gt;
    {&lt;br /&gt;
      MenuItem mnu = (MenuItem)sender;&lt;br /&gt;
      switch (mnu.Mnemonic.ToString())&lt;br /&gt;
      {&lt;br /&gt;
        case &amp;quot;L&amp;quot;  :    //  Large Icons  &lt;br /&gt;
          lv.View = View.LargeIcon;&lt;br /&gt;
          break;&lt;br /&gt;
        case &amp;quot;S&amp;quot;  :    //  Small Icons&lt;br /&gt;
          lv.View = View.SmallIcon;&lt;br /&gt;
          break;&lt;br /&gt;
        case &amp;quot;T&amp;quot; :    //  List view&lt;br /&gt;
          lv.View = View.List;&lt;br /&gt;
          break;&lt;br /&gt;
        case &amp;quot;D&amp;quot; :    //  Detail view&lt;br /&gt;
          lv.View = View.Details;&lt;br /&gt;
          break;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    protected override void Dispose( bool disposing )&lt;br /&gt;
    {&lt;br /&gt;
      if( disposing )&lt;br /&gt;
      {&lt;br /&gt;
        if (components != null) &lt;br /&gt;
        {&lt;br /&gt;
          components.Dispose();&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
      base.Dispose( disposing );&lt;br /&gt;
    }&lt;br /&gt;
    #region Windows Form Designer generated code&lt;br /&gt;
    /// &amp;lt;summary&amp;gt;&lt;br /&gt;
    /// Required method for Designer support - do not modify&lt;br /&gt;
    /// the contents of this method with the code editor.&lt;br /&gt;
    /// &amp;lt;/summary&amp;gt;&lt;br /&gt;
    private void InitializeComponent()&lt;br /&gt;
    {&lt;br /&gt;
      this.tvw = new System.Windows.Forms.TreeView();&lt;br /&gt;
      this.splitter1 = new System.Windows.Forms.Splitter();&lt;br /&gt;
      this.lv = new System.Windows.Forms.ListView();&lt;br /&gt;
      this.mainMenu1 = new System.Windows.Forms.MainMenu();&lt;br /&gt;
      this.menuItem1 = new System.Windows.Forms.MenuItem();&lt;br /&gt;
      this.mnuSmallIcons = new System.Windows.Forms.MenuItem();&lt;br /&gt;
      this.mnuLargeIcons = new System.Windows.Forms.MenuItem();&lt;br /&gt;
      this.mnuList = new System.Windows.Forms.MenuItem();&lt;br /&gt;
      this.mnuDetails = new System.Windows.Forms.MenuItem();&lt;br /&gt;
      this.SuspendLayout();&lt;br /&gt;
      // &lt;br /&gt;
      // tvw&lt;br /&gt;
      // &lt;br /&gt;
      this.tvw.Dock = System.Windows.Forms.DockStyle.Left;&lt;br /&gt;
      this.tvw.ImageIndex = -1;&lt;br /&gt;
      this.tvw.Name = &amp;quot;tvw&amp;quot;;&lt;br /&gt;
      this.tvw.SelectedImageIndex = -1;&lt;br /&gt;
      this.tvw.Size = new System.Drawing.Size(168, 600);&lt;br /&gt;
      this.tvw.TabIndex = 0;&lt;br /&gt;
      this.tvw.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.tvw_AfterSelect);&lt;br /&gt;
      this.tvw.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.tvw_BeforeExpand);&lt;br /&gt;
      // &lt;br /&gt;
      // splitter1&lt;br /&gt;
      // &lt;br /&gt;
      this.splitter1.Location = new System.Drawing.Point(168, 0);&lt;br /&gt;
      this.splitter1.Name = &amp;quot;splitter1&amp;quot;;&lt;br /&gt;
      this.splitter1.Size = new System.Drawing.Size(3, 600);&lt;br /&gt;
      this.splitter1.TabIndex = 1;&lt;br /&gt;
      this.splitter1.TabStop = false;&lt;br /&gt;
      // &lt;br /&gt;
      // lv&lt;br /&gt;
      // &lt;br /&gt;
      this.lv.Dock = System.Windows.Forms.DockStyle.Fill;&lt;br /&gt;
      this.lv.Location = new System.Drawing.Point(171, 0);&lt;br /&gt;
      this.lv.Name = &amp;quot;lv&amp;quot;;&lt;br /&gt;
      this.lv.Size = new System.Drawing.Size(429, 600);&lt;br /&gt;
      this.lv.TabIndex = 2;&lt;br /&gt;
      this.lv.ItemActivate += new System.EventHandler(this.lv_ItemActivate);&lt;br /&gt;
      this.lv.AfterLabelEdit += new System.Windows.Forms.LabelEditEventHandler(this.lv_AfterLabelEdit);&lt;br /&gt;
      this.lv.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.lv_ColumnClick);&lt;br /&gt;
      this.lv.BeforeLabelEdit += new System.Windows.Forms.LabelEditEventHandler(this.lv_BeforeLabelEdit);&lt;br /&gt;
      // &lt;br /&gt;
      // mainMenu1&lt;br /&gt;
      // &lt;br /&gt;
      this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {&lt;br /&gt;
                                                       this.menuItem1});&lt;br /&gt;
      // &lt;br /&gt;
      // menuItem1&lt;br /&gt;
      // &lt;br /&gt;
      this.menuItem1.Index = 0;&lt;br /&gt;
      this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {&lt;br /&gt;
                                                       this.mnuSmallIcons,&lt;br /&gt;
                                                       this.mnuLargeIcons,&lt;br /&gt;
                                                       this.mnuList,&lt;br /&gt;
                                                       this.mnuDetails});&lt;br /&gt;
      this.menuItem1.Text = &amp;quot;&amp;amp;View&amp;quot;;&lt;br /&gt;
      // &lt;br /&gt;
      // mnuSmallIcons&lt;br /&gt;
      // &lt;br /&gt;
      this.mnuSmallIcons.Index = 0;&lt;br /&gt;
      this.mnuSmallIcons.Text = &amp;quot;&amp;amp;Small Icons&amp;quot;;&lt;br /&gt;
      this.mnuSmallIcons.Click += new System.EventHandler(this.mnuView_Click);&lt;br /&gt;
      // &lt;br /&gt;
      // mnuLargeIcons&lt;br /&gt;
      // &lt;br /&gt;
      this.mnuLargeIcons.Index = 1;&lt;br /&gt;
      this.mnuLargeIcons.Text = &amp;quot;&amp;amp;Large Icons&amp;quot;;&lt;br /&gt;
      this.mnuLargeIcons.Click += new System.EventHandler(this.mnuView_Click);&lt;br /&gt;
      // &lt;br /&gt;
      // mnuList&lt;br /&gt;
      // &lt;br /&gt;
      this.mnuList.Index = 2;&lt;br /&gt;
      this.mnuList.Text = &amp;quot;Lis&amp;amp;t&amp;quot;;&lt;br /&gt;
      this.mnuList.Click += new System.EventHandler(this.mnuView_Click);&lt;br /&gt;
      // &lt;br /&gt;
      // mnuDetails&lt;br /&gt;
      // &lt;br /&gt;
      this.mnuDetails.Index = 3;&lt;br /&gt;
      this.mnuDetails.Text = &amp;quot;&amp;amp;Details&amp;quot;;&lt;br /&gt;
      this.mnuDetails.Click += new System.EventHandler(this.mnuView_Click);&lt;br /&gt;
      // &lt;br /&gt;
      // Form1&lt;br /&gt;
      // &lt;br /&gt;
      this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);&lt;br /&gt;
      this.ClientSize = new System.Drawing.Size(600, 600);&lt;br /&gt;
      this.Controls.AddRange(new System.Windows.Forms.Control[] {&lt;br /&gt;
                                               this.lv,&lt;br /&gt;
                                               this.splitter1,&lt;br /&gt;
                                               this.tvw});&lt;br /&gt;
      this.Menu = this.mainMenu1;&lt;br /&gt;
      this.Name = &amp;quot;Form1&amp;quot;;&lt;br /&gt;
      this.Text = &amp;quot;Form1&amp;quot;;&lt;br /&gt;
      this.ResumeLayout(false);&lt;br /&gt;
    }&lt;br /&gt;
    #endregion&lt;br /&gt;
    [STAThread]&lt;br /&gt;
    static void Main() &lt;br /&gt;
    {&lt;br /&gt;
      Application.Run(new Form1());&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    private void lv_ItemActivate(object sender, EventArgs e)&lt;br /&gt;
    {&lt;br /&gt;
      ListView lv = (ListView)sender;&lt;br /&gt;
      foreach (ListViewItem lvi in lv.SelectedItems)&lt;br /&gt;
      {&lt;br /&gt;
        try&lt;br /&gt;
        {&lt;br /&gt;
          Process.Start(tvw.SelectedNode.FullPath + &amp;quot;\\&amp;quot; + lvi.Text);&lt;br /&gt;
        }&lt;br /&gt;
        catch&lt;br /&gt;
        {&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    public class SortListViewItems : IComparer    //  nested class&lt;br /&gt;
    {&lt;br /&gt;
      int columnIndex;&lt;br /&gt;
      ColumnType columnType;&lt;br /&gt;
      bool isAscending;&lt;br /&gt;
      public static Boolean isNameAscending = true;&lt;br /&gt;
      public static Boolean isBytesAscending = false;&lt;br /&gt;
      public static Boolean isExtAscending = false;&lt;br /&gt;
      public static Boolean isModifiedAscending = false;&lt;br /&gt;
      public static Boolean isAttribAscending = false;&lt;br /&gt;
      &lt;br /&gt;
      public SortListViewItems(int columnIndex, &lt;br /&gt;
                      ColumnType columnType, &lt;br /&gt;
                      bool isAscending)&lt;br /&gt;
      {&lt;br /&gt;
        this.columnIndex = columnIndex;&lt;br /&gt;
        this.columnType = columnType;&lt;br /&gt;
        this.isAscending = isAscending;&lt;br /&gt;
      }&lt;br /&gt;
    &lt;br /&gt;
      public int Compare(object x, object y)&lt;br /&gt;
      {&lt;br /&gt;
        string strFirst = &lt;br /&gt;
          ((ListViewItem)x).SubItems[columnIndex].Text;&lt;br /&gt;
        string strSecond = &lt;br /&gt;
          ((ListViewItem)y).SubItems[columnIndex].Text;&lt;br /&gt;
        &lt;br /&gt;
        switch (columnType)&lt;br /&gt;
        {&lt;br /&gt;
          case ColumnType.Alpha :&lt;br /&gt;
            if (isAscending)&lt;br /&gt;
              return strFirst.rupareTo(strSecond);&lt;br /&gt;
            else&lt;br /&gt;
              return strSecond.rupareTo(strFirst);&lt;br /&gt;
            &lt;br /&gt;
          case ColumnType.DateTimeValue :&lt;br /&gt;
            if (isAscending)&lt;br /&gt;
              return &lt;br /&gt;
                DateTime.Parse(strFirst).&lt;br /&gt;
                  CompareTo(DateTime.Parse(strSecond));&lt;br /&gt;
            else&lt;br /&gt;
              return &lt;br /&gt;
                DateTime.Parse(strSecond).&lt;br /&gt;
                  CompareTo(DateTime.Parse(strFirst));&lt;br /&gt;
            &lt;br /&gt;
          case ColumnType.Numeric :&lt;br /&gt;
            //  Special case blank byte values.&lt;br /&gt;
            if (strFirst == &amp;quot;&amp;quot;)&lt;br /&gt;
              strFirst = &amp;quot;-1&amp;quot;;&lt;br /&gt;
            if (strSecond == &amp;quot;&amp;quot;)&lt;br /&gt;
              strSecond = &amp;quot;-1&amp;quot;;&lt;br /&gt;
          &lt;br /&gt;
            if (isAscending)&lt;br /&gt;
              return &lt;br /&gt;
                Double.Parse(strFirst).&lt;br /&gt;
                  CompareTo(Double.Parse(strSecond));&lt;br /&gt;
            else&lt;br /&gt;
              return &lt;br /&gt;
                Double.Parse(strSecond).&lt;br /&gt;
                  CompareTo(Double.Parse(strFirst));&lt;br /&gt;
            &lt;br /&gt;
          default:&lt;br /&gt;
            return 0;      &lt;br /&gt;
        }      //  close switch block  &lt;br /&gt;
      }        //  close Compare method&lt;br /&gt;
    }          //  close nested SortListViewItems class&lt;br /&gt;
    private void lv_ColumnClick(object sender, ColumnClickEventArgs e)&lt;br /&gt;
    {&lt;br /&gt;
      ColumnType columnType;&lt;br /&gt;
      bool isAscending = true;&lt;br /&gt;
      string strName = ((ListView)sender).Columns[e.Column].Text;&lt;br /&gt;
      switch(strName)&lt;br /&gt;
      {&lt;br /&gt;
        case &amp;quot;Name&amp;quot;: &lt;br /&gt;
          columnType = ColumnType.Alpha;&lt;br /&gt;
          SortListViewItems.isNameAscending = &lt;br /&gt;
              !SortListViewItems.isNameAscending;&lt;br /&gt;
          isAscending = SortListViewItems.isNameAscending;&lt;br /&gt;
          break;&lt;br /&gt;
        case &amp;quot;Bytes&amp;quot;: &lt;br /&gt;
          columnType = ColumnType.Numeric;&lt;br /&gt;
          SortListViewItems.isBytesAscending = &lt;br /&gt;
              !SortListViewItems.isBytesAscending;&lt;br /&gt;
          isAscending = SortListViewItems.isBytesAscending;&lt;br /&gt;
          break;&lt;br /&gt;
        case &amp;quot;Ext.&amp;quot;: &lt;br /&gt;
          columnType = ColumnType.Alpha;&lt;br /&gt;
          SortListViewItems.isExtAscending = &lt;br /&gt;
              !SortListViewItems.isExtAscending;&lt;br /&gt;
          isAscending = SortListViewItems.isExtAscending;&lt;br /&gt;
          break;&lt;br /&gt;
        case &amp;quot;Modified&amp;quot;: &lt;br /&gt;
          columnType = ColumnType.DateTimeValue;&lt;br /&gt;
          SortListViewItems.isModifiedAscending = &lt;br /&gt;
              !SortListViewItems.isModifiedAscending;&lt;br /&gt;
          isAscending = SortListViewItems.isModifiedAscending;&lt;br /&gt;
          break;&lt;br /&gt;
        case &amp;quot;Attrib.&amp;quot;: &lt;br /&gt;
          columnType = ColumnType.Alpha;&lt;br /&gt;
          SortListViewItems.isAttribAscending = &lt;br /&gt;
              !SortListViewItems.isAttribAscending;&lt;br /&gt;
          isAscending = SortListViewItems.isAttribAscending;&lt;br /&gt;
          break;&lt;br /&gt;
        default:&lt;br /&gt;
          columnType = ColumnType.Alpha;&lt;br /&gt;
          break;&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      lv.ListViewItemSorter = new SortListViewItems(e.Column, &lt;br /&gt;
                                    columnType, &lt;br /&gt;
                                    isAscending);&lt;br /&gt;
      lv.Sort();&lt;br /&gt;
    }            // close lv_ColumnClick&lt;br /&gt;
    private void lv_BeforeLabelEdit(object sender, LabelEditEventArgs e)&lt;br /&gt;
    {&lt;br /&gt;
      MessageBox.Show(&amp;quot;About to edit\n&amp;quot; +&lt;br /&gt;
        &amp;quot;Item:&amp;quot; + e.Item.ToString() + &amp;quot;\n&amp;quot; +&lt;br /&gt;
        &amp;quot;label:&amp;quot; + e.Label );&lt;br /&gt;
    }&lt;br /&gt;
    private void lv_AfterLabelEdit(object sender, LabelEditEventArgs e)&lt;br /&gt;
    {&lt;br /&gt;
      MessageBox.Show(&amp;quot;After edit\n&amp;quot; +&lt;br /&gt;
        &amp;quot;Item:&amp;quot; + e.Item.ToString() + &amp;quot;\n&amp;quot; +&lt;br /&gt;
        &amp;quot;label:&amp;quot; + e.Label );&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>