我在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上的一个问题。
答案 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。这相当于单击对话框右上角的“关闭”按钮。