2019-08-19に更新

【C#】TreeView と ListView でエクスプローラーみたいな操作をする

エクスプローラ風画面作成の続きです。
今回は、リストビューに表示されたディレクトリをダブルクリックで下層に移動し、
「上へ」ボタンで上層に移動するサンプルとなります。

プログラムは前回のものを流用します。
【C#】7zip(Sfx)で自己解凍exeを作成する

画面の修正

画面の修正

1つ上のディレクトリに移動するためのボタンを追加します。

プログラム修正

ツリービューの指定した項目を選択状態にする処理を追加

        /// <summary>
        /// ツリービューの指定されたディレクトリパスの項目を選択状態にします.
        /// </summary>
        /// <param name="dirPath"></param>
        private void selectTreeViewItem(TreeView trv, string dirPath)
        {
            // ツリービューのノードを走査
            foreach (TreeNode node in trv.Nodes)
            {
                // 再帰処理で対象のディレクトリを処理
                selectTreeViewItem(node, dirPath);
            }
        }

        /// <summary>
        /// ツリービューの指定されたディレクトリパスの項目を選択状態にします(再帰処理用).
        /// </summary>
        /// <param name="node"></param>
        /// <param name="dirPath"></param>
        private void selectTreeViewItem(TreeNode node, string dirPath)
        {
            foreach (TreeNode n in node.Nodes)
            {
                FileInfo fi = new FileInfo(n.FullPath);
                // リストビューで表示されたディレクトリ名と一致する場合
                if (dirPath == fi.FullName)
                {
                    // 選択状態にする
                    treeView1.Focus();
                    treeView1.SelectedNode = n;
                    break;
                }
                selectTreeViewItem(n, dirPath);
            }
        }

ファイル一覧ダブルクリック時のイベントを追加

        /// <summary>
        /// リストビューダブルクリックイベント.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            // 選択されたファイル情報を取得
            ListViewItem selectedListItem = listView1.SelectedItems[0];
            FileInfo fi = new FileInfo(selectedListItem.Name);

            // ディレクトリであればファイル一覧の内容を更新する
            if (fi.Attributes == FileAttributes.Directory)
            {
                // ツリービュー上で対象のディレクトリ(ノード)が
                // 表示されている場合は選択状態にする
                selectTreeViewItem(treeView1, fi.FullName);

                // ファイル一覧の内容を更新
                setListItem(fi.FullName);
                selectedItem = fi.FullName;
            }

        }


追加した「上へ」ボタンの処理を追加

        /// <summary>
        /// 上へボタンクリックイベント.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnUp_Click(object sender, EventArgs e)
        {
            DirectoryInfo di = new DirectoryInfo(selectedItem);
            if (di.Parent != null)
            {
                selectedItem = di.Parent.FullName;
                setListItem(di.Parent.FullName);

                // 表示されている場合は選択状態にする
                selectTreeViewItem(treeView1, selectedItem);
            }
        }

 

起動してみる

修正後画面

上へボタンクリック

無事に操作できるようになりました。

まとめ

ひとまずエクスプローラーみたいな感じになってきました。

あとは検索とかもやってみるかもしれません。(予定)

ではでは。

Originally published at www.doraxdora.com
ツイッターでシェア
みんなに共有、忘れないようにメモ

doraxdora

IT関係の仕事をしています/1985年生まれの東京在住/便利なサービスやツール漁りや料理などが好き/2017年~ブログやってます/自分でサービスとか作ってリリースしたい/何かありましたらお気軽にDMどうぞ

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント