В нашем приложении есть SaveFileDialog
, который предлагает различные форматы, в которые пользователь может экспортировать медиа. Мы определяем выбор формата пользователя с использованием свойства FilterIndex
SaveFileDialog
. Различные форматы имеют разные расширения файлов, поэтому нам нужно, чтобы имя файла, которое пользователь ввел для изменения расширения, когда пользователь меняет выбранный фильтр. Возможно ли это, и если да, то как?
EDIT: Я хочу, чтобы это произошло во время отображения диалогового окна, когда пользователь меняет фильтр, поэтому пользователь получает обратную связь о том, каким будет имя файла, а не потом, когда пользователь закрывает диалог. Я пробовал использовать фильтр сообщений, но он не получает сообщений для диалога. Я пробовал Application.Idle
, но это никогда не срабатывает во время работы диалога. Я пробовал фоновый поток, но FilterIndex
не обновляется до тех пор, пока пользователь не закроет диалог.
Поскольку SaveFileDialog нельзя унаследовать, я думаю, вы должны создать свой собственный, используя FileDialog в качестве базового класса.
SaveFileDialog автоматически изменяет расширение файла, когда пользователь меняет фильтр. Если вы хотите обработать некоторые определенные действия для разных форматов файлов, вы можете получить что-то вроде этого:
...
if (saveDialog.ShowDialog() == DialogResult.OK)
{
switch (saveDialog.FilterIndex)
{
case 0:
...
break;
case 1:
...
break;
default:
...
break;
}
}
...
Добавьте свои фильтры:
saveFileDialog1.Filter = "txt files (*.txt)|*.txt|Word files (*.doc)|*.doc";
то
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
switch (saveFileDialog1.FilterIndex)
{
case 1:
saveFileDialog1.FileName = System.IO.Path.ChangeExtension(saveFileDialog1.FileName, "txt");
break;
case 2:
saveFileDialog1.FileName = System.IO.Path.ChangeExtension(saveFileDialog1.FileName, "doc");
break;
}
// Here you would save your file with the filename in saveFileDialog1.FileName.
MessageBox.Show(saveFileDialog1.FileName);
}
Повторите дважды, сначала выберите "txt файлы", затем "Файлы Word". Введите "test" в качестве имени файла.
Вы увидите, что имя файла отличается в обоих случаях: text.txt и test.doc.
Если вы введете имя файла с расширением типа "test.htm", расширение будет изменено при переключении фильтра.
Если вы введете имя файла типа "test.htm" и НЕ меняете фильтр, то корпус коммутатора заботится о расширении для вас.