你的意思是要在FolderBrowserDialog中也能列出文件?

解决方案 »

  1.   

    你见过有类似的软件??应该没有这个功能的,不过可以自己做一个,也不繁琐,网络上太多的目录树可供参考了;
    ││博客空间:http://blog.csdn.net/lovingkiss
    ││资源下载:http://download.csdn.net/user/lovingkiss
    ││Email:loving-kiss@163.com [MSN也是这个]
    ││联系方式:Q66840199 项目、聊天、咨询、探讨、统统收费,呵呵......
    ╚---------------------------------------------------------------------------------------------------------ō*︻$▅▆▇◤ 
      

  2.   

    应该不可能吧,若真那样,你那个文件夹里的文件你就选不中了。
    你可以建两个button,两个打开文件的按钮,分别为OpenFileDialog和FolderBrowserDialog
      

  3.   

    FolderBrowserDialog能否也能选择文件,需要选择文件夹和文件
    或者是OpenFileDialog能选择文件夹
    再或者有其它方法说下用于文件或文件夹的复制,选取文件就复制该文件,选择文件夹就复制该文件夹下面的所有文件
    既要选择文件,又要选择文件夹的时候应该很多吧,小弟以前学的是Java,公司要做.Net,只好从头学
      

  4.   

    我写了一些代码,楼主可以参考下:使用:protected override void OnClick(EventArgs e)
    {
    base.OnClick(e);
    BrowserDialog bd = new BrowserDialog();
    bd.IncludeFiles = true;
    bd.ShowDialog(this);
    }
    类定义:using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;
    using System.Security;
    using System.Threading;namespace BrowserDialog
    {
    public sealed class BrowserDialog : CommonDialog
    {
    private delegate int BrowseCallbackProc(IntPtr hwnd, int msg, IntPtr lParam, IntPtr lpData);
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    private static extern IntPtr SendMessage(HandleRef hWnd, int msg, int wParam, string lParam);
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public static extern IntPtr SendMessage(HandleRef hWnd, int msg, int wParam, int lParam);
     
    private static readonly int BFFM_SETSELECTION=0x466;
    private static readonly int BIF_BROWSEINCLUDEFILES = 0x4000;
    private static readonly int BIF_NONEWFOLDERBUTTON = 0x0200; [DllImport("shell32.dll", CharSet = CharSet.Auto)]
    public static extern bool SHGetPathFromIDList(IntPtr pidl, IntPtr pszPath); [DllImport("shell32.dll")]
    private static extern int SHGetSpecialFolderLocation(IntPtr hwnd, int csidl, ref IntPtr ppidl); [DllImport("shell32.dll", CharSet = CharSet.Auto)]
    private static extern IntPtr SHBrowseForFolder([In] BROWSEINFO lpbi);
     
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    private class BROWSEINFO
    {
    public IntPtr hwndOwner;
    public IntPtr pidlRoot;
    public IntPtr pszDisplayName;
    public string lpszTitle;
    public int ulFlags;
    public BrowseCallbackProc lpfn;
    public IntPtr lParam;
    public int iImage;
    } [ComImport, Guid("00000002-0000-0000-c000-000000000046"), SuppressUnmanagedCodeSecurity, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    private interface IMalloc
    {
    [PreserveSig]
    IntPtr Alloc(int cb);
    [PreserveSig]
    IntPtr Realloc(IntPtr pv, int cb);
    [PreserveSig]
    void Free(IntPtr pv);
    [PreserveSig]
    int GetSize(IntPtr pv);
    [PreserveSig]
    int DidAlloc(IntPtr pv);
    [PreserveSig]
    void HeapMinimize();
    } [DllImport("shell32.dll")]
    private static extern int SHGetMalloc([Out, MarshalAs(UnmanagedType.LPArray)] IMalloc[] ppMalloc);
     
    private BrowseCallbackProc callback;
    private string descriptionText;
    private Environment.SpecialFolder rootFolder;
    private string selectedPath;
    private bool selectedPathNeedsCheck;
    private bool showNewFolderButton;
    private bool includeFiles; public BrowserDialog()
    {
    this.Reset();
    }
    public string Description
    {
    get
    {
    return this.descriptionText;
    }
    set
    {
    this.descriptionText = (value == null) ? string.Empty : value;
    }
    } public bool IncludeFiles
    {
    get { return includeFiles; }
    set { includeFiles = value; }
    } public Environment.SpecialFolder RootFolder
    {
    get
    {
    return this.rootFolder;
    }
    set
    {
    if (!Enum.IsDefined(typeof(Environment.SpecialFolder), value))
    {
    return;
    }
    this.rootFolder = value;
    }
    } public string SelectedPath
    {
    get
    {
    if (((this.selectedPath != null) && (this.selectedPath.Length != 0)) && this.selectedPathNeedsCheck)
    {
    return null;
    }
    return this.selectedPath;
    }
    set
    {
    this.selectedPath = (value == null) ? string.Empty : value;
    this.selectedPathNeedsCheck = false;
    }
    } public bool ShowNewFolderButton
    {
    get
    {
    return this.showNewFolderButton;
    }
    set
    {
    this.showNewFolderButton = value;
    }
    }
    private int FolderBrowserDialog_BrowseCallbackProc(IntPtr hwnd, int msg, IntPtr lParam, IntPtr lpData)
    {
    switch (msg)
    {
    case 1:
    if (this.selectedPath.Length != 0)
    {
    SendMessage(new HandleRef(null, hwnd), BFFM_SETSELECTION, 1, this.selectedPath);
    }
    break; case 2:
    {
    IntPtr pidl = lParam;
    if (pidl != IntPtr.Zero)
    {
    IntPtr pszPath = Marshal.AllocHGlobal((int)(260 * Marshal.SystemDefaultCharSize));
    bool flag = SHGetPathFromIDList(pidl, pszPath);
    Marshal.FreeHGlobal(pszPath);
    SendMessage(new HandleRef(null, hwnd), 0x465, 0, flag ? 1 : 0);
    }
    break;
    }
    }
    return 0;
    } public override void Reset()
    {
    this.rootFolder = Environment.SpecialFolder.Desktop;
    this.descriptionText = string.Empty;
    this.selectedPath = string.Empty;
    this.selectedPathNeedsCheck = false;
    this.showNewFolderButton = true;
    }
    private static IMalloc GetSHMalloc()
    {
    IMalloc[] ppMalloc = new IMalloc[1];
    SHGetMalloc(ppMalloc);
    return ppMalloc[0];
    }
    protected override bool RunDialog(IntPtr hWndOwner)
    {
    IntPtr zero = IntPtr.Zero;
    bool flag = false;
    SHGetSpecialFolderLocation(hWndOwner, (int)this.rootFolder, ref zero);
    if (zero == IntPtr.Zero)
    {
    SHGetSpecialFolderLocation(hWndOwner, 0, ref zero);
    if (zero == IntPtr.Zero)
    {
    return false;
    }
    }
    int num = 0x40;
    if (!this.showNewFolderButton)
    {
    num += BIF_NONEWFOLDERBUTTON;
    }
    if (this.includeFiles)
    {
    num += BIF_BROWSEINCLUDEFILES;
    }
    if (Control.CheckForIllegalCrossThreadCalls && (Application.OleRequired() != ApartmentState.STA))
    {
    return false;
    }
    IntPtr pidl = IntPtr.Zero;
    IntPtr hglobal = IntPtr.Zero;
    IntPtr pszPath = IntPtr.Zero;
    try
    {
    BROWSEINFO lpbi = new BROWSEINFO();
    hglobal = Marshal.AllocHGlobal((int)(260 * Marshal.SystemDefaultCharSize));
    pszPath = Marshal.AllocHGlobal((int)(260 * Marshal.SystemDefaultCharSize));
    this.callback = new BrowseCallbackProc(this.FolderBrowserDialog_BrowseCallbackProc);
    lpbi.pidlRoot = zero;
    lpbi.hwndOwner = hWndOwner;
    lpbi.pszDisplayName = hglobal;
    lpbi.lpszTitle = this.descriptionText;
    lpbi.ulFlags = num;
    lpbi.lpfn = this.callback;
    lpbi.lParam = IntPtr.Zero;
    lpbi.iImage = 0;
    pidl = SHBrowseForFolder(lpbi);
    if (pidl != IntPtr.Zero)
    {
    SHGetPathFromIDList(pidl, pszPath);
    this.selectedPathNeedsCheck = true;
    this.selectedPath = Marshal.PtrToStringAuto(pszPath);
    flag = true;
    }
    }
    finally
    {
    IMalloc sHMalloc = GetSHMalloc();
    sHMalloc.Free(zero);
    if (pidl != IntPtr.Zero)
    {
    sHMalloc.Free(pidl);
    }
    if (pszPath != IntPtr.Zero)
    {
    Marshal.FreeHGlobal(pszPath);
    }
    if (hglobal != IntPtr.Zero)
    {
    Marshal.FreeHGlobal(hglobal);
    }
    this.callback = null;
    }
    return flag;
    }
    }
    }
      

  5.   

    FolderBrowserDialog就可以了啦,还要那么复杂做什!
      

  6.   

    请问FolderBrowserDialog怎么做可以选择文件