3

我有一个 C# .NET 3.5 程序,它使用OpenFileDialog检索要导入的文件。它有两个过滤器 (*Domain*.**.*),并且*Domain*.*被选为FilterIndex。当在OpenFileDialog.

以下是用户将采取的重现问题的步骤:

  1. 在程序中,打开OpenFileDialog. 确保过滤器设置为*Domain*.*
  2. 在与过滤器匹配的目录中查找文件并更改文件名,使其不再与过滤器匹配。注意:该文件将消失。
  3. 更改过滤器以显示所有文件*.*注意:该文件未列出,即使您应该显示*.*.

此时,您可以在 Windows 资源管理器中打开该文件夹,并看到更改名称的文件存在。但是,在 中OpenFileDialog,无论使用何种过滤器,它都不再可见。再次查看该文件的唯一方法是关闭OpenFileDialog然后重新打开它。

这是我创建OpenFileDialog.

using(OpenFileDialog domainFileDialog = new OpenFileDialog())
{
    domainFileDialog.CheckFileExists = true;
    domainFileDialog.CheckPathExists = true;
    domainFileDialog.Filter = "Domain Files (*Domain*.*)|*Domain*.*|All files (*.*)|*.*";
    domainFileDialog.FilterIndex = 1;
    domainFileDialog.Multiselect = false;
    domainFileDialog.RestoreDirectory = true;
    domainFileDialog.ShowReadOnly = true;
    domainFileDialog.SupportMultiDottedExtensions = true;
    domainFileDialog.Title = "Choose the Domain File to Import...";
    domainFileDialog.ValidateNames = true;

    \\ Perform Import functionality...
}

似乎当您打开OpenFileDialog并修改与限制性更强的过滤器匹配的现有文件以使其不再匹配过滤器时,即使*.*显示所有文件,该文件也会从可见性中消失。

由于我不知道为什么会发生这种情况,(并且我愿意就如何修复它提出建议)有没有办法限制用户创建或修改任何文件以OpenFileDialog希望防止这个问题?

4

2 回答 2

1

首先,我建议您考虑是否值得关心用户可能会这样做。如果 FOD 这样做,则每个 Windows 应用程序都具有此功能,但您不会听到用户抱怨它。那么这真的是一个需要解决的问题吗?

如果问题与过滤器有关的不仅仅是文件扩展名,我不会感到惊讶 - 这样做是相当不寻常的。也许只尝试扩展,看看这是否是原因。

您是否尝试按 F5 刷新其缓存数据?我不知道这是否会像在资源管理器窗口中那样在 FOD 中工作,但尝试一下可能会很有趣。

说了这么多,过滤按键(F2)和鼠标点击(右键)将是微不足道的(使用某些形式,您可以从中派生,或者您可以放入 a MessageFilter)以使用户无法访问任何允许他们重命名 FOD 中的文件的 UI。作为用户,如果你以这种方式破坏了 FOD,这会让我很生气 - 无论如何,不​​仅仅是在极少数情况下重命名的文件“消失”。

于 2012-12-08T00:24:34.783 回答
0

http://msdn.microsoft.com/en-us/library/microsoft.win32.openfiledialog.aspx

OpenFileDialog 本身不支持任何此类功能。我认为此时最好的选择是编写自己的打开文件对话框窗口。通过这种方式,您将获得大量控制权,并且不会花费太长时间。

于 2012-12-07T22:57:31.130 回答