【发布时间】:2014-03-29 15:40:25
【问题描述】:
我想在 WPF 程序中使用文件对话框。 我将 Filter 属性设置为特定的扩展名,但用户只需在文件名行中键入“* . *”,从而绕过过滤器。 有没有办法阻止用户这样做并保留文件过滤器,无论他输入什么?
【问题讨论】:
标签: c# wpf winforms filedialog
我想在 WPF 程序中使用文件对话框。 我将 Filter 属性设置为特定的扩展名,但用户只需在文件名行中键入“* . *”,从而绕过过滤器。 有没有办法阻止用户这样做并保留文件过滤器,无论他输入什么?
【问题讨论】:
标签: c# wpf winforms filedialog
您无法阻止用户在框中键入具有不同扩展名的文件。
但您可以在选择完成后测试所选文件的文件扩展名:
FileDialog fd = new OpenFileDialog();
fd.Filter = "*.txt|*.txt";
fd.ShowDialog();
if (Path.GetExtension(fd.FileName).ToLower() != ".txt")
MessageBox.Show("Choose a text file!");
【讨论】:
使用 WPF,您必须使用标准的 Windows 通用对话框(基本上是包装 Win32API 的普通 WinForms 对话框),并且普通的 Windows 对话框不会以任何方式阻止用户键入任何文件名或选择一个在您最初选择的过滤器之外扩展,因为过滤器只是对用户的建议,但不强制执行任何操作。
使用内置 Windows 对话框最多可以提供过滤器,用户始终可以通过键入任何内容或选择另一个过滤器来覆盖它(顺便说一句,这就是为什么我总是提供“.”过滤器加上正确的过滤器)。
请问您为什么要禁止预定义扩展之外的任何内容?请记住,扩展名只是文件名的一部分,是其内容的指示符,但不是阻止它包含其他任何内容的硬性规则。用户可能希望选择具有不同扩展名的文件,例如,如果他有一个具有更奇特扩展名的文本文件,或者恶意用户可能会将不良内容放入 .txt 文件中。
【讨论】: