使用新的Outlook VSTO C#项目创建的ThisAddIn类具有Application属性,您可以使用该属性来访问Outlook文件夹和项目。问题在于,当您位于ThisAddIn类中时可以轻松使用它,但是项目中的其他类无法轻松访问它。这是因为它是一个实例属性。

我想找到访问此属性在其他类中提供的相同功能的最佳方法,因此我想出了两种可能的解决方案,但我不知道其中哪一种(如果有的话)是好的。

假设我要获取默认的收件箱文件夹。在ThisAddIn类中,我将简单地执行以下操作:

this.Application.Session.GetDefaultFolder(Outlook.olFolderInbox);

现在如何在类之外做同样的事情?

1.静态属性

首先,我可以向ThisAddIn类添加一个静态属性,并将其设置为要在其他类中公开的值。
public partial class ThisAddIn
{
    public Outlook.Application OutlookApp;

    void ThisAddIn_Startup(object sender, EventArgs e)
    {
        // init static variable value here
        OutlookApp = this.Application

        // initialize the rest of addin here
    }

    void InternalStartup()
    {
        this.Startup += this.ThisAddIn_Startup;
    }
}

这样,在其他任何类(class)中,我都可以这样做:
ThisAddIn.OutlookApp.Session.GetDefaultFolder(Outlook.olFolderInbox);

2.创建新的应用程序对象

我可以做的第二件事是在使用它之前在其他类中初始化Application对象。但是我不确定是否创建该类型的新对象不会创建Outlook的新实例。
class MyOtherClass
{
    public void MyMethod()
    {
        var app = new Outlook.Application();
        var folder = app.Session.GetDefaultFolder(Outlook.olFolderInbox);
    }
}

有人对哪种方法更好有任何建议,如果您对此问题有不同的解决方案,我也将不胜感激。

最佳答案

由于您可以具有ThisAddIn的单个实例,因此可以有一个静态变量来访问外部的应用程序窗体...仅供引用,当您添加Outlook-AddIn VSTO项目时,ThisAddIn的实例将作为静态类Globals中的静态成员提供。

10-08 14:16