ListView Drives : ListView « GUI Windows Forms « C# / CSharp Tutorial






using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;

public sealed class Win32
{
  public const uint DRIVE_UNKNOWN     = 0;
  public const uint DRIVE_NO_ROOT_DIR = 1;
  public const uint DRIVE_REMOVABLE   = 2;
  public const uint DRIVE_FIXED       = 3;
  public const uint DRIVE_REMOTE      = 4;
  public const uint DRIVE_CDROM       = 5;
  public const uint DRIVE_RAMDISK     = 6;

  [DllImport("kernel32.dll")]
  public static extern uint GetDriveType(
    string lpRootPathName   // root directory
    );

  [DllImport("kernel32.dll")]
  private static extern bool GetVolumeInformation(
    string lpRootPathName,          // Root directory
    StringBuilder lpVolumeNameBuffer,    // Volume name buffer
    int nVolumeNameSize,          // Length of name buffer
    ref int lpVolumeSerialNumber,      // Volume serial number
    ref int lpMaximumComponentLength,    // Maximum file name length
    ref int lpFileSystemFlags,        // File system options
    StringBuilder lpFileSystemNameBuffer,  // File system name buffer
    int nFileSystemNameSize          // Length of file system name buffer
    );

  public static string GetVolumeName(string strRootPath)
  {
    StringBuilder sbVolumeName = new StringBuilder(256);
    StringBuilder sbFileSystemName = new StringBuilder(256);
    int nVolSerial = 0;
    int nMaxCompLength = 0;
    int nFSFlags = 0;
    bool bResult = GetVolumeInformation(strRootPath,sbVolumeName,256,
      ref nVolSerial, ref nMaxCompLength, ref nFSFlags, sbFileSystemName, 256);
    if (true == bResult)
    {
      return sbVolumeName.ToString();
    }
    else
    {
      return "";
    }
  }
}
  public class DrivesForm : System.Windows.Forms.Form
  {
    private System.Windows.Forms.ListView lvDrives;
    private System.Windows.Forms.MainMenu mnuMain;
    private System.Windows.Forms.MenuItem menuItem1;
    private System.Windows.Forms.MenuItem mnuLargeIcons;
    private System.Windows.Forms.MenuItem mnuSmallIcons;
    private System.Windows.Forms.MenuItem mnuList;
    private System.Windows.Forms.MenuItem mnuDetails;

    public DrivesForm()
    {
      this.lvDrives = new System.Windows.Forms.ListView();
      this.mnuMain = new System.Windows.Forms.MainMenu();
      this.menuItem1 = new System.Windows.Forms.MenuItem();
      this.mnuLargeIcons = new System.Windows.Forms.MenuItem();
      this.mnuSmallIcons = new System.Windows.Forms.MenuItem();
      this.mnuList = new System.Windows.Forms.MenuItem();
      this.mnuDetails = new System.Windows.Forms.MenuItem();
      this.SuspendLayout();
      // 
      // lvDrives
      // 
      this.lvDrives.Dock = System.Windows.Forms.DockStyle.Fill;
      this.lvDrives.Name = "lvDrives";
      this.lvDrives.Size = new System.Drawing.Size(336, 277);
      this.lvDrives.TabIndex = 0;
      this.lvDrives.View = System.Windows.Forms.View.List;
      this.lvDrives.ItemActivate += new System.EventHandler(this.ItemActivated);
      this.lvDrives.SelectedIndexChanged += new System.EventHandler(this.OnSelItemChanged);
      // 
      // mnuMain
      // 
      this.mnuMain.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
                                          this.menuItem1});
      // 
      // menuItem1
      // 
      this.menuItem1.Index = 0;
      this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
                                            this.mnuLargeIcons,
                                            this.mnuSmallIcons,
                                            this.mnuList,
                                            this.mnuDetails});
      this.menuItem1.Text = "Style";
      // 
      // mnuLargeIcons
      // 
      this.mnuLargeIcons.Index = 0;
      this.mnuLargeIcons.Text = "Large Icons";
      this.mnuLargeIcons.Click += new System.EventHandler(this.OnMenuClick);
      // 
      // mnuSmallIcons
      // 
      this.mnuSmallIcons.Index = 1;
      this.mnuSmallIcons.Text = "Small Icons";
      this.mnuSmallIcons.Click += new System.EventHandler(this.OnMenuClick);
      // 
      // mnuList
      // 
      this.mnuList.Index = 2;
      this.mnuList.Text = "List";
      this.mnuList.Click += new System.EventHandler(this.OnMenuClick);
      // 
      // mnuDetails
      // 
      this.mnuDetails.Index = 3;
      this.mnuDetails.Text = "Details";
      this.mnuDetails.Click += new System.EventHandler(this.OnMenuClick);
      // 
      // DrivesForm
      // 
      this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
      this.ClientSize = new System.Drawing.Size(336, 277);
      this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                      this.lvDrives});
      this.Menu = this.mnuMain;
      this.Name = "DrivesForm";
      this.Text = "Drives on computer";
      this.ResumeLayout(false);

      // Small and large image lists
      lvDrives.SmallImageList = new ImageList();
      Bitmap icoSmall = new Bitmap(GetType(), "LvIcons.bmp");
      icoSmall.MakeTransparent(Color.FromArgb(0xff, 0x00, 0xff));
      lvDrives.SmallImageList.Images.AddStrip(icoSmall);

      lvDrives.LargeImageList = new ImageList();
      Bitmap icoLarge = new Bitmap(GetType(), "LvIconsLarge.bmp");
      icoLarge.MakeTransparent(Color.FromArgb(0xff, 0x00, 0xff));
      Size sizeImages = new Size(32,32);
      lvDrives.LargeImageList.ImageSize = sizeImages;
      lvDrives.LargeImageList.Images.AddStrip(icoLarge);

      lvDrives.Columns.Add("Drive", 100, HorizontalAlignment.Left);
      lvDrives.Columns.Add("Type", 150, HorizontalAlignment.Left);

      ListDrives();
    }

    protected void ListDrives() 
    {
      string[] drives = Directory.GetLogicalDrives();
      string strDriveType = "";
      for (int i=0; i < drives.Length; i++)
      {
        string strDriveName = Win32.GetVolumeName(drives[i]);
        ListViewItem lvi = new ListViewItem();

        // Note: Network drives show up as local.
        switch(Win32.GetDriveType(drives[i])) 
        {
          case Win32.DRIVE_CDROM:
            strDriveType = "Compact Disc";
            lvi.ImageIndex = 1;
            break;
          case Win32.DRIVE_FIXED:
            strDriveType = "Local Disc";
            lvi.ImageIndex = 0;
            break;
          case Win32.DRIVE_REMOVABLE:
            strDriveType = "Floppy";
            lvi.ImageIndex = 2;
            break;
          default:
            goto case Win32.DRIVE_FIXED;
        }
        if (0 == strDriveName.Length) strDriveName = strDriveType;
        lvi.Text = strDriveName + " (" + drives[i].Substring(0, 2) + ")";
        lvi.SubItems.Add(strDriveType);
        this.lvDrives.Items.Add(lvi);
      }
    }


    static void Main() 
    {
      Application.Run(new DrivesForm());
    }

    private void OnMenuClick(object sender, System.EventArgs e)
    {
      MenuItem mnu = (MenuItem)sender;
      switch(mnu.Text) 
      {
        case "Large Icons": lvDrives.View = View.LargeIcon; break;
        case "Small Icons": lvDrives.View = View.SmallIcon; break;
        case "List": lvDrives.View = View.List; break;
        default: lvDrives.View = View.Details; break;
      }
    }

    private void OnSelItemChanged(object sender, System.EventArgs e)
    {
      string strSelected = "";
      foreach (ListViewItem lvi in lvDrives.SelectedItems)
      {
        strSelected += " " + lvi.Text;
      }
      MessageBox.Show(strSelected);
    }

    private void ItemActivated(object sender, System.EventArgs e)
    {
      MessageBox.Show("Item activated");
    }
  }








23.29.ListView
23.29.1.ListView SorterListView Sorter
23.29.2.Fill data from Database to ListView
23.29.3.ListView Drives
23.29.4.ListView for File and Folder