首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置OpenFileDialog限制

设置OpenFileDialog限制
EN

Stack Overflow用户
提问于 2013-02-28 18:31:50
回答 2查看 1.9K关注 0票数 2

我有一个Windows Form应用程序,我使用一个自定义控件,允许用户选择和保存图像。但是,我需要插入一些限制。简单的方法是只选择jpg文件,但现在我需要限制用户只能看到和选择名称中具有特定模式的jpg图像,如果可能的话(我想我已经在其他windows应用程序中看到过这一点),我希望这个模式留在File Name字段中,用户不能删除它。

到目前为止,我所做的是:

我设置了限制:

代码语言:javascript
复制
    fileNameFilter = "All files (*.jpg)|" + ImageNameFilter + "*.jpg";
    openFileDialog1.Filter = fileNameFilter;

我可以向用户展示他需要寻找什么模式:

代码语言:javascript
复制
openFileDialog1.FileName = fileNameFilter;

然而,有两件事我仍然无法完成。下面是一个打印屏幕来说明这一点:

首先-模式是显示的,但我可以删除它,当它像这样的时候,我想如果File name字段可能是Read only,或者换句话说,用户不应该能够删除我放在那里的东西。

第二-这是包含以前打开的文件的列表,即使文件与名称限制/过滤器不匹配,用户仍然可以从列表中选择并保存该文件。同样,如果可能的话,我需要在File Dialog打开时清理这个列表,或者以某种方式阻止用户保存这个文件,但我认为第二个需要太多额外的业务逻辑,所以我更喜欢清理列表。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-28 18:51:18

试图通过过滤器或文件名模式严格控制文件对话框中显示的内容是行不通的。用户可以随时在文件名编辑框中键入自己的样式。

您需要做的是使用文件对话框的工具来控制显示哪些对象。不幸的是,C#包装器没有公开底层Win32控件提供的这种功能。

如果您需要支持XP,那么您需要监听CDN_INCLUDEITEM通知。这是为文件夹中的每个项目发送的。因此,您有机会允许或拒绝包含每一项。

对于Vista和更高版本中使用的对话框,这是不同的。这些对话框使用IFileDialog。您需要调用SetFilter方法来添加过滤器。该过滤器是您的IShellItemFilter实现,它再次使用IncludeItem方法控制包含。

在C#中实现这一切可能有点麻烦,但这是按您的要求做的正确方法。一旦你这样做了,你甚至不需要考虑将文件名编辑框设为只读。因为该对话框将只提供您允许包含的项目。

票数 3
EN

Stack Overflow用户

发布于 2013-02-28 18:36:17

No

有两种解决方案:在单击Open-click后检查文件名(无论如何都应该这样做),或者创建自己的控件来显示与您的文件名模式匹配的文件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15133181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档