((有效地)将OpenFileDialog属性公开给COM Interop

问题描述 投票:0回答:1

我转售了使用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属性。

但是这似乎效率很低。理想情况下,我想简单地继承一些基类或接口并实现它。

这可行吗?

c# com-interop
1个回答
0
投票

为什么不只是将参数添加到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;
}
© www.soinside.com 2019 - 2024. All rights reserved.