2017-01-24 2 views
0

Jusqu'ici j'ai créé un explorateur de fichiers - cependant je veux ajouter un bouton qui permettra d'ouvrir le fichier sélectionné quand on cliquera dessus. J'ai entendu parler de OpenFileDialog mais il semble seulement montrer un répertoire que je ne veux pas. Des idées? C'est le code que j'ai, en utilisant C#.Ajout d'un bouton 'Ouvrir un fichier' pour le fichier sélectionné

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

Passez le chemin d'accès complet à votre fichier dans [Process.Start()] (https://msdn.microsoft.com/en-us/library/53ezey2s (v = vs.110) .aspx). L'application associée à l'extension de ce fichier recevra ce nom de fichier. –

+0

Merci @Idle_Mind comment pourrais-je mettre en œuvre ceci dans ce que j'ai actuellement? –

Répondre

1

Tout d'abord, lors de la création des ListViewItems, j'ajouter le chemin complet du fichier à l'.Tag afin que vous puissiez le récupérer facilement:

item.Tag = file.FullName; 

Ensuite, vous utiliser quelque chose comme ceci dans un événement de clic de bouton:

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"); 
       } 
      } 
     } 
    } 
}