打开文件对话框始终显示* .URL(Internet快捷方式文件)
-
19-09-2019 - |
题
我OpenFileDialog
具有一个单一Filter
这也是DefaultExt
。我不知道为什么,对话框打开时,我也得到所有上市的互联网快捷方式(这是确定以快捷方式文件夹,例如,而不是* .URL文件)。
有一些神奇的开关,我可以以净打开让他们包括在向用户显示列表?
目前,我必须通过设置FileOk
到e.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;
}