2017-01-24 11 views
0

これまでのところ、ファイルエクスプローラを作成しましたが、クリックすると選択したファイルを開くことができるボタンを追加します。私はOpenFileDialogについて聞いたことがありますが、それは私が欲しくないディレクトリだけを示すようです。何か案は?これはC#を使用しているコードです。選択したファイルに「ファイルを開く」ボタンを追加する

file explorer showing specific files

namespace SynchronizeTaskPaneAndRibbon 
{ 
    public partial class FileChooser : UserControl 
    { 
     private void PopulateTreeView() 
     { 
      TreeNode rootNode; 

      DirectoryInfo info = new DirectoryInfo(@"../.."); 
      if (info.Exists) 
      { 
       rootNode = new TreeNode(info.Name); 
       rootNode.Tag = info; 
       GetDirectories(info.GetDirectories(), rootNode); 
       treeView1.Nodes.Add(rootNode); 
      } 
     } 

     private void GetDirectories(DirectoryInfo[] subDirs, TreeNode nodeToAddTo) 
     { 
      TreeNode aNode; 
      DirectoryInfo[] subSubDirs; 
      foreach (DirectoryInfo subDir in subDirs) 
      { 
       aNode = new TreeNode(subDir.Name, 0, 0); 
       aNode.Tag = subDir; 
       aNode.ImageKey = "folder"; 
       try 
       { 
        subSubDirs = subDir.GetDirectories(); 
       } 
       catch (System.UnauthorizedAccessException) 
       { 
        subSubDirs = new DirectoryInfo[0]; 
       } 
       if (subSubDirs.Length != 0) 
       { 
        GetDirectories(subSubDirs, aNode); 
       } 
       nodeToAddTo.Nodes.Add(aNode); 
      } 
     } 

public FileChooser() 
     { 
      InitializeComponent(); 
      PopulateTreeView(); 
      this.treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(this.treeView1_NodeMouseClick); 
     } 

    void treeView1_NodeMouseClick(object sender,TreeNodeMouseClickEventArgs e) 
    { 
     TreeNode newSelected = e.Node; 
     listView1.Items.Clear(); 
     DirectoryInfo nodeDirInfo = (DirectoryInfo)newSelected.Tag; 
     ListViewItem.ListViewSubItem[] subItems; 
     ListViewItem item = null; 

     foreach (DirectoryInfo dir in nodeDirInfo.GetDirectories()) 
     { 
      item = new ListViewItem(dir.Name, 0); 
      subItems = new ListViewItem.ListViewSubItem[] 
         {new ListViewItem.ListViewSubItem(item, "Directory"), 
       new ListViewItem.ListViewSubItem(item, 
      dir.LastAccessTime.ToShortDateString())}; 
      item.SubItems.AddRange(subItems); 

     } 
     foreach (FileInfo file in nodeDirInfo.GetFiles()) 
     { 
      if (file.Extension == ".xlsx" || file.Extension == ".xls" || file.Extension == ".xlsm" || file.Extension == ".csv") 
      { 
       item = new ListViewItem(file.Name, 1); 
       subItems = new ListViewItem.ListViewSubItem[] 
          { new ListViewItem.ListViewSubItem(item, "File"), 
       new ListViewItem.ListViewSubItem(item, 
      file.LastAccessTime.ToShortDateString())}; 

       item.SubItems.AddRange(subItems); 
       listView1.Items.Add(item); 
      } 

     } 

     listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); 
    } 
+0

ファイルへのフルパスを[Process.Start()](https://msdn.microsoft.com/en-us/library/53ezey2s(v = vs.110).aspx)に渡します。そのファイルの拡張子に関連付けられたアプリケーションは、そのファイル名を受け取ります。 –

+0

ありがとう@Idle_Mindこれは私が現在持っているものに実装する方法は? –

答えて

1

まず、ListViewItemsを作成するときに、私はあなたが簡単にそれを取り出すことができ.Tagにファイルのフルパスを追加したい:

item.Tag = file.FullName; 

それからボタンクリックイベントで次のようなものを使用してください:

private void button1_Click(object sender, EventArgs e) 
{ 
    if (listView1.SelectedItems.Count > 0) 
    { 
     foreach(ListViewItem lvi in listView1.SelectedItems) 
     { 
      if (lvi.Tag != null && lvi.Tag is string) 
      { 
       string fullPathFile = lvi.Tag.ToString(); 
       try 
       { 
        Process.Start(fullPathFile); 
       } 
       catch (Exception ex) 
       { 
        MessageBox.Show("FileName: " + fullPathFile + "\r\n\r\n" + ex.ToString(), "Error Opening File"); 
       } 
      } 
     } 
    } 
} 
関連する問題