Drive Icon

C# でドライブを検索して TreeView に登録します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. C# でドライブを検索して TreeView にアイコンを付けて登録します。
    空のプロジェクトから TreeView を設定して下さい。
    詳細は TreeView に登録する を参照して下さい。
  2. ファイルを検索するので using System.IO を定義します。
    ドライブ情報の取得するので using System.Management を定義します。
    参照設定を右クリックして、参照の追加から System.Management を追加します。
        using System.IO;             // for File
        using System.Management;     // for ドライブ情報の取得 (注)参照の追加
        
  3. アイコンを使うので ImageList を定義します。
    アプリケーションに設定されているアイコンは ExtractAssociatedIcon() で取得出来るのですが、 ドライブやフォルダからアイコンは取得出来ません。
    そこで、事前にページ先頭の画像を参照して、アイコンファイルを "C:\\DATA\\Test" のフォルダに格納しておいて下さい。
    string[] iconFiles がアイコン画像の定義です。
        private TreeView treeView1;
        ImageList   imageList1 = new ImageList();
        string[]    iconFiles =
        { "C:\\DATA\\Test\\null.ico", "C:\\DATA\\Test\\folder.ico",
          "C:\\DATA\\Test\\fdd.ico", "C:\\DATA\\Test\\hdd.ico",
          "C:\\DATA\\Test\\cd.ico", "C:\\DATA\\Test\\remove.ico" };
        
  4. MyForm_Load() でドライブを検索して TreeView に登録します。
    ImageList にアイコンを登録して TreeView に設定します。
    Directory.GetLogicalDrives() がドライブを検索するメソッドです。
    ManagementObject() でドライブのタイプを調べます。
    ドライブ=="A:" のときはフロッピーディスクです。
    それ以外のときは disk["DriveType"] でタイプを判定します。
    tn.ImageIndex がノードが選択されていないときで、tn.SelectedImageIndex が選択されたときのアイコンです。
    tn.Nodes.Add("dummy"); は、+を表示するためのダミーノードです。
        // Tree View にノードを設定
        private void MyForm_Load(object sender, System.EventArgs e)
        {
            imageList1.ImageSize = new Size(16, 16);
            treeView1.ImageList = imageList1;
    
            imageList1.Images.Clear();
            for (int i = 0; i < iconFiles.GetLength(0); i++)
            { imageList1.Images.Add(new Bitmap(iconFiles[i])); }
    
            string[] drives = Directory.GetLogicalDrives() ;
            foreach(string drive in drives)
            {
                string drive2 = drive.Substring(0, 2) ;  // 末尾の'\'をカット
                ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"" + drive2 + "\"");
                disk.Get();
                TreeNode tn = new TreeNode(drive2) ;
                if (drive2=="A:")
                    tn.ImageIndex = tn.SelectedImageIndex = 2;
                else  if (disk["DriveType"].ToString()=="3")
                    tn.ImageIndex = tn.SelectedImageIndex = 3;
                else  if (disk["DriveType"].ToString()=="5")
                    tn.ImageIndex = tn.SelectedImageIndex = 4;
                else  if (disk["DriveType"].ToString()=="2")
                    tn.ImageIndex = tn.SelectedImageIndex = 5;
                else
                    tn.ImageIndex = tn.SelectedImageIndex = 1;
                tn.Nodes.Add("dummy");  // +を表示するためにダミーノード
                treeView1.Nodes.Add(tn);
            }
        }
        

超初心者のプログラム入門(C# Frame Work)