Поделиться через


Пошаговое руководство. Отображение настраиваемых областей задач с сообщениями электронной почты в Outlook

В этом пошаговом руководстве показано, как отобразить уникальный экземпляр настраиваемой области задач с каждым созданным или открытым сообщением электронной почты. Пользователи могут отображать или скрывать настраиваемую область задач с помощью кнопки на ленте каждого сообщения электронной почты.

Область применения. Сведения в этом разделе относятся к проектам надстроек VSTO для Outlook. Дополнительные сведения см. в разделе "Функции", доступные по Приложение Office ликации и типу проекта.

Чтобы отображать настраиваемую область задач с несколькими окнами проводника или инспектора, необходимо создать новый экземпляр настраиваемой области задач для каждого открытого окна. Дополнительные сведения о поведении настраиваемых областей задач в окнах Outlook см . в пользовательских панелях задач.

Примечание.

В этом пошаговом руководстве код надстройки VSTO представлен небольшими частями для облегчения обсуждения логики кода.

В этом пошаговом руководстве рассматриваются следующие задачи:

  • Конструирование пользовательского интерфейса настраиваемой области задач.

  • Создание пользовательского интерфейса настраиваемой ленты.

  • Отображение пользовательского пользовательского интерфейса ленты с сообщениями электронной почты.

  • Создание класса для управления окнами инспектора и настраиваемыми областями задач.

  • Инициализация и освобождение ресурсов, используемых надстройкой VSTO.

  • Синхронизация выключателя на ленте с настраиваемой областью задач.

Примечание.

Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация интегрированной среды разработки Visual Studio.

Необходимые компоненты

Для выполнения этого пошагового руководства требуются следующие компоненты:

Создание проекта

Пользовательские области задач реализованы в надстройках VSTO. Начните с создания проекта надстройки VSTO для Outlook.

Создание проекта

  1. Создайте проект надстройки Outlook с именем OutlookMailItemTaskPane. Используйте шаблон проекта Надстройка Outlook . Дополнительные сведения см. в статье "Практическое руководство. Создание проектов Office в Visual Studio".

    Visual Studio открывает файл кода ThisAddIn.cs или ThisAddIn.vb и добавляет проект OutlookMailItemTaskPane в Обозреватель решений.

Проектирование пользовательского интерфейса настраиваемой области задач

Визуальный конструктор для настраиваемых областей задач не предусмотрен, но можно создать пользовательский элемент управления с нужным пользовательским интерфейсом. Настраиваемая область задач в этой надстройке VSTO имеет простой пользовательский интерфейс, содержащий элемент управления TextBox . Далее в этом пошаговом руководстве вы добавите этот пользовательский элемент управления в настраиваемую область задач.

Проектирование пользовательского интерфейса настраиваемой области задач

  1. В обозревателе решений, щелкните проект OutlookMailItemTaskPane .

  2. В меню Проект выберите команду Добавить пользовательский элемент управления.

  3. В диалоговом окне Добавление нового элемента измените имя нового пользовательского элемента управления на TaskPaneControl, а затем нажмите кнопку Добавить.

    Пользовательский элемент управления откроется в конструкторе.

  4. Перетащите элемент управления TextBox со вкладки Стандартные элементы управленияна панели элементов в пользовательский элемент управления.

Проектирование пользовательского интерфейса ленты

Одной из целей этой надстройки VSTO является предоставление пользователям способа скрыть или отобразить настраиваемую область задач на ленте каждого сообщения электронной почты. Чтобы обеспечить пользовательский интерфейс, создайте пользовательский интерфейс настраиваемой ленты, отображающий выключатель, который пользователь может щелкнуть, чтобы отобразить или скрыть настраиваемую область задач.

Создание пользовательского интерфейса настраиваемой ленты

  1. В меню Проект выберите Добавить новый элемент.

  2. В диалоговом окне Добавление нового элемента выберите элемент Лента (визуальный конструктор).

  3. Измените имя новой ленты на ManageTaskPaneRibbonи нажмите кнопку Добавить.

    В конструкторе ленты откроется файл ManageTaskPaneRibbon.cs или ManageTaskPaneRibbon.vb и отобразятся вкладка и группа, используемые по умолчанию.

  4. В конструкторе ленты щелкните группу group1.

  5. В окне Свойства задайте для свойства Label значение Диспетчер области задач.

  6. Перетащите элемент управления ToggleButton со вкладки Элементы управления ленты Office на панели элементовв группу Диспетчер области задач .

  7. Нажмите toggleButton1.

  8. В окне Свойства задайте для свойства Label значение Показать область задач.

