'常量声明
Private Const MAX_PATH = 260
Private Const BIF_USENEWUI = &H40
'浏览文件夹对话框
Private Type BrowseInfo
    hwndOwner As Long
    pIDLRoot As Long
    pszDisplayName As Long
    lpszTitle As Long
    ulFlags As Long
    lpfnCallback As Long
    lParam As Long
    iImage As Long
End Type
Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long
'浏览文件夹(选择一个目录)
'参数说明:
'        lngHwnd              调用的窗口句柄
'        strPrompt            显示在对话框上的提示
'返回值:
'        成功        完整目录
'        失败        空字符串("")
'例子:
'        strDir = BrowseForFolder(Me.Hwnd,"请选择一个目录")
Public Function BrowseForFolder(ByVal lngHwnd As Long, _
            ByVal strPrompt As String) As String
    Dim iNull As Integer
    Dim lpIDList As Long
    Dim lResult As Long
    Dim sPath As String
    Dim udtBI As BrowseInfo
    With udtBI
        .hwndOwner = lngHwnd
        .lpszTitle = lstrcat(strPrompt, "")
        .ulFlags = BIF_USENEWUI
    End With
    lpIDList = SHBrowseForFolder(udtBI)
    If lpIDList Then
        sPath = String$(MAX_PATH, 0)
        lResult = SHGetPathFromIDList(lpIDList, sPath)
        Call CoTaskMemFree(lpIDList)
        iNull = InStr(sPath, vbNullChar)
        If iNull Then
            sPath = Left$(sPath, iNull - 1)
        End If
    End If
    If Right$(sPath, 1) <> "\" And sPath <> "" Then
        sPath = sPath & "\"
    End If
    BrowseForFolder = sPath
End Function

