Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

РазработкаОфисныхЗаст

.pdf
Скачиваний:
5
Добавлен:
07.02.2016
Размер:
1.18 Mб
Скачать

101

Застосування Word дозволяє створити колекцію повторно використовуваних частин документа з ім'ям стандартні блоки. Після створення документа на основі шаблону можна додати в документ будь-яку з таблиць, використовуючи об'єкти

BuildingBlockGalleryContentControl, що відображають доступні стандартні блоки шаблону.

Створіть шаблон проекту Word з ім'ям MyBuildingBlockTemplate

для спрощення створення наступних копій. У майстрі створіть новий документ. Середовище Visual Studio відкриває новий шаблон Word в режимі конструктора і додає проект MyBuildingBlockTemplate в Браузер рішень.

Створіть таблицю, яка містить чотири різних типи елементів керування вмістом, в яких користувач зможе вводити дані про співробітника.

Для створення таблиці співробітників натисніть на стрічці вкладку Вставлення, у групі Таблиці натисніть Таблиця і вставте таблицю з 2 стовпцями і 4 рядками: у першому стовпці – Ім'я співробітника, Дата прийому на роботу, Назва та Малюнок. У другому стовпці натисніть на першу клітинку та відкрийте на стрічці вкладку Розробник. У групі Елементи керування натисніть кнопку Текст, щоб додати елемент керування PlainTextContentControl в першу клітинку. Аналогічно додайте елементи керування DatePickerContentControl,

ComboBoxContentControl та PictureContentControl.

Створіть таблицю, яка містить три різних типи елементів керування вмістом, в яких користувач зможе вводити дані про відгуки користувачів, з 2 стовпцями і 3 рядками: у першому стовпці – ім'я клієнта, ступінь задоволеності, коментарі, у другому стовпці – елементи керування PlainTextContentControl,

DropDownListContentControl та RichTextContentControl.

Елементи керування вмістом можна ініціалізувати під час розробки за допомогою вікна Властивості в Visual Studio. Також їх можна ініціалізувати під час виконання, що дає можливість динамічно задавати їх початковий стан. Розглянемо використання коду для

заповнення ComboBoxContentControl і DropDownListContentControl

під час виконання для наочної демонстрації роботи цих об'єктів.

Для зміни користувацького інтерфейсу елементів керування вмістом додайте в клас ThisDocument наступний код:

private Microsoft.Office.Tools.Word.GroupContentControl

102

groupControl1; private

Microsoft.Office.Tools.Word.BuildingBlockGalleryContentContr ol buildingBlockControl1;

private Microsoft.Office.Tools.Word.BuildingBlockGalleryContentContr ol buildingBlockControl2;

Додайте наступний код в метод ThisDocument_Startup:

comboBoxContentControl1.PlaceholderText = "Choose a title, or enter your own";

comboBoxContentControl1.DropDownListEntries.Add ("Engineer", "Engineer", 0);

comboBoxContentControl1.DropDownListEntries.Add ("Designer", "Designer", 1);

comboBoxContentControl1.DropDownListEntries.Add ("Manager", "Manager", 2);

dropDownListContentControl1.PlaceholderText = "Choose a rating (1 lowest, 3 highest)";

dropDownListContentControl1.DropDownListEntries.Add ("1", "1", 0);

dropDownListContentControl1.DropDownListEntries.Add ("2", "2", 1);

dropDownListContentControl1.DropDownListEntries.Add ("3", "3", 2);

Використовуйте об'єкт GroupContentControl для захисту таблиці співробітників. Після застосування захисту елементи керування вмістом можуть як і раніше редагуватися в таблиці. Однак неможливо редагувати текст у першому стовпці або змінювати таблицю іншим способом, наприклад, додаючи або видаляючи рядки або стовпці.

Даний код запобігає редагуванню таблиці співробітників – додаванню таблиці в оголошений раніше об'єкт GroupContentControl:

this.Tables[1]. Range.Select ();

groupControl1 = this.Controls.AddGroupContentControl ("groupControl1");

Додайте таблиці в колекцію стандартних блоків шаблону, щоб

103

мати можливість вставляти створені в документі таблиці.

Після доданого на попередньому етапі коду додайте наступний код в метод ThisDocument_Startup, що додає нові стандартні блоки, що містять таблиці, в колекцію Microsoft.Office.Interop.Word. BuildingBlockEntries, яка містить всі повторно використовувані стандартні блоки шаблону. Нові стандартні блоки визначаються в нову категорію з іменем Інформація про співробітників та користувачів і присвоюються типом стандартних блоків

