2013-05-26 81 views
1

我有一个ListBox加载文件内的某个文件夹运行/打开时检查。 目前我有2种不同的方法:添加点击事件谁添加文件和添加目录点击事件谁添加文件夹和递归添加所有文件。Openfiledialog和Folderbrowserdialog在相同的方法?

目前,这是我的2个按钮单击事件:

private void btnAddfiles_Click(object sender, EventArgs e) 
{ 
    GetFolderToAddFilesFrom(); 
} 

private void btnAddDir_Click(object sender, EventArgs e) 
{ 
    GetFolderToAddFilesFrom(); 
} 
现在我想要做的是处理这2个选项相同的方法,即还添加几个或孤独的文件,也可以添加文件夹,并递归添加

来自此文件夹和子文件夹的所有文件。

添加文件功能:

 foreach (String file in openFileDialog1.FileNames) 
     { 
      System.IO.Stream stream; 
      try 
      { 
       if ((stream = openFileDialog1.OpenFile()) != null) 
       { 
        int numberOfFiles = openFileDialog1.SafeFileNames.Length; 
        using (stream) 
        { 

        } 
       } 
      } 

      catch (Exception ex) 
      { 
       MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message); 
      } 
     } 

添加目录:

try 
    { 
     foreach (string file in Directory.EnumerateFiles(path, "*.*", SearchOption.AllDirectories)) 
     { 
      yield return file; 
     } 
    } 
    catch (Exception) 
    { } 
+0

您是否在寻找一个对话框,它可以处理这两种情况?如果不是只注册两个按钮到相同的事件处理程序,并检查发件人 – makc

+1

这是尴尬的用户界面。也许你应该在标签中给用户留个小贴士:“你可以通过按住Shift键的同时单击鼠标或按Ctrl + A来选择多个文件。从资源管理器窗口拖放也会更容易。 –

+0

我想要选择文件夹和递归添加所有文件,有时候很多文件 – user2214609

回答

3
// Somewhere in you form constructor 
btnAddFiles.Click += new EventHandler(btnAdd_Click); 
btnAddDir.Click += new EventHandler(btnAdd_Click); 

// ... 

private void btnAdd_Click(object sender, EventArgs e) { 
    GetFolderToAddFilesFrom(); 
} 
+0

我在哪里需要注册到这2个事件? – user2214609

+0

@ user2214609:“'//在你的某个地方构建构造函数” – Otiel

+0

我可以做同样的方法所有的添加文件作业,而不用单独的2个状态与IF和ELSE? – user2214609

相关问题