Outlook 2010 надстройка C # публичные методы - PullRequest
4 голосов
/ 29 сентября 2011

Мне нужно разработать надстройку для 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.

Ответы [ 2 ]

6 голосов
/ 04 октября 2011

В проектах VSTO автоматически сгенерированный запечатанный класс с именем Globals доступен из любой точки вашего проекта.Globals содержит ряд открытых или внутренних статических свойств, одним из которых является ThisAddIn (типа ThisAddIn, соответственно).Вместо вышесказанного ваш код будет выглядеть примерно так:

В Ribbon1.cs:

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

Надеюсь, это поможет.

3 голосов
/ 29 сентября 2011

Я использую статическую переменную-член (со связанным статическим геттером), которая устанавливается при инициализации надстройки: тогда я могу получить к ней доступ как 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();
...