Microsoft.Office.Interop.Word. WdBuildingBlockTypes.wdTypeCustom1:

Word.Template template1 = this.AttachedTemplate as Word.Template;

if (template1!= null)

{object description = null; template1.BuildingBlockEntries.Add ("Employee Table",

Word.WdBuildingBlockTypes.wdTypeCustom1, "Employee and Customer Information", this.Tables[1]. Range, ref description, Word.WdDocPartInsertOptions.wdInsertContent);

template1.BuildingBlockEntries.Add ("Customer Table", Word.WdBuildingBlockTypes.wdTypeCustom1, "Employee and Customer Information", this.Tables[2]. Range, ref description, Word.WdDocPartInsertOptions.wdInsertContent);

}

Після доданого на попередньому етапі коду додайте наступний код в метод ThisDocument_Startup, який видаляє таблиці з шаблону. Таблиці більше не потрібні, оскільки вони додані в галерею повторно використовуваних стандартних блоків шаблону. Код поміщає документ у режим конструктора для можливості видалення захищеної таблиці співробітників.

if (! this.FormsDesign)

{ this.ToggleFormsDesign ();

}

this.Tables[2]. Delete (); this.Tables[1]. Delete (); this.ToggleFormsDesign ();

104

Створіть елемент керування вмістом, що надає доступ до раніше створених стандартних блоків (таблиць).

Після доданого на попередньому етапі коду додайте наступний

код в метод ThisDocument_Startup класу ThisDocument. Даний код ініціалізує оголошений раніше об'єкт

BuildingBlockGalleryContentControl, який відображає всі стандартні блоки, визначені в категорію з іменем Інформація про співробітників та користувачів і мають тип стандартних блоків

Microsoft.Office.Interop. Word.WdBuildingBlockTypes.wdTypeCustom1.

buildingBlockControl1 = this.Controls.AddBuildingBlockGalleryContentControl (

this.Paragraphs[1]. Range, "buildingBlockControl1"); buildingBlockControl1.BuildingBlockCategory = "Employee and

Customer Information"; buildingBlockControl1.BuildingBlockType =

Word.WdBuildingBlockTypes.wdTypeCustom1; buildingBlockControl1.PlaceholderText = "Choose your first

building block"; buildingBlockControl2 =

this.Controls.AddBuildingBlockGalleryContentControl(this.Par agraphs[2]. Range, "buildingBlockControl2");

buildingBlockControl2.BuildingBlockCategory = "Employee and Customer Information";

buildingBlockControl2.BuildingBlockType = Word.WdBuildingBlockTypes.wdTypeCustom1;

buildingBlockControl2.PlaceholderText = "Choose your second building block";

4.2.3 Закладки у документах Word 4.2.3.1 Елементи керування Bookmark

Елемент керування Microsoft.Office.Tools.Word.Bookmark є

закладкою з унікальним ім'ям, подіями і можливістю прив'язки до даних. Закладку можна використовувати в якості прототипу елемента або розміщення в документі Microsoft Office Word. Елемент керування

Microsoft.Office.Tools.Word.Bookmark є поєднанням об'єктів Microsoft.Office.Interop.Word.Bookmark і Microsoft.Office.Interop. Word.Range.

105

У проектах рівня документа можна додавати елементи керування Microsoft.Office.Tools.Word.Bookmark в документ під час розробки або під час виконання. У проектах рівня застосування елементи керування Microsoft.Office.Tools.Word.Bookmark додаються в будь-який відкритий елемент під час виконання.

Елемент керування Bookmark підтримує просту прив'язку даних. Закладку слід прив'язати до джерела даних за допомогою властивості DataBindings. Властивістю прив'язки даних закладки за замовчанням є Text. Зміни даних у зв'язаному наборі даних відображаються в елементі керування Microsoft.Office.Tools.Word.Bookmark. У проектах рівня документа прив'язати дані до закладок можна також за допомогою вікна Джерела даних.

Форматування, що застосовується до елемента

Microsoft.Office.Interop.Word.Bookmark, можна застосовувати і до

елементу керування Microsoft.Office.Tools.Word. Bookmark. До таких функцій форматування відносяться шрифти, відступи, інтервали, нумерація списку, а також стилі.

Додаткову відмінність між об'єктом Microsoft.Office.Interop.

Word.Bookmark і елементом керування Microsoft.Office.Tools.Word. Bookmark складає їх поведінка при присвоєнні тексту закладці. Якщо присвоюється текст нульової довжини Microsoft.Office.Interop.Word. Bookmark, він буде вказаний праворуч від закладки, і довжина закладки залишиться нульовою. Однак, якщо присвоюється текст нульової довжини Microsoft.Office.Tools.Word.Bookmark, його буде додано до закладки, а довжина закладки збільшиться відповідно до загальної кількості доданих знаків.

