当用户更改过滤器时,如何在SaveFileDialog中更改文件名的扩展名?

时间:2009-07-08 09:14:32

标签: c# .net winforms savefiledialog

我们的应用程序中有一个SaveFileDialog,它提供了用户可以导出媒体的各种格式。我们使用FilterIndex的{​​{1}}属性确定用户对格式的选择。各种格式具有不同的文件扩展名,因此我们希望用户输入的文件名在用户更改所选过滤器时更改扩展名。这是可能的,如果是的话,怎么样?

编辑:我希望在显示对话框时发生这种情况,当用户更改过滤器时,用户会获得文件名的反馈,而不是之后用户关闭时对话。我已尝试使用消息过滤器,但它不会收到对话框的消息。我已经尝试了SaveFileDialog但在对话框运行时永远不会触发。我已经尝试了后台线程,但在用户关闭对话框之前,Application.Idle不会更新。

3 个答案:

答案 0 :(得分:1)

由于无法继承SaveFileDialog,我猜你必须使用FileDialog作为基类来构建自己的。

答案 1 :(得分:0)

当用户更改过滤器时,SaveFileDialog会自动更改文件的扩展名。如果您想针对不同的文件格式处理某些特定操作,可以使用以下内容:

...
if (saveDialog.ShowDialog() == DialogResult.OK)
{
    switch (saveDialog.FilterIndex)
    { 
        case 0:
            ...
            break;
        case 1:
            ...
            break;
        default:
            ...
            break;
    }
}
...

答案 2 :(得分:-1)

添加过滤器:

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”的文件名并且不要更改过滤器,则开关盒会为您处理扩展程序。