you can also use SHBrowseForFolder API

解决方案 »

  1.   

    您还是可以使用OpenFileDialog,参数请赋目录的Path。谢谢!
      

  2.   

    用Directory.GetLogicalDrives();得到所有本地的磁盘用Directory.GetDirectories(path);得到path路径下的所有子目录
      

  3.   

    感谢您使用微软产品。目前,.NET Framework没有直接提供打开目录(文件夹)对话框。不过,您可以按照如下的步骤,在VC#中实现自定义目录(文件夹)对话框(Folder Dialog),然后可以在VC#和VB.NET中调用:
    1,首先建立一个FolderDialog的类文件,并将其编译成为dll文件,以便其他应用程序调用:
    具体过程如下:
    (1)新建一个Window Application应用程序(注:在调试通过后,可改为Class Library输出),右击ToolBox,选择Customize ToolBox……,在弹出的Customize ToolBox对话框中,选择“.Net Framework Component”,最后在列表中选中DriveListBox, DirListBox 和 FileListBox等复选框;
    (2)添加DriveListBox, DirListBox 和 FileListBox到Form窗体上,并编写如下代码(只列出一些主要的代码,供参考):
    using ……;
    namespace CustomerFolderDialog
    {
    public class FolderDialog : System.Windows.Forms.Form
    {
    public string Path
    {
    get { return dirListBox1.Path; }
    }
    private string tempDrive;
    ……
    public FolderDialog()
    {
    InitializeComponent();
    tempDrive = this.driveListBox1.Drive;
    }
    ……
    private void driveListBox1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    try
    {
    this.dirListBox1.Path = this.driveListBox1.Drive;
    tempDrive = this.driveListBox1.Drive;
    }
    catch(Exception ex)
    {
    MessageBox.Show(ex.Message,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
    driveListBox1.Drive = tempDrive;
    }
    } private void Form1_Load(object sender, System.EventArgs e)
    {
    this.label1.Text = dirListBox1.Path;
    } private void dirListBox1_Change(object sender, System.EventArgs e)
    {
    try
    {
    this.fileListBox1.Path = this.dirListBox1.Path;
    this.label1.Text = dirListBox1.Path;
    }
    catch(Exception ex)
    {
    MessageBox.Show(ex.Message,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
    }
    }
    }
    }
    (3),在调试通过后,在Form窗体上添加两个Button,并分别设置DialogResult属性为:OK或Cancel,分别设置其Text属性为OK或Cancel。同时,在应用程序的属性对话框 (Project/Properties) 中将其Output Type改为Class Library,编译输出dll文件。2,另外新建一个C#的应用程序,添加对上述dll文件的引用(Add Reference)。
    下面提供一段示例程序,完成整个调用过程:
    ……
    using CustomerFolderDialog;
    ……
    private void button1_Click(object sender, System.EventArgs e)
    {
    FolderDialog folderDialog = new FolderDialog();
    if(folderDialog.ShowDialog() == DialogResult.OK)
    {
    textBox1.Text = folderDialog.Path;
    }
    }
    希望这些对您有帮助,如果有问题,请继续讨论! — 微软全球技术中心 VB支持中心本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
    为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。