Елемент керування Microsoft.Office.Tools.Word.Bookmark також має властивість Bookmark.Text, яка відрізняється від властивості Range.Text, доступної у властивості Range елемента керування

Microsoft.Office.Tools.Word.Bookmark або від властивості Range

об'єкта Microsoft.Office.Interop.Word.Bookmark.

Властивість Bookmark.Text використовується, щоб відобразити текст в межах закладки і залишити закладку в документі. Range.Text використовується, щоб відобразити текст в розташуванні закладки і автоматично видалити її.

Елементи керування типу "Закладка" можуть перекривати один одного, тобто один і той же текст може використовуватися декількома закладками. При присвоєнні нового тексту одній з закладок, що

106

перекриваються, вона буде містити тільки новий текст, і закладки більше не будуть перекривати один одного. Якщо закладка повністю заповнена в межах іншої закладки і необхідно змінити текст зовнішнього закладки, внутрішня закладка не видаляється. Однак внутрішня закладка стає порожньою і переміщається в кінець зовнішньої закладки.

Для елемента керування Microsoft.Office.Tools.Word.Bookmark доступні наступні події: BeforeDoubleClick, BeforeRightClick,

BindingContextChanged, Deselected, Disposed, Selected, SelectionChange.

4.2.3.2 Додавання закладок у документи Word

У проектах рівня документа можна додавати елементи керування Bookmark в документ проекту під час розробки або під час виконання. У проектах рівня застосування елементи керування Bookmark додаються в будь-який відкритий елемент під час виконання.

Існує декілька способів додавання елементів керування Bookmark у документ у проекті рівня документа під час розробки: з Панелі елементів Visual Studio, з додатку Word тим же самим способом, що і звичайну закладку, з вікна Джерела даних.

Можна програмно додати в документ елемент керування Bookmark під час виконання за допомогою методів властивості Controls класу ThisDocument в проекті. Кожен метод має два перевантаження, що дозволяє додавати елемент керування Bookmark такими способами: додати Bookmark в заданому діапазоні та елемент керування Bookmark, заснований на власній закладці в документі.

Щоб додати елемент керування Bookmark в перший абзац документа, вставте в обробник подій ThisDocument_Startup в проекті наведений нижче код.

Microsoft.Office.Tools.Word.Bookmark firstParagraph; firstParagraph = this.Controls.AddBookmark

(this.Paragraphs[1]. Range, "FirstParagraph");

Елементи керування Bookmark можна додавати в будь-який відкритий документ під час виконання програмно або з

107

використанням надбудови рівня застосування. Для цього слід створити ведучий елемент Document, заснований на відкритому документі, і використовувати метод властивості Controls цього ведучого елементу. Кожен метод має також два перевантаження.

Для додавання елемента керування Bookmark у вказаний діапазон слід використовувати метод ControlCollection.AddBookmark (Range, String) і передати в діапазон Range, куди необхідно додати елемент керування Bookmark:

Document extendedDocument = Globals.Factory.GetVstoObject (this.Application.ActiveDocument);

Bookmark firstParagraph = extendedDocument.Controls. AddBookmark(extendedDocument.Paragraphs[1].Range, "FirstParagraph");

Для додавання елемента керування Bookmark, заснованого на власному елементі керування Bookmark, слід використовувати метод

ControlCollection.AddBookmark (Bookmark, String) і передати в

існуючий елемент керування Microsoft.Office.Interop.Word. Bookmark,

який буде використовуватися в якості основи для нового елемента керування Bookmark:

if (this.Application.ActiveDocument.Bookmarks.Count> 0)

{object index = 1;

Word.Bookmark firstBookmark = this.Application.

ActiveDocument.Bookmarks.get_Item (ref index);

Document extendedDocument = Globals.Factory.GetVstoObject (this.Application.ActiveDocument);

Bookmark vstoBookmark = extendedDocument.Controls. AddBookmark (firstBookmark, "VSTOBookmark");

}

4.2.3.3 Зміна розмірів елементів керування Bookmark

Розмір елемента керування Bookmark встановлюється при додаванні його в документ Microsoft Office Word. Передбачено три способи зміни розмірів закладки:

— додавання або видалення тексту в елементі керування Bookmark. При додаванні тексту в закладку розмір закладки

108

автоматично збільшується, щоб вмістити новий текст. При видаленні тексту розмір закладки автоматично зменшується;

зміна властивостей Start і End елемента керування Bookmark;

