OpenFileDialog具有一个单一Filter这也是DefaultExt。我不知道为什么,对话框打开时,我也得到所有上市的互联网快捷方式(这是确定以快捷方式文件夹,例如,而不是* .URL文件)。

有一些神奇的开关,我可以以净打开让他们包括在向用户显示列表?

目前,我必须通过设置FileOke.Cancel如果我检测到用户选择的true文件(它是不工作的100%的时间或者以处理*.URL事件处理程序的条件下,一些捷径似乎仍然是越来越通过FileOk滤波器)。不是让他们在首位的列表会更好,虽然。

有帮助吗?

解决方案

你是正确的,Windows的打开文件通用对话框显示Internet快捷与文件夹一起。我不知道为什么这种行为存在,但它是那里 - 它在Win32中(尝试记事本确认)以及应用程序的WinForms发生。

有是解决此问题的方法,但警告:它哈克!如果您从派生FileDialog类自定义文件对话框类,您可以访问一些受保护的事件,您可以使用自定义FileDialog的运营的各个方面。

迪诺·埃斯波西托写在2003年11月的MSDN杂志的文章,显示这种技术是如何工作的。这篇文章不再是MSDN网站,但你可以得到它自由之路机的存档此处的 http://web.archive.org/web/20150117123625/http://msdn.microsoft.com/en-us/magazine/cc300434.aspx

什么你可能会需要做的就是挂钩或子文件对话框的WndProc中,通过手动文件列表控制一下,确定是快捷键条目,并发送Windows消息到文件列表控制,以消除那些项目。然后,你需要留意该列表(例如,从一个目录的变化)的刷新,重复过滤操作。

这将是一个巨大的黑客,但它是可能的。

如果这是太多的工作或hackiness实在是太多了,我只是用FileOk事件,以防止用户通过从CancelEventHandler为FileOk事件返回Cancel=true选择快捷建议。

其他提示

烦。您可以通过实现对FileOk事件的处理程序重击他们,让用户永远不能选择一个:

private void openFileDialog1_FileOk(object sender, CancelEventArgs e) {
  string ext = System.IO.Path.GetExtension(openFileDialog1.FileName);
  if (String.Compare(ext, ".url", true) == 0) e.Cancel = true;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top