在VS .NET中,当您为项目选择文件夹时,会显示一个看起来像OpenFileDialog或SaveFileDialog的对话框,但设置为仅接受文件夹.自从我看到这个以来,我就想知道它是如何完成的.我知道FolderBrowserDialog,但我从来没有真正喜欢那个对话框.它开始太小,不让我利用能够键入路径.
我几乎可以肯定,现在没有办法从.NET做到这一点,但我也很好奇你是如何从非托管代码中做到这一点的.如果没有从头开始完全重新实现对话框,那么如何修改对话框以获得此行为?
我还要重申,我知道FolderBrowserDialog,但有时我不喜欢使用它,除了真正好奇如何以这种方式配置对话框.告诉我只使用FolderBrowserDialog可以帮助我保持一致的UI体验,但不能满足我的好奇心,所以它不会算作答案.
它也不是特定于Vista的东西; 自从VS .NET 2003以来我一直在看这个对话框,所以在Win2k和WinXP中它是可行的.这不是一个"我想知道正确的方法来做这个"的问题,更多的是"我一直很好奇这个,因为我第一次想在VS 2003中这样做"的问题.我知道Vista的文件对话框有一个选项可以做到这一点,但它一直在XP中工作,所以我知道他们做了一些事情让它工作.特定于Vista的答案不是答案,因为问题上下文中不存在Vista.
更新:我接受了Scott Wisniewski的答案,因为它附带了一个工作样本,但我认为Serge指出对话框定制(这无疑是.NET令人讨厌但它确实有效)和Mark Ransom弄清楚MS 是值得称赞的.可能为此任务滚动了一个自定义对话框.
我有一个textBox,它填充了从数据库中获取的路径(但这是无关紧要的).所以我想要打开一个FolderBrowserDialog按钮 - >浏览文件夹并选择路径(即选择某个文件夹),然后确定/保存此路径并在textBox中进行更新.
所以在整个情况下 - 我不知道如何使用OpenFolderBrowserDialog,因为当我拖动它时 - 它只在页面的底部,但我想把它作为一个按钮放在我的WinForm中的某个地方.而且 - 如何将选定的路径保存到(即字符串)变量中,以便将其设置为文本框的值?某种方法?
我正在尝试使用 C#、Visual Studio 2010 中的 IFileOpenDialog 接口显示可以选择文件夹的标准打开文件对话框。
我正在尝试使用最少的代码,所以我只在接口中定义了我需要的方法:
using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Disable warning CS0108: 'x' hides inherited member 'y'. Use the new keyword if hiding was intended.
\#pragma warning disable 0108
namespace FolderDialog
{
internal static class IIDGuid
{
internal const string IModalWindow = "b4db1657-70d7-485e-8e3e-6fcb5a5c1802";
internal const string IFileDialog = "42f85136-db7e-439c-85f1-e4075d135fc8";
internal const string IFileOpenDialog = "d57c7288-d4ad-4768-be02-9d969532d960";
}
internal static class CLSIDGuid
{
internal const string FileOpenDialog = "DC1C5A9C-E88A-4dde-A5A1-60F82A20AEF7";
}
static class NativeMethods
{
[Flags]
internal …Run Code Online (Sandbox Code Playgroud) 我有一个属性网格控件,我希望能够在用户正在将数据导出到新文件的过程中显示SaveFileDialog.我可以轻松地将OpenFileDialog与FileNameEditor挂钩,但似乎没有用于保存文件的等效类.
是否存在可以在System.ComponentModel.Editor属性中指定的现有类,以便显示SaveFileDialog?