Extending a Form Region with an Add-in
Хотя вы можете создавать и запускать формы с областями форм без надстройки COM, использование надстройки COM позволит регионам форм включать настраиваемую бизнес-логику или расширенные функции. В отличие от настройки страниц форм в стандартной форме, VBScript не используется для написания кода за формой; Вместо этого вы программ будете программ для областей форм с помощью надстройки COM. Надстройка реализует новый интерфейс FormRegionStartup. Надстройки смогут использовать элементы управления Microsoft Forms 2.0 и Элементы управления Microsoft Outlook в области формы. В этом разделе описывается реализация FormRegionStartup и доступ к элементам управления Outlook в области формы.
Указание использования надстройки
При регистрации области формы для класса сообщений создайте раздел в реестре Windows для этого класса сообщений (если ключ еще не существует) и укажите в качестве данных знак равенства (=), за которым следует ProgID надстройки. Дополнительные сведения о регистрации области формы в реестре Windows см. в разделе Указание областей форм в реестре Windows.
Реализация FormRegionStartup
В том же классе, который реализует интерфейс IDTExtensibility2 надстройки COM, реализуйте интерфейс Outlook.FormRegionStartup , определенный в библиотеке типов Outlook. Outlook вызовет четыре метода в этом интерфейсе:
GetFormRegionStorage
Когда Outlook будет отображать область формы, которая управляется надстройкой, Outlook вызовет метод GetFormRegionStorage . Когда надстройка получает вызов из Outlook в GetFormRegionStorage с указанием сведений для области формы, надстройка вернет сведения для макета. Эти сведения могут быть локальным путем к файлу макета (. OFS-файл), объект Microsoft Windows IStorage или массив байтов с содержимым файла OFS, который позволяет надстройке хранить OFS в качестве ресурса. Outlook будет использовать возвращаемые сведения для создания экземпляров элементов управления и вычисления макета для области формы. Outlook также создаст экземпляр объекта FormRegion для области формы. Прототип метода для GetFormRegionStorage в Microsoft Visual Basic и Microsoft C# показан ниже.
В Visual Basic:
Public Function GetFormRegionStorage(ByVal FormRegionName As String,
ByVal Item As Object,
ByVal LCID As Integer,
_ ByVal FormRegionMode As Outlook.OlFormRegionMode,
ByVal FormRegionSize As Outlook.OlFormRegionSize) _
Implements Microsoft.Office.Interop.Outlook.FormRegionStartup.GetFormRegionStorage
В C#:
public object GetFormRegionStorage(string FormRegionName,
object Item,
int LCID,
Outlook.OlFormRegionMode FormRegionMode,
Outlook.OlFormRegionSize FormRegionSize)
BeforeFormRegionShow
Если getFormRegionStorage успешно выполняется, непосредственно перед отображением области формы в окне инспектора или в области чтения Outlook вызовет Метод BeforeFormRegionShow, передав объект FormRegion надстройке. Надстройка будет использовать этот шанс перед отображением области формы для обновления чего-либо в пользовательском интерфейсе, например изменения подписей меток, как описано в разделе Доступ к элементам управления Outlook ниже, и подавления ненужного содержимого. Ниже показаны прототипы методов Visual Basic и C# для BeforeFormRegionShow .
В Visual Basic:
Public Sub BeforeFormRegionShow(ByVal Item As Object,
ByVal FormRegion As Microsoft.Office.Interop.Outlook.FormRegion) _
Implements Microsoft.Office.Interop.Outlook.FormRegionStartup.BeforeFormRegionShow
В C#:
public void BeforeFormRegionShow(object Item, Outlook.FormRegion FormRegion)
Доступ к элементам управления Outlook
При использовании надстройки COM для расширения области формы вы часто прослушиваете события элемента управления, вызываете методы управления, а также считываете и задаете свойства элемента управления. Чтобы получить доступ к Microsoft Forms элементам управления версии 2.0, элементам управления Outlook или объекту canvas формы в надстройке, необходимо добавить ссылку на библиотеку объектов Microsoft Forms 2.0. Добавление этой ссылки даст доступ к пространству имен Microsoft.Vbe.Interop.Forms в проекте надстройки.
После добавления ссылки можно при необходимости создать псевдоним в пространстве имен библиотеки типов, чтобы упростить использование включенных типов. Чтобы создать псевдоним, вставьте следующий код в начало файла кода. Ниже приведены примеры того, как это сделать при написании надстройки в Visual Basic или C#. Эти псевдонимы также будут использоваться в приведенных ниже примерах кода.
В Visual Basic:
Imports Outlook = Microsoft.Office.Interop.Outlook
Imports Office = Microsoft.Office.Core
Imports MSForms = Microsoft.Vbe.Interop.Forms
В C#:
using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core;
using MSForms = Microsoft.Vbe.Interop.Forms;
Вы можете получить доступ к элементам управления с помощью объекта FormRegion, полученного из BeforeFormRegionShow. Свойство FormRegion.Form возвращает объект, представляющий форму; Этот объект можно привести к классу MSForms.UserForm (который предоставляется в библиотеке объектов Microsoft Forms 2.0), чтобы получить доступ к холсту формы для области формы.
Каждый экземпляр объекта UserForm имеет коллекцию Controls , которую можно использовать для доступа к отдельным элементам управления в UserForm по имени элемента управления. Многие элементы управления Microsoft Forms 2.0 имеют тематические аналоги, которые являются элементами управления Outlook. В области формы Outlook заменяет те элементы управления Forms 2.0, которые имеют аналогичные элементы управления Outlook, соответствующими тематическими аналогами. Получив ссылку на тематический элемент управления из коллекции Controls , вы можете привести его к нужному типу в библиотеке типов Outlook. Затем вы сможете получить доступ ко всем свойствам, методам и событиям, предоставляемым для этих элементов управления в библиотеке типов Outlook. В отличие от настройки форм с помощью VBScript, вы сможете прослушивать все события элемента управления, а не только событие Click . Дополнительные сведения об элементах управления см. в разделе Элементы управления в пользовательской форме.
В следующих примерах кода показано, как метод BeforeFormRegionShow использует входной параметрFormRegion из Outlook для получения объекта формы, а затем приводит его к классу MSForms.UserForm и обращается к коллекции элементов управления в объекте UserForm . Холст формы, представленный этим объектом UserForm , содержит два элемента управления Outlook: текстовое поле с именем OlkTextBox1
и флажок с именем OlkCheckBox1
. Он приводит их к соответствующим типам элементов управления Outlook и задает значения по умолчанию для этих элементов управления следующим образом.
В Visual Basic:
Dim UserForm As MSForms.UserForm
Dim FormControls As MSForms.Controls
Dim TextBox1 As Outlook.OlkTextBox
Dim CheckBox1 As Outlook.OlkCheckBox
UserForm = FormRegion.Form
FormControls = UserForm.Controls
TextBox1 = FormControls.Item("OlkTextBox1")
TextBox1.Text = "Sample Form Region"
CheckBox1 = FormControls.Item("OlkCheckBox1")
CheckBox1.Value = True
В C#:
MSForms.UserForm userForm = (MSForms.UserForm)FormRegion.Form;
MSForms.Controls formControls = userForm.Controls;
Outlook.OlkTextBox textBox1 =
(Outlook.OlkTextBox)formControls.Item("OlkTextBox1");
textBox1.Text = "Sample Form Region";
Outlook.OlkCheckBox checkBox1 =
(Outlook.OlkCheckBox)formControls.Item("OlkCheckBox1");
checkBox1.Value = true;
GetFormRegionManifest
При запуске Outlook считывает список областей форм из реестра Windows и кэширует данные. На основе этих данных, если Outlook заметит, что надстройка предоставляет XML-манифест для области формы, Outlook будет использовать Идентификатор ProgID, указанный в кэшированных данных, и вызовет метод GetFormRegionManifest , реализованный этой надстройкой, чтобы получить XML-код, необходимый для отображения области формы. Если XML-манифест недопустим и не соответствует XML-схеме области формы, Outlook не сможет загрузить область формы.
Дополнительные сведения об указании ProgID при регистрации области формы см. в разделе Указание областей формы в реестре Windows.
Ниже показаны прототипы методов Visual Basic и C# для GetFormRegionManifest .
В Visual Basic:
Public Function GetFormRegionManifest(ByVal FormRegionName As String,
ByVal LCID As Integer) _
Implements Microsoft.Office.Interop.Outlook.FormRegionStartup.GetFormRegionManifest
В C#:
public object GetFormRegionManifest(string FormRegionName, int LCID)
GetFormRegionIcon
При запуске Outlook считывает список областей форм из реестра Windows и кэширует данные, связанные с областями формы. Если область формы зарегистрирована с помощью ProgID, Outlook прибегнет к соответствующей надстройке, вызвав ее реализацию GetFormRegionIcon для любого значка в XML-манифесте, имеющего addin
значение дочернего элемента элемента icon . Дополнительные сведения об использовании надстройки для указания значков см. в разделе Практическое руководство. Использование надстройки для указания значков для области формы.
Ниже показаны прототипы методов Visual Basic и C# для GetFormRegionIcon .
В Visual Basic:
Public Function GetFormRegionIcon(ByVal FormRegionName As String,
ByVal LCID As Integer, _
ByVal Icon As Outlook.OlFormRegionIcon) _
Implements Microsoft.Office.Interop.Outlook.FormRegionStartup.GetFormRegionManifest
В C#:
public object GetFormRegionIcon(string FormRegionName, int LCID, Outlook.OlFormRegionIcon Icon)
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.