我转售了使用VBS增强其形式的产品。自从Vista以来,从VBS中显示OpenFileDialog不再是一件容易的事(我相信,不记得了)。但是,我也可以选择附带使用COM Interop的.Net dll。因此,我认为在其中包含FilePicker
可能是一个好主意。
在此程序集中,我目前有以下(示例)代码,可以正常工作:
[ComVisible(true)]
[ProgId("BlaBla.FilePicker")]
[Guid("xxx-xxx-xxx-xxx")]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(IFilePicker))]
public class FilePicker : IFilePicker
{
public string Show()
{
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
return openFileDialog.FileName;
}
}
return string.Empty;
}
}
但是,我想做的是公开OpenFileDialog
的(至少一些)属性,以便我可以设置初始位置和过滤器等。
事实证明这很难做到。 OpenFileDialog
是一个密封类,并且其基类FileDialog
并非要从其继承。
我可以通过对选项进行硬编码来简单地公开它们,实际上是模仿了FileDialog
属性。
但是这似乎效率很低。理想情况下,我想简单地继承一些基类或接口并实现它。
这可行吗?
为什么不只是将参数添加到IFilePicker.Show,例如:
public string Show(string initialDirectory)
{
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
openFileDialog.InitialDirectory = initialDirectory;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
return openFileDialog.FileName;
}
}
return string.Empty;
}