Отображение пользовательского пользовательского интерфейса ленты с помощью сообщений электронной почты

Настраиваемая область задач, которую вы создаете в этом пошаговом руководстве, должна появляться только с окнами инспектора, содержащими сообщения электронной почты. Поэтому задайте свойства таким образом, чтобы ваш пользовательский интерфейс настраиваемой ленты отображался только с этими окнами.

Отображение пользовательского пользовательского интерфейса ленты с сообщениями электронной почты

  1. В конструкторе лент щелкните ленту ManageTaskPaneRibbon .

  2. В окне Свойства щелкните раскрывающийся список рядом со свойством RibbonType, и выберите Microsoft.Outlook.Mail.Compose и Microsoft.Outlook.Mail.Read.

Создание класса для управления окнами инспекторов и настраиваемыми областями задач

Существует несколько случаев, когда надстройка VSTO должна определить, какая настраиваемая область задач связана с определенным сообщением электронной почты. Это следующие случаи.

  • Когда пользователь закрывает сообщение электронной почты. В этом случае надстройка VSTO должна удалить соответствующую настраиваемую область задач, чтобы ресурсы, используемые этой надстройкой VSTO, были правильно освобождены.

  • Когда пользователь закрывает настраиваемую область задач. В этом случае надстройка VSTO должна обновить состояние кнопки переключателя на ленте сообщения электронной почты.

  • Когда пользователь нажимает кнопку переключателя на ленте. В этом случае надстройка VSTO должна скрыть или отобразить соответствующую область задач.

    Чтобы включить надстройку VSTO для отслеживания того, какая настраиваемая область задач связана с каждым открытым сообщением электронной почты, создайте пользовательский класс, который упаковывает пары Inspector и CustomTaskPane объекты. Этот класс создает новый объект настраиваемой области задач для каждого сообщения электронной почты и удаляет настраиваемую область задач при закрытии соответствующего сообщения электронной почты.

