C#:TreeView
参考
【C#】TreeView と ListView でエクスプローラーのような画面を作成してみた | ドラブロ – let bygones be bygones –
【C#】TreeView と ListView でエクスプローラーみたいな操作をする | ドラブロ – let bygones be bygones –
[C#] エクスプローラ風のツリービュー表示 | OsadaSoft
TreeViewコントロールで効率的にツリーを構築するには?
コンテキストメニュー
コントロールに「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); }