c# - Win32 浏览文件夹对话框 : wrong folder returned when user creates a new folder

标签 c# c++ windows winapi

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

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

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

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

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

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

最佳答案

我建议您设置低的目标,因为此时您正在有效地尝试修复操作系统本身的错误。

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

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

关于c# - Win32 浏览文件夹对话框 : wrong folder returned when user creates a new folder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8792613/

相关文章:

c++ - 锁定步进 pthread 互斥锁

c - 使用 C 将输入写入控制台

c# - AngularJS 应用程序可以使用哪些 .NET 服务器端技术?

c# - 通用 Windows 平台和 SignalR(无法加载文件或程序集“System.Net,版本 = 2.0.5.0”)

c++ - 为什么 numeric_limits<int>::min() 有不同的定义?

c++ - 从文件中读取未知长度的字符串

c# - 如何将位掩码值转换为选项对象?

c# - .NET Chart 控件中的多系列条形图

windows - 如何在指定的日期/时间运行 bat 文件?

windows - 如何查看vmmap的变化?