プログラミングのメモ

プログラミングの学び直し備忘録

C#:TreeView

参考

【C#】TreeView と ListView でエクスプローラーのような画面を作成してみた | ドラブロ – let bygones be bygones –

【C#】TreeView と ListView でエクスプローラーみたいな操作をする | ドラブロ – let bygones be bygones –

[C#] エクスプローラ風のツリービュー表示 | OsadaSoft

TreeViewコントロールで効率的にツリーを構築するには?

TreeViewクラス | C# プログラミング解説

コンテキストメニュー

コントロールに「ContextMenuStrip」ドロップ
「TreeView」のプロパティに「ContextMenuStrip」設定

選択ノードのFullPath

treeView1.SelectedNode.FullPath

フォーカスを失っても選択状態表示

treeView1.HideSelection=False;

初期設定

        /// <summary>
        /// 
        /// </summary>
        private void MyTreeView_Init()
        {

            // ROOT
            string sDir = @"D:";
            TreeNode node = treeView1.Nodes.Add(sDir);

            DirectoryInfo dirList = new DirectoryInfo(sDir);

            foreach (DirectoryInfo di in dirList.GetDirectories())
            {
                node.Nodes.Add(new TreeNode()); // プラスボタンを表示するため空のノードを追加しておく
                node.Nodes.Add(di.Name);        // 下層ノード追加
            }

            // 初期選択ノードの内容を表示
            treeView1.SelectedNode = treeView1.TopNode;
            setListItem(treeView1.SelectedNode.FullPath);
        }
        //*********************************************************
        /// <summary>
        /// リストビューの項目を設定
        /// </summary>
        //*********************************************************
        private void setListItem(String filePath)
        {
            // リストビューのヘッダーを設定
            listView1.View = View.Details;
            listView1.Clear();
            listView1.Columns.Add("名前");
            listView1.Columns.Add("更新日時");
            listView1.Columns.Add("サイズ");

            try
            {
                // フォルダ一覧
                DirectoryInfo dirList = new DirectoryInfo(filePath);
                foreach (DirectoryInfo di in dirList.GetDirectories())
                {
                    ListViewItem item = new ListViewItem(di.Name);
                    item.SubItems.Add(String.Format("{0:yyyy/MM/dd HH:mm:ss}", di.LastAccessTime));
                    item.SubItems.Add("");
                    listView1.Items.Add(item);
                }

                // ファイル一覧
                List<String> files = Directory.GetFiles(filePath).ToList<String>();
                foreach (String file in files)
                {
                    FileInfo info = new FileInfo(file);
                    ListViewItem item = new ListViewItem(info.Name);
                    item.SubItems.Add(String.Format("{0:yyyy/MM/dd HH:mm:ss}", info.LastAccessTime));
                    item.SubItems.Add(getFileSize(info.Length));
                    listView1.Items.Add(item);
                }
            }
            catch (IOException ie)
            {
                MessageBox.Show(ie.Message, "選択エラー");
            }

            // 列幅を自動調整
            listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize);
        }
        //************************************************************
        /// <summary>
        /// ファイルサイズを単位付きに変換して返します.
        /// </summary>
        /// <param name="fileSize"></param>
        /// <returns></returns>
        //************************************************************
        private String getFileSize(long fileSize)
        {
            String ret = fileSize + " バイト";
            if (fileSize > (1024f * 1024f * 1024f))
            {
                ret = Math.Round((fileSize / 1024f / 1024f / 1024f), 2).ToString() + " GB";
            }
            else if (fileSize > (1024f * 1024f))
            {
                ret = Math.Round((fileSize / 1024f / 1024f), 2).ToString() + " MB";
            }
            else if (fileSize > 1024f)
            {
                ret = Math.Round((fileSize / 1024f)).ToString() + " KB";
            }

            return ret;
        }

展開処理

        //***************************************************
        /// <summary>
        /// [TreeView]展開前
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        //***************************************************
        private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
        {
            TreeNode node = e.Node;
            String path = node.FullPath;
            node.Nodes.Clear();

            try
            {
                DirectoryInfo dirList = new DirectoryInfo(path);
                foreach (DirectoryInfo di in dirList.GetDirectories())
                {
                    TreeNode child = new TreeNode(di.Name);
                    child.Nodes.Add(new TreeNode());
                    node.Nodes.Add(child);
                }
            }
            catch (IOException ie)
            {
                MessageBox.Show(ie.Message, "選択エラー");
            }
        }
        //***************************************************
        /// <summary>
        /// [TreeView] 展開
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        //***************************************************
        private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            setListItem(e.Node.FullPath);
        }

コンテキストメニュー

        //**********************************************
        /// <summary>
        /// [TreeView]コンテキストメニュー
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        //**********************************************
        private void ctmsTrv_tsmiOpen_Click(object sender, EventArgs e)
        {
            myFileFolder.clsFileFolder.MySet_OpenFolder(treeView1.SelectedNode.FullPath);
        }