Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.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# Win32浏览文件夹对话框:用户创建新文件夹时返回的文件夹错误_C#_C++_Windows_Winapi - Fatal编程技术网

C# Win32浏览文件夹对话框:用户创建新文件夹时返回的文件夹错误

C# Win32浏览文件夹对话框:用户创建新文件夹时返回的文件夹错误,c#,c++,windows,winapi,C#,C++,Windows,Winapi,我注意到“浏览文件夹”对话框中似乎有一个bug: 打开具有“新建文件夹”按钮的“新建样式”“浏览文件夹”对话框。.NET框架中的FoLDReBursCalk类,或Win32 C++中的SubReSoFrFrameFor。 单击“创建新文件夹”按钮以创建新文件夹。 键入新文件夹的名称。键入新文件夹名称后,请勿按Enter键或单击任何内容以停止编辑该名称。 当光标仍在闪烁/编辑框仍处于活动状态时,单击“确定”按钮。您必须快速单击“确定”按钮。 对话框不会将文件夹的新名称返回给程序,而是返回新文件夹目

我注意到“浏览文件夹”对话框中似乎有一个bug:

打开具有“新建文件夹”按钮的“新建样式”“浏览文件夹”对话框。.NET框架中的FoLDReBursCalk类,或Win32 C++中的SubReSoFrFrameFor。 单击“创建新文件夹”按钮以创建新文件夹。 键入新文件夹的名称。键入新文件夹名称后,请勿按Enter键或单击任何内容以停止编辑该名称。 当光标仍在闪烁/编辑框仍处于活动状态时,单击“确定”按钮。您必须快速单击“确定”按钮。 对话框不会将文件夹的新名称返回给程序,而是返回新文件夹目录。例如,C:\New文件夹而不是用户键入的内容,例如C:\My App数据文件。 我猜对话框的OK按钮在按钮的click/mouse up事件中从树视图中读取文件夹名称。如果您足够快地单击它,对话框将读取旧值New folder,因为树状视图没有足够的时间处理重命名

最终结果是对话框返回一个目录的路径,该目录在重命名后不再存在,应用程序随后失败

我可以在我的Windows7开发者工作站上复制它,但并不局限于这台计算机。它在我们的生产C++应用程序和原型C应用程序中被复制。
是否有其他人看到了这一点,并知道解决方案/修复方案?这种新型对话框从Windows 2000开始出现;我不敢相信现在还没有看到/修复,但我找不到细节!我知道用户可以通过按Enter键,等待片刻,然后单击OK来解决此问题。但似乎电脑经验较少的用户并不知道这一点,这让他们很困惑。因此,我正在寻找一种程序化的解决方法/修复方法。

我建议将您的雄心壮志设定得较低,因为此时您实际上是在尝试对操作系统本身进行错误修复

考虑在对话框退出后检查GetFileAttributesfolderName==无效的\u文件\u属性


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

我建议您降低雄心壮志,因为此时您实际上是在尝试对操作系统本身进行错误修复

考虑在对话框退出后检查GetFileAttributesfolderName==无效的\u文件\u属性


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

您可以检查所选文件夹是否存在,这是一种很好的做法,如果它不存在且被称为“新文件夹”,则获取父文件夹,找到当前用户几秒钟前创建的子文件夹,并假设它就是他们想要的文件夹

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

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


这是风险和不便之间的折衷。

您可以检查所选文件夹是否存在,这是一种很好的做法,如果它不存在并且被称为“新文件夹”,则获取父文件夹,找到当前用户几秒钟前创建的子文件夹,并假设它就是他们想要的文件夹

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

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


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

这种行为已经存在了很久。它可能还没有被修复,因为没有人足够关心它,因为解决方法非常简单。单击另一个节点,然后返回新节点。这也不是一个真正的编程问题,是吗?@IgbyLargeman:也许这是一个延伸,但问题似乎是这个问题可以缓解吗,编程方面?这是一个编程问题,因为我们编写的软件表现出这种行为,我看到它绊倒了我们不太了解的用户。我知道你可以单击另一个节点,然后单击“上一步”或按Enter键并等待片刻,但显然不是所有用户都知道这一点!我正在寻找一种编程解决方法。@Drew:没错,我想我应该更明确地说明这一点。这种行为已经存在很久了。它可能还没有被修复,因为没有人足够关心它,因为解决方法非常简单。单击另一个节点,然后返回新节点。这也不是一个真正的编程问题,是吗?@IgbyLargeman:也许这是一个延伸,但问题似乎是这个问题可以缓解吗,编程方面?这是一个编程问题,因为我们编写的软件表现出这种行为,我看到它绊倒了我们不太了解的用户。我知道您可以单击另一个节点,然后单击“上一步”或按“下一步”
等等,但显然不是所有的用户都知道这一点!“我正在寻找一个程序化的解决方法。”德鲁:没错,我想我应该更明确地说明这一点。但我想现在就必须这样做。我相信在Windows Vista/7上使用基于IFileDialog的对话框会更好,而且不会出现此类问题,但这对XP客户没有帮助,因此我们目前只能同时使用这两种方法-讨厌!他们真的应该在Vista/7版本的SHBrowseForFolder中使用IFileDialog。很难看,但我想现在就只能这样了。我相信在Windows Vista/7上使用基于IFileDialog的对话框会更好,而且不会出现此类问题,但这对XP客户没有帮助,因此我们目前只能同时使用这两种方法-讨厌!他们真的应该在Vista/7版本的SHBrowseForFolder中使用IFileDialog。