2

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

我到目前为止所做的:

我有限制设置:

    fileNameFilter = "All files (*.jpg)|" + ImageNameFilter + "*.jpg";
    openFileDialog1.Filter = fileNameFilter;

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

openFileDialog1.FileName = fileNameFilter;

但是,有两件事我仍然无法完成。这是一个打印屏幕,可以清楚地说明:

在此处输入图像描述

首先 - 显示了模式,但是当它像这样制作时我可以将其删除,并且我想要该File name字段是否可能,Read only或者换句话说,用户不应该能够删除我放在那里的内容。

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

4

2 回答 2

3

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

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

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

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

从 C# 实现这一切会有点混乱,但这是按照您的要求做的正确方法。完成此操作后,甚至无需考虑尝试将文件名编辑框设为只读。因为对话框只会提供您允许包含的项目。

于 2013-02-28T10:51:18.330 回答
2

没有

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

于 2013-02-28T10:36:17.340 回答