Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置OpenFileDialog限制_C#_Openfiledialog - Fatal编程技术网

C# 设置OpenFileDialog限制

C# 设置OpenFileDialog限制,c#,openfiledialog,C#,Openfiledialog,我有一个Windows窗体应用程序,我使用一个自定义控件,允许用户选择和保存图像。但是,我需要插入一些限制。最简单的方法是只选择jpg文件,但现在我需要限制用户只能查看和选择名称中具有特定模式的jpg图像,如果可能的话,我想我已经在其他windows应用程序中看到了这一点。我希望此模式保留在文件名字段中,用户不能删除它 我到目前为止所做的: 我有以下限制: fileNameFilter = "All files (*.jpg)|" + ImageNameFilter + "*.jpg";

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

我到目前为止所做的:

我有以下限制:

    fileNameFilter = "All files (*.jpg)|" + ImageNameFilter + "*.jpg";
    openFileDialog1.Filter = fileNameFilter;
我可以向用户展示他需要寻找的模式:

openFileDialog1.FileName = fileNameFilter;
然而,有两件事我仍然无法完成。下面是一个打印屏幕,可以清楚地显示:

首先-显示模式,但我可以删除它,当它这样做,我想如果它是可能的文件名字段是只读的,或者换句话说,用户不应该能够删除我放在那里

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


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

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

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

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

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


从C实现这一切会有点混乱,但这是实现您要求的正确方法。一旦您这样做了,就不需要考虑将文件名编辑框设置为只读。因为对话框将只提供您允许包含的项目。

老实说,您所写的内容高于我当前的级别。我可以尝试一些东西,但失败的机会很大。您提到,如果我成功地执行了您的建议,则无需尝试将文件名编辑框设置为只读。但实际上有没有办法做到这一点,因为在我看来,这是一个更简单的解决方案?它实际上非常容易使用IFileDialog