如何用来OpenFileDialog
选择文件夹?
我打算使用以下项目:https://github.com/scottwis/OpenFileOrFolderDialog
但是,我遇到了一个问题.它使用GetOpenFileName
功能和OPENFILENAME
结构.并OPENFILENAME
有成员的名字templateID
.它是对话框模板的标识符.该项目也包含res1.rc
文件和模板化对话框init.但我无法弄清楚如何将此文件附加到我的C#项目.
有没有更好的方法来使用OpenFileDialog
选择文件夹?
在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 是值得称赞的.可能为此任务滚动了一个自定义对话框.
我有这个代码,我怎么能让它接受所有典型的图像格式?PNG,JPEG,JPG,GIF?
这是我到目前为止所拥有的:
public void EncryptFile()
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
dialog.InitialDirectory = @"C:\";
dialog.Title = "Please select an image file to encrypt.";
if (dialog.ShowDialog() == DialogResult.OK)
{
//Encrypt the selected file. I'll do this later. :)
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,过滤器设置为.txt文件.我可以改为PNG,但其他类型呢?
我有一个TextBox
名字textbox1
和一个Button
名字button1
.当我点击button1
我想浏览我的文件只搜索图像文件(类型jpg,png,bmp ...).当我选择一个图像文件并在文件对话框中单击"确定"时,我希望文件目录的写入方式textbox1.text
如下:
textbox1.Text = "C:\myfolder\myimage.jpg"
Run Code Online (Sandbox Code Playgroud) 如何在一个组中使用多个文件扩展名OpenFileDialog
?我有Filter = "BMP|*.bmp|GIF|*.gif|JPG|*.jpg|PNG|*.png|TIFF|*.tiff"
和我想创建组,所以JPG是*.jpg和*.jpeg,TIFF是*.tif和*.tiff以及'所有图形类型'?我怎样才能做到这一点?
我刚开始学习WPF的MVVM模式.我碰壁了:当你需要展示一个OpenFileDialog时你会怎么做?
这是我尝试使用它的示例UI:
单击"浏览"按钮时,应显示OpenFileDialog.当用户从OpenFileDialog中选择文件时,文件路径应显示在文本框中.
我怎么能用MVVM做到这一点?
更新:如何使用MVVM实现此功能并使其可以进行单元测试?以下解决方案不适用于单元测试.
我有一个简单的脚本,它解析文件并将其内容加载到数据库.我不需要UI,但是现在我提示用户使用raw_input
哪个文件解析最不友好,特别是因为用户无法复制/粘贴路径.我想快速简便地向用户呈现文件选择对话框,他们可以选择文件,然后将其加载到数据库.(在我的用例中,如果他们碰巧选择了错误的文件,它将无法解析,即使它被加载到数据库也不会有问题.)
import tkFileDialog
file_path_string = tkFileDialog.askopenfilename()
Run Code Online (Sandbox Code Playgroud)
这段代码接近我想要的,但它留下一个恼人的空框架打开(无法关闭,可能是因为我没有注册一个关闭事件处理程序).
我不必使用tkInter,但由于它在Python标准库中,因此它是最快和最简单的解决方案的良好候选者.
什么是在没有任何其他UI的情况下在脚本中提示文件或文件名的快速简便方法?
"浏览文件夹"Windows对话框非常不方便,因为:
有没有办法使用"打开文件"对话框(更好)选择文件夹?一些旗帜或选项或什么?
上下文:用Python和Qt编写的口径eLibrary管理器.
它目前显示在左侧.我希望它显示在右侧
甚至更好,作为打开文件对话框:
我想使用OpenFileDialog对象浏览到excel文件.我想设置过滤器打开具有不同类型的excel扩展名的文件,如:.xls,.xlsm,.xlsx等.
我正在使用的是:
OpenFileDialog of = new OpenFileDialog();
of.Filter = "Excel Files(.xls)|*.xls|
Excel Files(.xlsx)|*.xlsx| Excel Files(*.xlsm)|*.xlsm";
Run Code Online (Sandbox Code Playgroud)
这有效,但用户必须从OpenFileDialog的下拉列表中选择正确的excel文件类型.
有谁知道是否有办法为所有类型的Excel扩展应用一个过滤器?
类似于:"... Excel文件(.xls,.xlsx,.xlxm)|*.xls,*.xlsx,*.xlsm;"
提前感谢您的回复.
好的,我真的想知道专家MVVM开发人员如何处理WPF中的openfile对话框.
我真的不想在我的ViewModel中执行此操作(其中'Browse'通过DelegateCommand引用)
void Browse(object param)
{
//Add code here
OpenFileDialog d = new OpenFileDialog();
if (d.ShowDialog() == true)
{
//Do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
因为我认为这违背了MVVM方法论.
我该怎么办?