Создание класса для управления окнами инспекторов и настраиваемыми областями задач

  1. В обозревателе решенийщелкните правой кнопкой мыши файл ThisAddIn.cs или ThisAddIn.vb и выберите в контекстном меню команду Просмотреть код.

  2. Добавьте в начало файла следующие инструкции .

    using Microsoft.Office.Tools;
    
  3. Добавьте следующий код в файл ThisAddIn.cs или ThisAddIn.vb за пределами класса ThisAddIn (для Visual C# добавьте этот код в пространство имен OutlookMailItemTaskPane ). Класс InspectorWrapper управляет парой объектов Inspector и CustomTaskPane . Вы завершите определение этого класса в следующих шагах.

    public class InspectorWrapper
    {
        private Outlook.Inspector inspector;
        private CustomTaskPane taskPane;
    
  4. Добавьте следующий конструктор после кода, добавленного на предыдущем шаге. Этот конструктор создает и инициализирует новую настраиваемую область задач, связанную с переданным объектом Inspector . В C# этот конструктор также присоединяет обработчики событий к событию Close объекта Inspector и к событию VisibleChanged объекта CustomTaskPane .

    public InspectorWrapper(Outlook.Inspector Inspector)
    {
        inspector = Inspector;
        ((Outlook.InspectorEvents_Event)inspector).Close +=
            new Outlook.InspectorEvents_CloseEventHandler(InspectorWrapper_Close);
        
        taskPane = Globals.ThisAddIn.CustomTaskPanes.Add(
            new TaskPaneControl(), "My task pane", inspector);
        taskPane.VisibleChanged += new EventHandler(TaskPane_VisibleChanged);
    }
    
  5. Добавьте следующий метод после кода, добавленного на предыдущем шаге. Этот метод является обработчиком событий для события VisibleChanged объекта CustomTaskPane , содержащегося в классе InspectorWrapper . Этот код обновляет состояние выключателя всякий раз, когда пользователь открывает или закрывает настраиваемую область задач.

    void TaskPane_VisibleChanged(object sender, EventArgs e)
    {
        Globals.Ribbons[inspector].ManageTaskPaneRibbon.toggleButton1.Checked = 
            taskPane.Visible;
    }
    
  6. Добавьте следующий метод после кода, добавленного на предыдущем шаге. Этот метод является обработчиком событий для Close события Inspector объекта, содержащего текущее сообщение электронной почты. Обработчик событий освобождает ресурсы при закрытии сообщения электронной почты. Он также удаляет текущую область задач из коллекции CustomTaskPanes . Это помогает предотвратить несколько экземпляров настраиваемой области задач при открытии следующего сообщения электронной почты.

    void InspectorWrapper_Close()
    {
        if (taskPane != null)
        {
            Globals.ThisAddIn.CustomTaskPanes.Remove(taskPane);
        }
    
        taskPane = null;
        Globals.ThisAddIn.InspectorWrappers.Remove(inspector);
        ((Outlook.InspectorEvents_Event)inspector).Close -=
            new Outlook.InspectorEvents_CloseEventHandler(InspectorWrapper_Close);
        inspector = null;
    }
    
  7. Добавьте следующий код после кода, добавленного на предыдущем шаге. Далее в этом пошаговом руководстве вы будете вызывать это свойство из метода в пользовательском интерфейсе настраиваемой ленты, чтобы отобразить или скрыть настраиваемую область задач.

        public CustomTaskPane CustomTaskPane
        {
            get
            {
                return taskPane;
            }
        }
    }
    

Инициализация и очистка ресурсов, используемых надстройкой

Добавьте код в класс ThisAddIn для инициализации надстройки VSTO при ее загрузке, а также для освобождения ресурсов, используемых этой надстройкой VSTO, при ее выгрузке. Инициализировать надстройку VSTO, настроив обработчик событий для NewInspector события и передав все существующие сообщения электронной почты этому обработчику событий. Когда надстройка VSTO выгружается, отсоедините этот обработчик событий и освободите объекты, используемые надстройкой VSTO.

Инициализация и освобождение ресурсов, используемых надстройкой VSTO

  1. В файле ThisAddIn.cs или ThisAddIn.vb найдите определение класса ThisAddIn .

  2. Добавьте в класс ThisAddIn следующие объявления.

    • Поле inspectorWrappersValue содержит все объекты Inspector и InspectorWrapper , которыми управляет надстройка VSTO.

    • Поле inspectors содержит ссылку на коллекцию окон инспектора в текущем экземпляре Outlook. Эта ссылка не позволит сборщику мусора освободить память, содержащую обработчик событий для события NewInspector , который вы объявите на следующем шаге.

      private Dictionary<Outlook.Inspector, InspectorWrapper> inspectorWrappersValue =
          new Dictionary<Outlook.Inspector, InspectorWrapper>();
      private Outlook.Inspectors inspectors;
      

  3. Замените метод ThisAddIn_Startup приведенным ниже кодом. Этот код присоединяет обработчик событий к событию NewInspector и передает каждый существующий объект Inspector в данный обработчик событий. Если пользователь загружает надстройку VSTO после запуска Outlook, надстройка VSTO использует эту информацию для создания настраиваемых областей задач для всех открытых сообщений электронной почты.

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        inspectors = this.Application.Inspectors;
        inspectors.NewInspector +=
            new Outlook.InspectorsEvents_NewInspectorEventHandler(
            Inspectors_NewInspector);
    
        foreach (Outlook.Inspector inspector in inspectors)
        {
            Inspectors_NewInspector(inspector);
        }
    }
    
  4. Замените метод ThisAddIn_ShutDown приведенным ниже кодом. Этот код отсоединяет обработчик событий NewInspector и освобождает объекты, используемые надстройкой VSTO.

    private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
    {
        inspectors.NewInspector -=
            new Outlook.InspectorsEvents_NewInspectorEventHandler(
            Inspectors_NewInspector);
        inspectors = null;
        inspectorWrappersValue = null;
    }
    
  5. Добавьте следующий обработчик событий NewInspector в класс ThisAddIn . Если новое Inspector содержит сообщение электронной почты, метод создает экземпляр нового InspectorWrapper объекта для управления связью между сообщением электронной почты и соответствующей областью задач.

    void Inspectors_NewInspector(Outlook.Inspector Inspector)
    {
        if (Inspector.CurrentItem is Outlook.MailItem)
        {
            inspectorWrappersValue.Add(Inspector, new InspectorWrapper(Inspector));
        }
    }
    
  6. Добавьте в класс ThisAddIn указанное ниже свойство. Это свойство предоставляет закрытое поле inspectorWrappersValue коду за пределами класса ThisAddIn .

    public Dictionary<Outlook.Inspector, InspectorWrapper> InspectorWrappers
    {
        get
        {
            return inspectorWrappersValue;
        }
    }
    

