当用户在SaveFileDialog中更改保存类型时,更改文件扩展名。

8
我有一个SaveFileDialog,可以保存为.foo或.bar类型。列表中的第一项是.foo,并默认选中。默认文件名为“未命名”,默认扩展名为“.foo”。当SaveFileDialog出现时,它会将“未命名”放入文件名文本框中。我可以将其更改为“untitled.foo”,但在解决我的问题方面仍然不起作用:
如果用户切换到.bar,如何使文件名更改为untitled.bar?只有两个事件,都不是我想要的事件,它似乎也没有自己更改。

我遇到了同样的问题,不知道是不是在Win XP中的Win32问题,它也没有添加扩展名,我也不知道用户选择了哪个扩展名。 - shabby
你可以使用 SaveFileDialog.Filter 或 SaveFileDialog.FilterIndex 来获取所需的信息。 - Ed Marty
我突然想到了可能出现的问题。你很可能在Windows文件夹选项中开启了“隐藏已知文件类型的扩展名”选项。勾选该选项后,即使保存时会带上扩展名,但在SaveFileDialog中不会显示扩展名。这是否是你遇到的情况? - BeemerGuy
1
我非常确定这不是这种情况。当我得到一台新电脑时,我总是立即将其关闭。 - Ed Marty
5个回答

11

Ed,
我刚刚测试过,它完全正常工作。
我做了这个:

        SaveFileDialog sfd = new SaveFileDialog();

        sfd.FileName = "untitled";
        sfd.Filter = "Text (*.txt)|*.txt|Word Doc (*.doc)|*.doc";
        sfd.ShowDialog();

根据我选择的过滤器,它会自动更改建议的保存名称。
我使用的是.NET 2.0框架。
但是我在Windows 7上,我认为这很重要,因为您会看到系统的文件保存对话框,并且它的实现方式在这里很重要。


是的,这显然在XP上不起作用。事实上,我的初步评估是错误的;它根本没有附加文件扩展名。它只显示为“无标题”。 - Ed Marty

2
添加DefaultExt和AddExtension将给您所需的行为。类似于此处提供的问题/答案: https://dev59.com/KHM_5IYBdhLWcg3w02z8#1213353
        var saveFileDialog = new SaveFileDialog
                                 {
                                     Filter = "Foo (*.foo)|*.foo|Bar (*.bar)|*.bar",
                                     DefaultExt = "foo",
                                     AddExtension = true
                                 };

1

当你实际保存文件时,可以从对话框中获取文件名,然后从那里执行必要的字符串操作。文件名是 SaveFileDialog 实例的成员。


这更多是一个UI的问题。我知道我可以添加文件扩展名,但我希望用户能看到文件扩展名的变化。 - Ed Marty
太糟糕了,代码猴子。除了Ed Marty的论点之外,如果您想根据用户选择的扩展名以不同的方式保存文件怎么办? - shabby

0
//Drag a SaveFileDialog from toolbox, and then...
//Create a button.... let's say this is my button named button1
private void button1_Click(object sender, EventArgs e)
{
  //saveFileDialog1 is the tool you grabbed from toolbox and could be renamed if you want
  //using Filter.. so user will see the extension has been selected by default
  saveFileDialog1.Filter = "Text Document(.txt)|.txt";
  if (saveFileDialog1.ShowDialog() == DialogResult.OK)
  {
    /*saveFileDialog1.Filter = "Text Document(.txt)|.txt";*/
    File.Create(saveFileDialog1.FileName);
    MessageBox.Show("New file created succesfully!");
  } else {
    MessageBox.Show("Unsuccessful!");
  }
}

0
你可以这样做: savefiledialog1.AddExtension = True

这并不解决我的特定问题,即更改保存框中显示的文件名。 - Ed Marty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接