VS .NET 2002不行
VS .NET 2003中提供了FolderBrowserDialog类,为你的需要提供支持。
除此之外就只能调用API中的方法。
VS .NET 2003中提供了FolderBrowserDialog类,为你的需要提供支持。
除此之外就只能调用API中的方法。
解决方案 »
- 搜索电脑里的后缀名为.txt的文件,然后删除。求C#源码
- 如何修改这个数据源连接串?
- 关于滚动广告问题
- 安装vs2005后,为什么不能在CMD下编译C#程序?
- 请问怎样在一个pictureBox里用鼠标画一个矩型?
- .^^.开源:C#.NET开发的MIS打印程序,各种网格如DataGrid打印、DataTable、HtmlTable等二维形式全搞定,源码免费下载
- WPF
- 请问有没有东莞市东坑镇的,大家交个朋友!邻镇的也行。QQ:47143107
- 同样是基于C#的web应用程序,为什么VS2005有<asp:Menu></asp:Menu>导航控件而VS.net2003却没有呢?
- 各位帅哥美女谁有vs.net中文版的产品密匙?急ing !在线等!
- 真的没有人在vs2003下使用过水晶报表吗? 参与有分,各位帮试试吧。有微软的吗?
- 数据库中汉字绑定到控件后成了乱码,请问如何解决?
Generate an empty project. To do this, create a new blank solution and name it BrowseForFolder. Add a new Visual C# .NET Class Library project to the newly-created solution, and name the project WinFormsExtras.
Modify the wizard-generated code. To do this, rename the Class1.cs file from the project to FolderBrowser.cs, and delete the Class1 class that the wizard adds to this file. Rename the namespace from WinFormsExtra.cs (WinFormsExtras) to Microsoft.Samples.WinForms.Extras. On the project's Properties pages, rename the default namespace from WinFormsExtras to Microsoft.Samples.WinForms.Extras. Change the assembly name from WinFormsExtras to Microsoft.Samples.WinForms.Extras.
Add the declarations that are needed for P/Invoke and ComInterop. Make sure that System.Runtime.InteropServices and System.Text are referenced, and provide declarations for the functions and interfaces that you need, as follows:using System.Runtime.InteropServices;
using System.Text;
internal class Win32API
{
// C# representation of the IMalloc interface.
[InterfaceType ( ComInterfaceType.InterfaceIsIUnknown ),
Guid ( "00000002-0000-0000-C000-000000000046" )]
public interface IMalloc
{
[PreserveSig] IntPtr Alloc ( [In] int cb );
[PreserveSig] IntPtr Realloc ( [In] IntPtr pv, [In] int cb );
[PreserveSig] void Free ( [In] IntPtr pv );
[PreserveSig] int GetSize ( [In] IntPtr pv );
[PreserveSig] int DidAlloc ( IntPtr pv );
[PreserveSig] void HeapMinimize ( );
} [DllImport("User32.DLL")]
public static extern IntPtr GetActiveWindow ( ); public class Shell32
{
// Styles used in the BROWSEINFO.ulFlags field.
[Flags]
public enum BffStyles
{
RestrictToFilesystem = 0x0001, // BIF_RETURNONLYFSDIRS
RestrictToDomain = 0x0002, // BIF_DONTGOBELOWDOMAIN
RestrictToSubfolders = 0x0008, // BIF_RETURNFSANCESTORS
ShowTextBox = 0x0010, // BIF_EDITBOX
ValidateSelection = 0x0020, // BIF_VALIDATE
NewDialogStyle = 0x0040, // BIF_NEWDIALOGSTYLE
BrowseForComputer = 0x1000, // BIF_BROWSEFORCOMPUTER
BrowseForPrinter = 0x2000, // BIF_BROWSEFORPRINTER
BrowseForEverything = 0x4000, // BIF_BROWSEINCLUDEFILES
} // Delegate type used in BROWSEINFO.lpfn field.
public delegate int BFFCALLBACK ( IntPtr hwnd, uint uMsg, IntPtr lParam, IntPtr lpData ); [StructLayout ( LayoutKind.Sequential, Pack=8 )]
public struct BROWSEINFO
{
public IntPtr hwndOwner;
public IntPtr pidlRoot;
public IntPtr pszDisplayName;
[MarshalAs ( UnmanagedType.LPTStr )]
public string lpszTitle;
public int ulFlags;
[MarshalAs ( UnmanagedType.FunctionPtr )]
public BFFCALLBACK lpfn;
public IntPtr lParam;
public int iImage;
} [DllImport ( "Shell32.DLL" )]
public static extern int SHGetMalloc ( out IMalloc ppMalloc ); [DllImport ( "Shell32.DLL" )]
public static extern int SHGetSpecialFolderLocation (
IntPtr hwndOwner, int nFolder, out IntPtr ppidl ); [DllImport ( "Shell32.DLL" )]
public static extern int SHGetPathFromIDList (
IntPtr pidl, StringBuilder Path ); [DllImport ( "Shell32.DLL", CharSet=CharSet.Auto )]
public static extern IntPtr SHBrowseForFolder ( ref BROWSEINFO bi );
}
}
Create the FolderBrowser component class. To do this, add references to the System.Drawing and System.Windows.Forms .NET assemblies. Make sure to identify the namespaces that are used in the implementation of the component, and establish the component's internal data structures, as follows:using System.Drawing;
using System.Windows.Forms;
using System.ComponentModel;
using System.Security.Permissions;
/// <summary>
/// Component wrapping access to the Browse For Folder common dialog box.
/// Call the ShowDialog() method to bring the dialog box up.
/// </summary>
public sealed class FolderBrowser : Component
{
private static readonly int MAX_PATH = 260;
// Root node of the tree view.
private FolderID startLocation = FolderID.Desktop; // Browse info options.
private int publicOptions = (int) Win32API.Shell32.BffStyles.RestrictToFilesystem |
(int) Win32API.Shell32.BffStyles.RestrictToDomain;
private int privateOptions = (int) Win32API.Shell32.BffStyles.NewDialogStyle; // Description text to show.
private string descriptionText = "Please select a folder below:"; // Folder chosen by the user.
private string directoryPath = String.Empty; /// <summary>
/// Enum of CSIDLs identifying standard shell folders.
/// </summary>
public enum FolderID
{
Desktop = 0x0000,
Printers = 0x0004,
MyDocuments = 0x0005,
Favorites = 0x0006,
Recent = 0x0008,
SendTo = 0x0009,
StartMenu = 0x000b,
MyComputer = 0x0011,
NetworkNeighborhood = 0x0012,
Templates = 0x0015,
MyPictures = 0x0027,
NetAndDialUpConnections = 0x0031,
}
}
/// Helper function that returns the IMalloc interface used by the shell.
/// </summary>
private static Win32API.IMalloc GetSHMalloc ( )
{
Win32API.IMalloc malloc;
Win32API.Shell32.SHGetMalloc ( out malloc );
return malloc;
} /// <summary>
/// Shows the folder browser dialog box.
/// </summary>
public DialogResult ShowDialog ( )
{
return ShowDialog ( null );
} /// <summary>
/// Shows the folder browser dialog box with the specified owner window.
/// </summary>
public DialogResult ShowDialog ( IWin32Window owner )
{
IntPtr pidlRoot = IntPtr.Zero; // Get/find an owner HWND for this dialog.
IntPtr hWndOwner; if ( owner != null )
{
hWndOwner = owner.Handle;
}
else
{
hWndOwner = Win32API.GetActiveWindow ( );
} // Get the IDL for the specific startLocation.
Win32API.Shell32.SHGetSpecialFolderLocation ( hWndOwner, (int) startLocation, out pidlRoot ); if (pidlRoot == IntPtr.Zero)
{
return DialogResult.Cancel;
} int mergedOptions = (int)publicOptions | (int)privateOptions; if ( ( mergedOptions & (int)Win32API.Shell32.BffStyles.NewDialogStyle ) != 0 )
{
if ( System.Threading.ApartmentState.MTA == Application.OleRequired ( ) )
mergedOptions = mergedOptions & (~ (int)Win32API.Shell32.BffStyles.NewDialogStyle);
} IntPtr pidlRet = IntPtr.Zero; try
{
// Construct a BROWSEINFO.
Win32API.Shell32.BROWSEINFO bi = new Win32API.Shell32.BROWSEINFO ( );
IntPtr buffer = Marshal.AllocHGlobal ( MAX_PATH); bi.pidlRoot = pidlRoot;
bi.hwndOwner = hWndOwner;
bi.pszDisplayName = buffer;
bi.lpszTitle = descriptionText;
bi.ulFlags = mergedOptions;
// The rest of the fields are initialized to zero by the constructor.
// bi.lpfn = null; bi.lParam = IntPtr.Zero; bi.iImage = 0; // Show the dialog.
pidlRet = Win32API.Shell32.SHBrowseForFolder ( ref bi ); // Free the buffer you've allocated on the global heap.
Marshal.FreeHGlobal ( buffer ); if ( pidlRet == IntPtr.Zero )
{
// User clicked Cancel.
return DialogResult.Cancel;
} // Then retrieve the path from the IDList.
StringBuilder sb = new StringBuilder ( MAX_PATH );
if ( 0 == Win32API.Shell32.SHGetPathFromIDList ( pidlRet, sb ) )
{
return DialogResult.Cancel;
} // Convert to a string.
directoryPath = sb.ToString ( );
}
finally
{
Win32API.IMalloc malloc = GetSHMalloc ( );
malloc.Free ( pidlRoot ); if ( pidlRet != IntPtr.Zero )
{
malloc.Free ( pidlRet );
}
} return DialogResult.OK;
}
OnlyFilesystem
ShowNetworkFolders
OnlySubfolders
ShowTextBox
ValidateUserInput
SelectComputer
SelectPrinter
SelectFiles
DirectoryPath
Description
In addition, implement the StartLocation property as follows: /// <summary>
/// Helper function used to set and reset bits in the publicOptions bitfield.
/// </summary>
private void SetOptionField ( int mask, bool turnOn )
{
if (turnOn)
publicOptions |= mask;
else
publicOptions &= ~mask;
} /// <summary>
/// Only return file system directories. If the user selects folders
/// that are not part of the file system, the OK button is unavailable.
/// </summary>
[Category ( "Navigation" )]
[Description ( "Only return file system directories. If the user selects folders " +
"that are not part of the file system, the OK button is unavailable." )]
[DefaultValue ( true )]
public bool OnlyFilesystem
{
get
{
return (publicOptions & (int) Win32API.Shell32.BffStyles.RestrictToFilesystem) != 0;
}
set
{
SetOptionField ( (int) Win32API.Shell32.BffStyles.RestrictToFilesystem, value );
}
} /// <summary>
/// Location of the root folder from which to start browsing. Only the specified
/// folder and any folders beneath it in the namespace hierarchy appear
/// in the dialog box.
/// </summary>
[Category ( "Navigation" )]
[Description ( "Location of the root folder from which to start browsing. Only the specified " +
"folder and any folders beneath it in the namespace hierarchy appear " +
"in the dialog box." )]
[DefaultValue ( typeof(FolderID), "0")]
public FolderID StartLocation
{
get
{
return startLocation;
}
set
{
new UIPermission ( UIPermissionWindow.AllWindows ).Demand ( );
startLocation = value;
}
} /// <summary>
/// Full path to the folder selected by the user.
/// </summary>
[Category("Navigation")]
[Description("Full path to the folder slected by the user.")]
public string DirectoryPath
{
get
{
return directoryPath;
}
}
Provide a toolbox icon for the component. To do this, right-click the project in Solution Explorer, click Add, click New Item, click Resources, and then click Bitmap File. Name the new bitmap file FolderBrowser.bmp and resize it to be 16 x 16 pixels. Edit the bitmap as desired. In Solution Explorer, select the FolderBrowser.bmp file, open the property grid, and then set Build Action to Embedded Resource. Next, associate this bitmap with your component by adding an attribute to the FolderBrowser class, as follows: [ToolboxBitmap(typeof(FolderBrowser))]
public sealed class FolderBrowser : Component
{ // ...
}
Build the project.
Back to the top
public class DirBrowser : FolderNameEditor
{
FolderBrowser fb = new FolderBrowser();
public string Description
{
set { _description = value; }
get { return _description; }
} public string ReturnPath
{
get { return _returnPath; }
} public DirBrowser() { }
public DialogResult ShowDialog()
{
fb.Description = _description;
fb.StartLocation = FolderBrowserFolder.MyComputer; DialogResult r = fb.ShowDialog();
if (r == DialogResult.OK)
_returnPath = fb.DirectoryPath;
else
_returnPath = String.Empty; return r;
} private string _description = "Choose Directory";
private string _returnPath = String.Empty;
}//Calling
DirBrowser myDirBrowser=new DirBrowser();
if(myDirBrowser.ShowDialog()!=DialogResult.Cancel)
MessageBox.Show(myDirBrowser.ReturnPath);