Контрольная точка

Постройте проект, чтобы убедиться, что компиляция выполняется без ошибок.

Построение проекта

  1. В обозревателе решенийщелкните проект OutlookMailItemTaskPane правой кнопкой мыши и выберите пункт Сборка. Убедитесь, что проект компилируется без ошибок.

Синхронизация кнопки переключателя ленты с пользовательской областью задач

Выключатель будет выглядеть как нажатый, когда область задач отображена, и как не нажатый, когда область задач скрыта. Чтобы синхронизировать состояние этой кнопки с настраиваемой областью задач, измените обработчик событий Click этого выключателя.

Синхронизация настраиваемой области задач с выключателем

  1. В конструкторе ленты дважды щелкните выключатель Показать область задач .

    Visual Studio автоматически создает обработчик событий с именем toggleButton1_Click, который обрабатывает событие Click выключателя. Visual Studio также открывает файл ManageTaskPaneRibbon.cs или ManageTaskPaneRibbon.vb в редакторе кода.

  2. Добавьте следующие инструкции в начале файла ManageTaskPaneRibbon.cs или ManageTaskPaneRibbon.vb .

    using Outlook = Microsoft.Office.Interop.Outlook;
    using Microsoft.Office.Tools;
    
  3. Замените обработчик событий toggleButton1_Click следующим кодом. Когда пользователь нажимает выключатель, этот метод отображает или скрывает настраиваемую область задач, связанную с текущим окном инспектора.

    private void toggleButton1_Click(object sender, RibbonControlEventArgs e)
    {
        Outlook.Inspector inspector = (Outlook.Inspector)e.Control.Context;
        InspectorWrapper inspectorWrapper = Globals.ThisAddIn.InspectorWrappers[inspector];
        CustomTaskPane taskPane = inspectorWrapper.CustomTaskPane;
        if (taskPane != null)
        {
            taskPane.Visible = ((RibbonToggleButton)sender).Checked;
        }
    }
    

Тестирование проекта

Когда вы запускаете отладку проекта, открывается Outlook и загружается надстройка VSTO. Надстройка VSTO отображает уникальный экземпляр настраиваемой области задач с каждым открывающимся сообщением электронной почты. Создайте несколько новых сообщений электронной почты для тестирования кода.

Тестирование надстройки VSTO

  1. Нажмите клавишу F5.

  2. В Outlook нажмите кнопку "Создать" , чтобы создать новое сообщение электронной почты.

  3. На ленте сообщения электронной почты щелкните вкладку "Надстройки " и нажмите кнопку "Показать область задач".

    Убедитесь, что область задач с заголовком "Моя задача" отображается с сообщением электронной почты.

  4. В этой области задач введите в текстовом поле Первая область задач .

  5. Закройте панель задачи.

    Убедитесь, что состояние кнопки Показать область задач изменилось, и она больше не выглядит нажатой.

  6. Снова нажмите кнопку Показать область задач .

    Убедитесь, что область задач открывается и текстовое поле по-прежнему содержит строку Первая область задач.

  7. В Outlook нажмите кнопку "Создать" , чтобы создать второе сообщение электронной почты.

  8. На ленте сообщения электронной почты щелкните вкладку "Надстройки " и нажмите кнопку "Показать область задач".

    Убедитесь, что область задач с заголовком " Моя задача" отображается с сообщением электронной почты, а текстовое поле в этой области задач пусто.

  9. В этой области задач введите в текстовом поле Вторая область задач .

  10. Измените фокус на первое сообщение электронной почты.

    Убедитесь, что область задач, связанная с этим сообщением электронной почты, по-прежнему отображает первую область задач в текстовом поле.

    Эта надстройка VSTO также обрабатывает более сложные сценарии, которые вы можете попробовать. Например, можно проверить поведение при просмотре сообщений электронной почты с помощью кнопок "Следующий элемент " и "Предыдущий элемент ". Вы также можете проверить поведение при выгрузке надстройки VSTO, открыть несколько сообщений электронной почты, а затем перезагрузить надстройку VSTO.

Следующие шаги

Дополнительные сведения о создании настраиваемых областей задач см. в следующих разделах: