我有一个Windows Form
应用程序,我使用自定义控件,允许用户选择和保存图像。但是我需要插入一些限制。最简单的方法是仅选择jpg
个文件,但现在我需要限制用户只能在名称中查看和选择具有特定模式的jpg
图像,如果可能的话(我想我是&#39) ;已经看到这在其他Windows应用程序中实现了)我希望此模式保留在File Name
字段中,并且用户无法删除它。
到目前为止我所做的事情:
我有限制集:
fileNameFilter = "All files (*.jpg)|" + ImageNameFilter + "*.jpg";
openFileDialog1.Filter = fileNameFilter;
我可以向用户显示他需要查找的模式:
openFileDialog1.FileName = fileNameFilter;
然而,有两件事我仍然无法完成。这是一个清晰的打印屏幕:
首先 - 显示模式,但我可以删除它,如果它是这样的,我想要File name
字段可能是Read only
或其他用户不应该删除我放在那里的内容。
第二 - 这是包含先前打开文件的列表,即使该文件与名称限制/过滤器不匹配,用户仍然可以从列表中选择并保存该文件。我需要再次,如果可能的话,在File Dialog
打开时清除此列表或以某种方式阻止用户保存此文件,但我认为第二个将需要太多额外的业务逻辑,所以我更喜欢清理清单。
答案 0 :(得分:3)
试图通过过滤器或文件名模式严格控制文件对话框中显示的内容不起作用。用户始终可以在文件名编辑框中键入自己的模式。
您需要做的是使用文件对话框的工具来控制显示的对象。不幸的是,C#包装器没有公开底层Win32控件提供的这个功能。
如果您需要支持XP,则需要收听CDN_INCLUDEITEM
通知。这是为文件夹中的每个项目发送的。因此,您有机会允许或拒绝包含每个项目。
对于Vista中使用的对话框,以后会有所不同。这些对话框使用IFileDialog
。您需要调用SetFilter
方法来添加过滤器。该过滤器是IShellItemFilter
的实现,它再次使用IncludeItem
方法控制包含。
从C#开始实现所有这一切会有点混乱,但这是做你要求的正确方法。完成此操作后,甚至无需考虑尝试将文件名编辑框设置为只读。因为对话框只会提供您允许包含的项目。
答案 1 :(得分:2)
两种解决方案:在打开 - 单击后检查文件名(无论如何应该这样做),或创建自己的控件,显示与文件名模式匹配的文件。