解决方案 »

  1.   

    using System;
    using System.Windows.Forms.Design;
    using System.Windows.Forms;
    namespace Dialogs
    { /// <summary>
    /// Use this class to display the browse for folder dialog box.
    /// Browse for a specific kind of object (Folders, Printers, Computers, etc).
    /// </summary>
    public class FolderBrowser : FolderNameEditor
    {
    /// <summary>
    /// Types of objects you can look for.
    /// </summary>
    public enum fbStyles
    {
    BrowseForComputer = FolderNameEditor.FolderBrowserStyles.BrowseForComputer,
    BrowseForEverything = FolderNameEditor.FolderBrowserStyles.BrowseForEverything,
    BrowseForPrinter = FolderNameEditor.FolderBrowserStyles.BrowseForPrinter,
    RestrictToDomain = FolderNameEditor.FolderBrowserStyles.RestrictToDomain,
    RestrictToFilesystem = FolderNameEditor.FolderBrowserStyles.RestrictToFilesystem,
    RestrictToSubfolders = FolderNameEditor.FolderBrowserStyles.RestrictToSubfolders,
    ShowTextBox = FolderNameEditor.FolderBrowserStyles.ShowTextBox ,
    } /// <summary>
    /// 
    /// </summary>
    public enum fbFolder
    {
    Desktop = FolderNameEditor.FolderBrowserFolder.Desktop,
    Favorites = FolderNameEditor.FolderBrowserFolder.Favorites,
    MyComputer = FolderNameEditor.FolderBrowserFolder.MyComputer,
    MyDocuments = FolderNameEditor.FolderBrowserFolder.MyDocuments,
    MyPictures = FolderNameEditor.FolderBrowserFolder.MyPictures,
    NetAndDialUpConnections = FolderNameEditor.FolderBrowserFolder.NetAndDialUpConnections,
    NetworkNeighborhood = FolderNameEditor.FolderBrowserFolder.NetworkNeighborhood,
    Printers = FolderNameEditor.FolderBrowserFolder.Printers,
    Recent = FolderNameEditor.FolderBrowserFolder.Recent,
    SendTo = FolderNameEditor.FolderBrowserFolder.SendTo,
    StartMenu = FolderNameEditor.FolderBrowserFolder.StartMenu,
    Templates = FolderNameEditor.FolderBrowserFolder.Templates
    } // 
    private FolderNameEditor.FolderBrowser m_obBrowser = null;
    public FolderBrowser()
    {
    m_obBrowser = new FolderNameEditor.FolderBrowser();
    } /// <summary>
    /// 默认路径.
    /// </summary>
    public Dialogs.FolderBrowser.fbFolder  StartLocation
    {
    set
    {
    switch (value)
    {
    case fbFolder.Desktop:
    m_obBrowser.StartLocation = FolderBrowserFolder.Desktop;
    break;
    case fbFolder.Favorites:
    m_obBrowser.StartLocation = FolderBrowserFolder.Favorites;
    break;
    case fbFolder.MyComputer:
    m_obBrowser.StartLocation = FolderBrowserFolder.MyComputer;
    break;
    case fbFolder.MyDocuments:
    m_obBrowser.StartLocation = FolderBrowserFolder.MyDocuments;
    break;
    case fbFolder.MyPictures:
    m_obBrowser.StartLocation = FolderBrowserFolder.MyPictures;
    break;
    case fbFolder.NetAndDialUpConnections:
    m_obBrowser.StartLocation = FolderBrowserFolder.NetAndDialUpConnections;
    break;
    case fbFolder.NetworkNeighborhood:
    m_obBrowser.StartLocation = FolderBrowserFolder.NetworkNeighborhood;
    break;
    case fbFolder.Printers:
    m_obBrowser.StartLocation = FolderBrowserFolder.Printers;
    break;
    case fbFolder.Recent:
    m_obBrowser.StartLocation = FolderBrowserFolder.Recent;
    break;
    case fbFolder.SendTo:
    m_obBrowser.StartLocation = FolderBrowserFolder.SendTo;
    break;
    case fbFolder.StartMenu:
    m_obBrowser.StartLocation = FolderBrowserFolder.StartMenu;
    break;
    case fbFolder.Templates:
    m_obBrowser.StartLocation = FolderBrowserFolder.Templates;
    break; }
    }
    get
    {
    return (fbFolder)this.m_obBrowser.StartLocation;
    }
    }

    /// <summary>
    /// The type of object to look for.
    /// </summary>
    public Dialogs.FolderBrowser.fbStyles Style
    {
    set
    {
    switch (value)
    {
    case fbStyles.BrowseForComputer:
    m_obBrowser.Style = FolderBrowserStyles.BrowseForComputer;
    break;
    case fbStyles.BrowseForEverything:
    m_obBrowser.Style = FolderBrowserStyles.BrowseForEverything;
    break;
    case fbStyles.BrowseForPrinter:
    m_obBrowser.Style = FolderBrowserStyles.BrowseForPrinter;
    break;
    case fbStyles.RestrictToDomain:
    m_obBrowser.Style = FolderBrowserStyles.RestrictToDomain;
    break;
    case fbStyles.RestrictToFilesystem:
    m_obBrowser.Style = FolderBrowserStyles.RestrictToFilesystem;
    break;
    case fbStyles.RestrictToSubfolders:
    m_obBrowser.Style = FolderBrowserStyles.RestrictToSubfolders;
    break;
    case fbStyles.ShowTextBox:
    m_obBrowser.Style = FolderBrowserStyles.ShowTextBox;
    break; }
    }
    get
    {
    return (fbStyles)this.m_obBrowser.Style;
    }
    } /// <summary>
    /// 显示对话框的那串文字.
    /// </summary>
    public string Description
    {
    set
    {
    m_obBrowser.Description = value;
    }
    get
    {
    return this.m_obBrowser.Description;
    }
    } /// <summary>
    /// 返回路径名.
    /// </summary>
    public string DirectoryPath
    {
    get
    {
    try
    {
    return this.m_obBrowser.DirectoryPath;
    }
    catch
    {
    return null;
    }
    }
    } /// <summary>
    /// 显示浏览对话框.
    /// </summary>
    /// <returns>
    /// </returns>
    public DialogResult ShowDialog()
    {
    return m_obBrowser.ShowDialog();
    }
    }
    }
      

  2.   

    以上是一个类文件:
    下面是使用示例
    private void button1_Click(object sender, System.EventArgs e)
    {
    Dialogs.FolderBrowser Fbrowser = new Dialogs.FolderBrowser();
    Fbrowser.Description="请选择目标目录";
    Fbrowser.StartLocation = Dialogs.FolderBrowser.fbFolder.Desktop;
    Fbrowser.Style = Dialogs.FolderBrowser.fbStyles.BrowseForEverything;
    if (Fbrowser.ShowDialog()==DialogResult.OK) 
    {
    txtPath.Text = Fbrowser.DirectoryPath;
    }
    }
      

  3.   

    http://www.dapha.net/down/list.asp?id=2059
    看看是不是你需要的。
      

  4.   

    为什么我using了System.Windows.Forms.Design还出错呢?
    提示说找不到类型或命中空间???为什么???
      

  5.   

    是不是指FolderNameEditor类?
    他不仅需要命名空间System.Windows.Forms.Design.
    还需要程序集:System.Design.dll你在“项目”中"添加引用”