У меня есть решение WinForms C # для Visual Studio 2008 (.NET 3.5), которое необходимо обновить до Visual Studio 2010 (версия .NET останется в версии 3.5).В этом решении используется FileDialog из Vista API по двум причинам:
- При запуске приложения в Windows XP ожидается, что пользователь получит диалоговое окно с файлом Windows XP look-and-feel.При запуске одного и того же приложения в Windows Vista и 7 диалоговое окно файла должно иметь внешний вид Vista.
- Что еще более важно, наше приложение позволяет пользователю открывать файл проекта, который может бытьлокальный файл (хранится на компьютере пользователя или на USB-устройстве) или проект сервера (размещается в MS SQL Server).Чтобы добиться этого, мы используем Vista API, поскольку можем получить доступ к обработчику событий элемента управления раскрывающегося списка типов файлов.Следовательно, реализация такова, что пользователю предоставляется диалоговое окно открытия файла, и когда он выбирает параметр «Сервер» в раскрывающемся списке типов файлов, диалоговое окно открытия файла закрывается, и открывается другое диалоговое окно, позволяющеепользователь выбирает сервер, к которому он хочет подключиться, и проект сервера.
В Visual Studio 2008 при отладке приложения нет проблем с Vista API.Когда решение обновляется до Visual Studio 2010 (работает в Windows 7), пользователь пытается отладить приложение, и пользователь желает получить доступ к диалоговому окну открытия файла API-интерфейса Vista, приложение вылетает с появлением ArgumentException со следующим сообщением:«Значение не попадает в ожидаемый диапазон».Как ни странно, когда пользователь запускает решение без отладки (Ctrl + F5) из Visual Studio 2010, исключений не возникает.«Оскорбительный» код:
internal void DoFolderChange(IFileDialog dialog)
{
IShellItem ppsi = null;
string ppszName = string.Empty;
dialog.GetFolder(out ppsi);
// Exception occurs here
ppsi.GetDisplayName(NativeMethods.SIGDN.SIGDN_FILESYSPATH, out ppszName);
OnFolderChange(ppszName);
}
Я пробовал поиск в Google, но безрезультатно.У меня есть пример решения Visual Studio 2010 с Vista API, и проблема также возникает в этом решении.Пример проекта можно скачать (в формате ZIP) с здесь .Чтобы воспроизвести проблему:
- Отладка решения в Visual Studio 2010.
- После запуска демонстрации Vista Api щелкните вкладку «Диалоги».
- В столбце «Vista Look», расположенном в правой части вкладки «Диалоги», нажмите кнопку «Открыть файл».
- Диалог с сообщением «Тип файла изменен на 1»будет появляться.Нажмите кнопку ОК.
- Обратите внимание, что в этот момент происходит сбой приложения, за исключением исключения, вызванного методом DoFolderChange (IFileDialog) в clsFileDialog.cs.
Мои извинения задолгое время пост, но мне нужно было объяснить весь фон, почему реализация диалога файлов API Vista требуется.Я ценю любую помощь в решении этой проблемы, так как моя команда разработчиков рассматривает возможность работы с Visual Studio 2010, и мы, разработчики, не хотим возиться с подключением и отключением отладчика, просто чтобы обойти эту проблему.