2

我们SaveFileDialog的应用程序中有一个,它提供了用户可以导出媒体的多种格式。我们FilterIndex使用SaveFileDialog. 各种格式具有不同的文件扩展名,因此我们希望用户输入的文件名在用户更改所选过滤器时更改扩展名。这可能吗?如果可以,怎么做?

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

4

3 回答 3

1

由于 SaveFileDialog 不能被继承,我猜你必须自己构建,使用 FileDialog 作为基类。

于 2009-07-08T09:58:52.737 回答
0

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

...
if (saveDialog.ShowDialog() == DialogResult.OK)
{
    switch (saveDialog.FilterIndex)
    { 
        case 0:
            ...
            break;
        case 1:
            ...
            break;
        default:
            ...
            break;
    }
}
...
于 2009-07-08T09:36:25.853 回答
-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”这样的文件名并且不要更改过滤器,则开关盒会为您处理扩展名。

于 2009-07-08T09:58:39.117 回答