Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当用户更改过滤器时,如何在SaveFileDialog中更改文件名的扩展名?_C#_.net_Winforms_Savefiledialog - Fatal编程技术网

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

C# 当用户更改过滤器时,如何在SaveFileDialog中更改文件名的扩展名?,c#,.net,winforms,savefiledialog,C#,.net,Winforms,Savefiledialog,我们的应用程序中有一个SaveFileDialog,它提供了用户可以导出媒体的多种格式。我们使用SaveFileDialog的FilterIndex属性确定用户对格式的选择。不同的格式具有不同的文件扩展名,因此我们希望在用户更改所选过滤器时,用户输入的文件名可以更改扩展名。这可能吗?如果可能,如何实现 编辑:我希望在显示对话框时,当用户更改过滤器时发生这种情况,这样用户就可以得到关于文件名的反馈,而不是在用户关闭对话框之后。我尝试过使用消息过滤器,但它不接收对话框的消息。我尝试了Applicat

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


编辑:我希望在显示对话框时,当用户更改过滤器时发生这种情况,这样用户就可以得到关于文件名的反馈,而不是在用户关闭对话框之后。我尝试过使用消息过滤器,但它不接收对话框的消息。我尝试了
Application.Idle
,但在对话框运行时从未触发。我尝试了一个后台线程,但直到用户关闭对话框后,
FilterIndex
才会得到更新。

SaveFileDialog在用户更改筛选器时自动更改文件扩展名。如果要处理不同文件格式的某些特定操作,可以使用以下方法:

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

当用户更改过滤器时,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";
然后:

运行两次,首先选择“txt文件”,然后选择“Word文件”。输入“test”作为文件名。
您将看到文件名在两种情况下都不同:text.txt和test.doc

如果输入一个扩展名为“test.htm”的文件名,则在切换筛选器时会更改扩展名

如果您输入“test.htm”这样的文件名,并且不更改过滤器,则开关盒会为您处理扩展名。

添加过滤器:

saveFileDialog1.Filter = "txt files (*.txt)|*.txt|Word files (*.doc)|*.doc";
然后:

运行两次,首先选择“txt文件”,然后选择“Word文件”。输入“test”作为文件名。
您将看到文件名在两种情况下都不同:text.txt和test.doc

如果输入一个扩展名为“test.htm”的文件名,则在切换筛选器时会更改扩展名



如果您输入“test.htm”这样的文件名,并且不更改过滤器,则开关盒将为您处理扩展。

因为SaveFileDialog不能被继承,我想您必须使用FileDialog作为基类来构建自己的。

因为SaveFileDialog不能被继承,我想您必须构建自己的,使用FileDialog作为基类。

SaveFileDialog不会更改扩展名。我查过了。它改变了分机。相信我,这有点不切实际,因为这必须与SaveFileDialog的过滤器保持一致,如果有人出现并在过滤器前面添加了扩展,那么他们必须出现并发现此代码也要更改。True。但是你会使用字典之类的东西来存储扩展名,只会更改字典。评论中有人指出我可能不清楚。当用户可以查看表单时,它不会更改扩展名,只是在之后。我需要在显示表单时更改它。SaveFileDialog不会更改扩展名。我查过了。它改变了分机。相信我,这有点不切实际,因为这必须与SaveFileDialog的过滤器保持一致,如果有人出现并在过滤器前面添加了扩展,那么他们必须出现并发现此代码也要更改。True。但是你会使用字典之类的东西来存储扩展名,只会更改字典。评论中有人指出我可能不清楚。当用户可以查看表单时,它不会更改扩展名,只是在之后。我需要在窗体显示时更改它。我想您希望在SaveFileDialog中更改扩展名,而不是在对话框关闭后更改扩展名?那样的话,你应该坚持。给出几个答案,并不是每个人都清楚这一点。否则,不要读我的答案!与我的答案相同,我的答案基于这样一个事实,即FileName属性已经包含一个扩展名,并且有两种可能使用过滤器对其进行更改,如我的答案所示。如果是使用具有扩展名的FileName属性,这是一个好问题!如果有一个简单的答案,我很感兴趣!我想您是想在SaveFileDialog中更改扩展名,而不是在对话框关闭后更改扩展名?那样的话,你应该坚持。给出几个答案,并不是每个人都清楚这一点。否则,不要读我的答案!与我的答案相同,我的答案基于这样一个事实,即FileName属性已经包含一个扩展名,并且有两种可能使用过滤器对其进行更改,如我的答案所示。如果是使用具有扩展名的FileName属性,这是一个好问题!如果有一个简单的答案,我很感兴趣!如果SaveFileDialog已经输入了扩展名,那么它会更改扩展名。如果他换了过滤器。如果他没有更改扩展名,但正如Ivan Burklov所建议的那样,他可以检查FilterIndex,然后手动更改。文件在他保存之前不会保存。在保存文件名之前,他可以按照自己的意愿处理文件名。代码不会更改。。。正如Ivan Burklov所建议的那样,刚才添加了switch语句。如果SaveFileDialog已经输入了扩展名,则会更改扩展名。如果他换了过滤器。如果他没有更改扩展名,但正如Ivan Burklov所建议的那样,他可以检查FilterIndex,然后手动更改。文件在他保存之前不会保存。在保存文件名之前,他可以按照自己的意愿处理文件名。代码不会更改。。。就像Ivan Burklov建议的那样添加了switch语句。