Win32 Диалог поиска папки: неверная папка возвращается, когда пользователь создает новую папку - PullRequest
1 голос
/ 09 января 2012

Я заметил ошибку в диалоге поиска папок:

  1. Откройте диалог поиска нового стиля для папки, в котором есть кнопка «Новая папка».(Например, класс FolderBrowserDialog в .NET Framework или SHBrowseForFolder в Win32 C ++).
  2. Нажмите кнопку «Создать новую папку», чтобы создать новую папку.
  3. Введите имя для новой папки.НЕ нажимайте Enter или нажимайте что-либо, чтобы прекратить редактировать имя новой папки после того, как вы закончили вводить его.
  4. Пока курсор продолжает мигать / поле редактирования все еще активно, нажмите кнопку OK.Вы должны нажать кнопку ОК очень быстро.
  5. Вместо того, чтобы возвращать новое имя папки в программу, диалог возвращает каталог «Новая папка».Например, C:\New Folder вместо того, что набрал пользователь, например, C:\My App Data Files.

Я предполагаю, что кнопка OK в диалоговом окне считывает имя папки из дерева в виде нажатия кнопки / мыши.событиеЕсли щелкнуть его достаточно быстро, диалоговое окно считывает старое значение «Новая папка», так как древовидная структура не успела обработать переименование.

Конечный результат заключается в том, что диалоговое окно возвращает путь к каталогу.его больше не существует (поскольку оно было переименовано), а затем приложение не работает.

Я могу воспроизвести это на моей рабочей станции для разработчиков Windows 7, но это не ограничивается этим компьютером.Он воспроизводился как в нашем производственном приложении C ++, так и в прототипе приложения C #.

Кто-нибудь еще видел это и знает об обходном пути / исправлении?Этот диалог в новом стиле существует с Windows 2000;Я не могу поверить, что это не было замечено / исправлено, но я не могу найти детали!Я знаю, что он может быть обойден пользователем, например, нажав Enter, подождите немного, затем нажмите OK.Но кажется, что пользователи с меньшим опытом работы с компьютером этого не знают, и это их сбивает с толку.Поэтому я ищу программный обходной путь / исправление.

Ответы [ 2 ]

3 голосов
/ 09 января 2012

Я рекомендую установить низкие амбиции, так как на этом этапе вы фактически пытаетесь исправить саму ОС.

Попробуйте проверить, если GetFileAttributes(folderName) == INVALID_FILE_ATTRIBUTES после выхода из диалогового окна.

Если этоВыражение верно, представьте диалог снова.Это по крайней мере предотвратит сбои или другие сценарии сбоев.

2 голосов
/ 09 января 2012

Вы можете проверить наличие выбранной папки (хорошая практика в любом случае), и если она не существует и называется «Новая папка», получить родительскую папку, найти подпапку, которая была создана несколько секунд назад текущим пользователем, и предположим, что это тот, который они хотели.

Это будет , вероятно, всегда работает, но не является надежным, поэтому его нельзя считать надежным.

Самое надежное решение - просто определить условие и заставить пользователя снова выбрать папку.

Это компромисс между риском и неудобствами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...