【问题标题】:Win32 Browse for folder dialog: wrong folder returned when user creates a new folderWin32 浏览文件夹对话框:用户创建新文件夹时返回错误文件夹
【发布时间】:2012-01-09 17:33:35
【问题描述】:

我注意到在浏览文件夹对话框中似乎是一个错误:

  1. 打开具有“新建文件夹”按钮的新样​​式文件夹浏览对话框。 (例如 .NET Framework 中的 FolderBrowserDialog 类,或 Win32 C++ 中的 SHBrowseForFolder)。
  2. 单击“创建新文件夹”按钮创建一个新文件夹。
  3. 输入新文件夹的名称。输入完成后,请勿按 Enter 或单击任何内容来停止编辑新文件夹名称。
  4. 当光标仍在闪烁/编辑框仍处于活动状态时,单击“确定”按钮。您必须快速单击“确定”按钮。
  5. 对话框不会将文件夹的新名称返回给程序,而是返回“新文件夹”目录。例如,C:\New Folder 而不是用户输入的内容,例如C:\My App Data Files

我的猜测是对话框的“确定”按钮从按钮的“单击/鼠标向上”事件中的树视图中读取文件夹名称。如果单击速度足够快,对话框会读取旧值“新文件夹”,因为树视图没有足够的时间来处理重命名。

最终结果是对话框返回一个不再存在的目录的路径(因为它已被重命名),然后应用程序失败。

我可以在我的 Windows 7 开发人员工作站上重现此内容,但不限于该计算机。它已在我们的生产 C++ 应用程序和原型 C# 应用程序中重现。

有没有其他人看到这个并知道解决方法/修复?这种新型对话框自 Windows 2000 以来就已存在。我不敢相信现在还没有看到/修复,但我找不到细节!我知道它可以由用户解决,例如按 Enter 键,稍等片刻,然后单击确定。但似乎计算机经验较少的用户不知道这一点,这让他们感到困惑。所以我正在寻找一种程序化的解决方法/修复。

【问题讨论】:

  • 这种行为一直存在。它可能还没有修复,因为没有人足够关心,因为解决方法非常简单(单击另一个节点,然后返回新节点)。
  • 这也不是真正的编程问题吧?
  • @IgbyLargeman:也许有点牵强,但问题似乎是“可以通过编程方式缓解这个问题吗?”
  • 这是一个编程问题,因为我们编写的软件表现出这种行为,而且我已经看到它绊倒了我们不了解的用户。我知道您可以单击另一个节点,然后单击返回(或按 Enter 并稍等片刻),但显然并非所有用户都知道这一点!我正在寻找一种程序化的解决方法。
  • @Drew:确切地说,我想我应该更明确地说明这一点。

标签: c# c++ windows winapi


【解决方案1】:

我建议你把野心放低,因为此时你实际上是在尝试修复操作系统本身的错误。

考虑在对话框退出后检查GetFileAttributes(folderName) == INVALID_FILE_ATTRIBUTES

如果该表达式为真,则再次显示对话框。这至少可以防止崩溃或其他故障情况。

【讨论】:

  • 丑陋但我想现在必须这样做。我确信在 Windows Vista/7 上使用基于 IFileDialog 的对话框会好得多,并且不会出现此类问题,但它对 XP 客户没有帮助,因此我们暂时必须同时采用这两种方式 -恼人的! (他们真的应该在 SHBrowseForFolder 的 Vista/7 版本中使用 IFileDialog)。
【解决方案2】:

您可以检查所选文件夹是否存在(无论如何都是一个好习惯),如果它不存在并且称为“新文件夹”,则获取父文件夹,找到几秒钟前创建的子文件夹由当前用户,并假设这是他们想要的。

可能总是有效,但它不是万无一失的,所以它不能被认为是健壮的。

最稳健的解决方案就是检测条件并强制用户再次选择文件夹。

这是风险和不便之间的权衡。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多