Outlook 2010插件c#公共方法

本文关键字:方法 2010 插件 Outlook | 更新日期: 2023-09-27 18:10:11

我需要开发Outlook 2010插件,我是Visual Studio和c#的新手,因为我主要使用PHP和JavaScript。我使用的是Visual Studio 2010,并使用内置的Outlook 2010插件模板创建了一个项目。考虑下面的代码:

// file ThisAddIn.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml.Linq;
using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core;

namespace OutlookAddIn1
{
    public partial class ThisAddIn
    {
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
        }
        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }
        public string displayCount()
        {
            Outlook.MAPIFolder inbox = this.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox);
            Outlook.Items unreadItems = inbox.Items.Restrict("[Unread]=true");
            return string.Format("Unread items in Inbox = {0}", unreadItems.Count);
        }
        #region VSTO generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }
        #endregion
    }
}
// file Ribbon1.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Tools.Ribbon;
namespace OutlookAddIn1
{
    public partial class Ribbon1
    {
        private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
        {
        }
        private void button1_Click(object sender, RibbonControlEventArgs e)
        {
            // call ThisAddIn.displayCount() here
        }
    }
}

问题是,我如何从ThisAddIn类在Ribbon1类或其他任何地方调用公共方法?我知道我需要一个对象引用,但是我怎样才能找到实例的名称呢?我看不到在现有文件的任何地方创建ThisAddIn的实例。还是我误解了这个概念,应该用其他方式来做?我也非常感谢任何关于创建Office插件的建议或信息链接。

Outlook 2010插件c#公共方法

在VSTO项目中,一个名为Globals的自动生成的密封类可以从项目中的任何地方获得。Globals包含许多公共或内部静态属性,其中一个是ThisAddIn(类型为ThisAddIn,适当)。与上面的代码不同,你的代码看起来就像下面这样:

在Ribbon1.cs:

public void DoSomethingOnRibbon(Office.IRibbonControl control)
{
    string count = Globals.ThisAddIn.displayCount();
    ...
}

希望对你有帮助。

我使用在外接程序初始化时设置的静态成员变量(带有关联的静态getter):然后我可以从代码库中的任何地方作为Core(选择适当的名称)访问它。当然,如果外接程序对象在上下文中可用,我会尝试传递它,但有时很难做到。

类由外接程序容器/加载器自动实例化(它实际上是作为COM组件公开的,至少在ADX中是这样工作的:)。

幸福的编码。


代码可能看起来像这样:

// inside ThisAddIn class
public static ThisAddIn Active {
  get;
  private set;
}
// inside ThisAddIn_Startup
Active = this;
// later on, after add-in initialization, say in Ribbon1.button1_Click
ThisAddIn.Active.displayCount();