повторне створення елемента керування Bookmark;

Для зміни розміру закладки у проекті рівня документа під час розробки:

this.SampleBookmark.Start = this.SampleBookmark.Start — 5; this.SampleBookmark.End = this.SampleBookmark.End + 5;

Розглянемо приклад для зміни розміру закладки у проекті рівня застосування під час виконання:

Microsoft.Office.Tools.Word.Document vstoDocument = Globals. Factory.GetVstoObject (this.Application.ActiveDocument); vstoDocument.ActiveWindow.View.ShowBookmarks = true; vstoDocument.Paragraphs[1]. Range.InsertParagraphBefore (); Word.Range firstParagraph = vstoDocument.Paragraphs[1]. Range;

firstParagraph.Text = "123456789abcdefghijklmnopqrstuvwxyz";

Microsoft.Office.Tools.Word.Bookmark sampleBookmark = vstoDocument.Controls.AddBookmark (firstParagraph, "bookmark1");

sampleBookmark.Start = sampleBookmark.Start + 5; sampleBookmark.End = sampleBookmark.End — 5;

4.2.3.4 Створення контекстного меню для закладок

Розглянемо приклад, як створювати контекстні меню для елементів керування Bookmark в налаштуваннях на рівні документа для Word.

Створіть проект документа Word з ім'ям "Моє контекстне меню закладок". Виберіть у майстрі Створити новий документ. Додайте текст в документ, а потім додайте 2 закладки, що перекриваються.

Введіть наступний текст: “ Це приклад створення контекстного меню, що з'являється при натисканні правою кнопкою миші тексту закладки.”

Додайте елементи керування "Закладка" bookmark1 та

109

bookmark2 у документ, вибравши в діалоговому вікні Додавання елемента керування "Закладка" параметр створювати контекстне меню при натисканні тексту правою кнопкою миші.

Оголосіть змінні CommandBar та змінні закладки на рівні класу:

private Office.CommandBar commandBar; private Office.CommandBarButton boldText; private Office.CommandBarButton italicText; private Microsoft.Office.Tools.Word.Bookmark selectedBookmark;

const int WordTrue = -1; const int WordFalse = 0;

Додайте метод для створення меню.

private void AddPopUp ()

{ commandBar = Application.CommandBars.Add ("FormatText", Office.MsoBarPosition.msoBarPopup, missing, true);

boldText = (Office.CommandBarButton) commandBar.Controls. Add (1, missing, missing, missing, missing);

boldText.Style = Office.MsoButtonStyle.msoButtonCaption; boldText.Caption = "Bold";

boldText.FaceId = 113; boldText.Tag = "0";

italicText = (Office.CommandBarButton)commandBar.Controls. Add (1, missing, missing, missing, missing);

italicText.Style = Office.MsoButtonStyle.msoButtonCaption; italicText.Caption = "Italic";

italicText.FaceId = 114; italicText.Tag = "1";

boldText.Click += new Microsoft.Office.Core. _CommandBarButtonEvents_ClickEventHandler (ButtonClick);

italicText.Click += new Microsoft.Office.Core. _CommandBarButtonEvents_ClickEventHandler (ButtonClick);

((Microsoft.Office.Interop.Word.Template) this.AttachedTemplate). Saved = true;

}

Викличте AddPopup з події Startup документа ThisDocument.

110

private void ThisDocument_Startup (object sender, System.EventArgs e)

{ AddPopUp ();

}

Для форматування тексту в закладці додайте обробник подій ButtonClick, щоб застосувати форматування до закладки:

private void ButtonClick (Microsoft.Office.Core. CommandBarButton Ctrl, ref bool CancelDefault)

{if (Ctrl.Caption == "Bold")

{if (selectedBookmark.Bold == WordTrue)

{selectedBookmark.Bold = WordFalse;

}

else

{selectedBookmark.Bold = WordTrue;

}

}

else if (Ctrl.Caption == "Italic")

{if (selectedBookmark.Italic == WordTrue)

{selectedBookmark.Italic = WordFalse;

}

else

{selectedBookmark.Italic = WordTrue;

}

}

}

Додайте обробник подій showPopupMenu для обробки події

BeforeRightClick обох закладок:

private void ShowPopupMenu (object sender, Microsoft.Office.Tools.Word.ClickEventArgs e)

{int startPosition = 0;

for (int i = 1; i <= e.Selection.Bookmarks.Count; i ++)

{if (e.Selection.Bookmarks[i]. Start> startPosition)

{ startPosition = e.Selection.Bookmarks[i]. Start;

}

}

if (((Microsoft.Office.Tools.Word.Bookmark) sender).Start