【问题标题】:Adding an 'Open File' button for selected file为所选文件添加“打开文件”按钮
【发布时间】:2017-01-24 17:25:08
【问题描述】:

到目前为止,我已经创建了一个文件资源管理器 - 但是我想添加一个按钮,允许在单击时打开选定的文件。我听说过 OpenFileDialog 但它似乎只显示了一个我不想要的目录。有任何想法吗?这是我得到的代码,使用 C#。

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

【问题讨论】:

  • 将文件的完整路径传递到Process.Start()。与该文件扩展名关联的应用程序将收到该文件名。
  • 谢谢@Idle_Mind 我将如何将其实施到我目前拥有的东西中?

标签: c# file explorer openfiledialog filechooser


【解决方案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");
                }
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    相关资源
    最近更新 更多