【问题标题】:Change file extension when user changes Save As Type in SaveFileDialog当用户在 SaveFileDialog 中更改另存为类型时更改文件扩展名
【发布时间】:2011-05-06 22:34:27
【问题描述】:

我有一个 SaveFileDialog,可以选择使用 .foo 或 .bar 类型进行保存。列表中的第一项,默认选中,是 .foo。默认文件名是“untitled”,默认扩展名是“.foo”。当 SaveFileDialog 出现时,它会将“untitled”放在文件名文本框中。我可以将其更改为“untitled.foo”,但它仍然不会改变我的问题的行为:

如果用户切换到 .bar,如何将文件名更改为 untitled.bar?只有两个事件,这两个都不是我想要的,而且它似乎并没有改变自己。

【问题讨论】:

  • 我也有同样的问题,不知道是不是win xp中的win32问题,也没有添加扩展,我不知道用户选择了哪个扩展。
  • 您可以使用 SaveFileDialog.Filter 或 SaveFileDialog.FilterIndex 来检索您需要的信息。
  • 我突然想到这里的问题。您很可能在 Windows 的文件夹选项中打开了“隐藏已知文件类型的扩展名”。选中该选项后,它不会在 SaveFileDialog 中显示扩展名,即使它会使用扩展名保存。这就是你的情况吗?
  • 我很确定情况并非如此。当我得到一台新电脑时,我总是立即将其关闭。

标签: c# .net-2.0 windows-xp


【解决方案1】:

艾德,
我刚刚测试过,效果很好。
我这样做了:

        SaveFileDialog sfd = new SaveFileDialog();

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

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

【讨论】:

  • 是的,这绝对看起来在 XP 中不起作用。事实上,我最初的评估是错误的;它根本没有附加文件扩展名。它只是显示为“无标题”
【解决方案2】:

添加 DefaultExt 和 AddExtension 将为您提供您正在寻找的行为。与此处提供的问题/答案类似: https://stackoverflow.com/a/1213353/101971

        var saveFileDialog = new SaveFileDialog
                                 {
                                     Filter = "Foo (*.foo)|*.foo|Bar (*.bar)|*.bar",
                                     DefaultExt = "foo",
                                     AddExtension = true
                                 };

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 这更像是一个 UI 的东西。我知道我可以添加文件扩展名,但我希望用户看到文件扩展名发生变化。
    • 太糟糕的代码猴子,除了 ed marty 的论点,如果你想根据用户选择的扩展名以不同的方式保存文件怎么办?
    【解决方案4】:

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

    【讨论】:

    • 这并不能解决我的特殊问题,即更改保存框中显示的文件名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 2011-02-23
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多