如何在发生错误时关闭Win32 SaveFileDialog?

时间:2011-08-15 16:25:01

标签: c# wpf savefiledialog

我在Wpf应用程序中遇到了Microsoft.Win32.SaveFileDialog的问题。

如果用户输入了一个巨大的文件路径,超过允许的最大值(我认为它的255个字符?),在SaveFileDialog内,它就开始变得无法使用(详细信息在代码示例中)。 / p>

因此,作为一种解决方法,我想关闭对话并让它们再次进入文件路径。但问题是SaveFileDialog没有Close()例程或其他任何我可以看到的关闭它。如何以编程方式关闭对话?

// error only seems to occur if a filter is specified.
var dialog = new Microsoft.Win32.SaveFileDialog 
{ 
    Filter = "My juicy file (*.mjf) | *.mjf" 
};

try
{
    dialog.ShowDialog();
}
catch (System.IO.PathTooLongException error) // handle
{
    /*
        * if I handle this exception (by displaying a message to the user)
        * the dialog will remain open, but if the user attempts to use it
        * and enter another filename a mixture of the following exceptions
        * are raised:
        * 
        * AccessViolationException
        * FatalExecutionEngineError
        * ExecutionEngineException
    */

    MessageBox.Show(error.Message);
}

修改

感谢您的回答/评论。我刚刚在我的Windows 7机箱上对它进行了测试,它的行为与预期的一样,所以这可能只是XP上的一个问题。

3 个答案:

答案 0 :(得分:1)

在Windows 7上的WPF 4.0中,SaveFileDialog显示自己的错误对话框:

<long path?
The path is too long.
Try a shorter name.

使用“确定”按钮关闭错误对话框。这导致用户返回原始的SaveFileDialog,他们可以在其中更改其值或取消。

对于行为可能不同的早期版本,您可以使用 Windows UI Automation 框架以以编程方式点击SaveFileDialog上的“取消”按钮。< / p>

答案 1 :(得分:0)

if (dialog != null)
{
    dialog.DialogResult = DialogResult.Cancel;
}

尝试设置对话框结果以关闭对话框。

答案 2 :(得分:0)

使用wParam参数SC_CLOSE发送窗口WM_SYSCOMMAND message。这相当于单击对话框右上角的“关闭”按钮。