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

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

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

91

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

рисунок: елемент керування рисунку виводить зображення, які можна вказати під час розробки або виконання. Користувачі також можуть натиснути на елемент керування, щоб вибрати зображення для вставки в документ;

текст у форматі RTF містить текст або інші елементи, такі як таблиці, зображення або інші елементи керування вмістом;

звичайний текст: даний елемент керування не може містити інших елементів, таких як таблиці, картинки чи інших елементів керування вмістом. Весь текст в елементі керування звичайним текстом однаково відформатований;

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

4.2.2.2 Загальні функції елементів керування вмістом

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

Text (окрім PictureContentControl і ContentControl) повертає або задає текст, що відображається в елементі керування;

PlaceholderText (окрім PictureContentControl) повертає або задає тимчасовий текст, що відображається в елементі керування до тих пір, поки користувач не змінить елемент керування, елемент керування не буде заповнений даними з джерела даних або вміст елемента керування не буде видалено;

Title повертає або задає заголовок, який відображається на границі елемента керування вмістом, при натисканні на нього користувачем;

події Entering, Exiting призводять до виконання коду, коли користувач натискає мишею всередині (за межами) елемента керування вмістом, або при програмному переміщенні курсору

92

всередину елемента керування вмістом;

— події Added, Deleting призводять до виконання коду після додавання в документ (безпосередньо перед видаленням) елемента керування вмістом в результаті операції скасування або повтору.

4.2.2.3 Захист частин документів за допомогою елементів керування вмістом

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

властивість LockContents забороняє правку вмісту користувачами;

властивість LockContentControl забороняє видалення елемента керування користувачами.

Якщо область, яку слід захистити, знаходиться поза елементом керування, або, якщо слід захистити область, яка містить елементи керування вмістом і інші типи вмісту, можна помістити всю область в GroupContentControl. На відміну від інших елементів керування вмістом, елемент керування GroupContentControl не надає видимого для користувача інтерфейсу користувача. Його єдине призначення — визначати область, яку користувачі не зможуть редагувати. Якщо даний елемент містить впроваджені елементи керування вмістом, останні не захищаються автоматично. Необхідно використовувати властивість LockContents кожного впровадженого елемента керування, щоб заборонити користувачам правити їх вміст.

4.2.2.4 Прив'язка даних

Можна відобразити дані в документах за допомогою прив'язки елемента керування вмістом до джерела даних. При оновленні джерела даних, елемент керування вмістом відображає зміни. Також можна знову зберегти зміни в джерело даних.

Елементи керування вмістом надають наступні можливості

93

прив'язки даних:

можна прив'язувати елементи керування вмістом до полів баз даних або керованих об'єктів за допомогою однакових моделей прив'язки даних, таких як Windows Forms;

елементи керування вмістом можна зв'язати з елементами в XML-частинах, які впроваджено в документ.

Більшість елементів керування підтримують просту модель прив'язки даних, яку використовує Windows Forms. Проста прив'язка даних означає, що елемент керування прив'язаний до одного елементу даних, наприклад, до значення у стовпці таблиці даних. У проектах рівня документа можна прив'язати дані до елементів керування вмістом за допомогою вікна Джерела даних у середовищі Visual

Studio.

4.2.2.5 Додавання елементів керування вмістом у документи

Word

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

Існує декілька способів додавання елементів керування вмістом

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

з вкладки Елементи керування Word в панелі елементів;

тим самим способом, що і звичайний елемент керування вмістом Word;

перетягнути елемент керування вмістом у документ з вікна Джерела даних, що зручно, якщо необхідно прив'язати елемент керування до даних при створенні елемента керування.

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

Динамічно створені елементи керування вмістом не зберігаються в документі при його закритті. Однак, власні елементи

94

керування вмістом залишаються в документі. Можна заново створити елемент керування вмістом, заснований на власному елементі керування вмістом при наступному відкритті документа.

Для додавання елемента керування вмістом в місце поточного виділення використовуйте метод ControlCollection, який має ім'я Add <класу елементів керування>, і має єдиний параметр для імені нового елемента керування:

private Microsoft.Office.Tools.Word.RichTextContentControl richTextControl1;

private void AddRichTextControlAtSelection () {this.Paragraphs[1]. Range.InsertParagraphBefore ();

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

richTextControl1 = this.Controls. AddRichTextContentControl ("richTextControl1");

richTextControl1.PlaceholderText = "Enter your first name";

}

Для додавання елемента керування вмістом у вказаний діапазон використовуйте метод ControlCollection, який має ім'я Add <класу елементів керування> і має параметр Microsoft.Office.Interop.Word.

Range:

private Microsoft.Office.Tools.Word.RichTextContentControl richTextControl2;

private void AddRichTextControlAtRange ()

{ this.Paragraphs[1]. Range.InsertParagraphBefore (); richTextControl2 = this.Controls.AddRichTextContentControl

(this.Paragraphs[1]. Range, "RichTextControl2"); richTextControl2.PlaceholderText = "Enter your first

name";

}

Для додавання елемента керування вмістом, заснованого на власному елементі керування вмістом, використовуйте метод ControlCollection, який має ім'я Add <класу елементів керування> і має

параметр Microsoft.Office.Interop.Word.ContentControl:

95

private System.Collections.Generic.List <Microsoft.Office. Tools.Word.RichTextContentControl> RichTextControls;

private void CreateRichTextControlsFromNativeControls ()

{if (this.ContentControls.Count <= 0) return; richTextControls = new System.Collections.Generic.List

<Microsoft.Office.Tools.Word.RichTextContentControl> ();

int count = 0;

foreach (Word.ContentControl nativeControl in this.ContentControls)

{ if (nativeControl.Type == Microsoft.Office.Interop. Word.WdContentControlType.wdContentControlRichText)

{ count ++; Microsoft.Office.Tools.Word.RichTextContentControl tempControl = this.Controls.AddRichTextContentControl (nativeControl, "VSTORichTextControl" + count.ToString ());

richTextControls.Add (tempControl);

}

}

}

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

Для додавання елемента керування вмістом у місце поточного виділення використовуйте метод ControlCollection:

private Microsoft.Office.Tools.Word.RichTextContentControl richTextControl1;

private void AddRichTextControlAtSelection () {Word.Document currentDocument = this.Application.ActiveDocument; currentDocument.Paragraphs[1].Range.InsertParagraphBefore(); currentDocument.Paragraphs[1]. Range.Select ();

Document extendedDocument = Globals.Factory.GetVstoObject (currentDocument);

96

richTextControl1 = extendedDocument.Controls. AddRichTextContentControl ("richTextControl1"); richTextControl1.PlaceholderText = "Enter your first name";

}

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

private Microsoft.Office.Tools.Word.RichTextContentControl richTextControl2;

private void AddRichTextControlAtRange () { Word.Document currentDocument = this.Application.ActiveDocument;

currentDocument.Paragraphs[1]. Range.InsertParagraphBefore ();

Document extendedDocument = Globals.Factory.GetVstoObject (currentDocument);

richTextControl2 = extendedDocument.Controls. AddRichTextContentControl (currentDocument.Paragraphs[1]. Range, "richTextControl2");

richTextControl2.PlaceholderText = "Enter your first name";

}

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

ControlCollection:

private System.Collections.Generic.List <Microsoft.Office. Tools.Word.RichTextContentControl> RichTextControls;

private void Application_DocumentOpen (Microsoft.Office.Interop.Word.Document Doc)

{if (Doc.ContentControls.Count> 0)

{Document extendedDocument = Globals.Factory.GetVstoObject (Doc);

richTextControls = new System.Collections.Generic.List <Microsoft.Office.Tools.Word.RichTextContentControl> ();

int count = 0;

foreach (Word.ContentControl nativeControl in

97

Doc.ContentControls)

{ if (nativeControl.Type == Microsoft.Office. Interop.Word.WdContentControlType.wdContentControlRichText)

{ count ++; Microsoft.Office.Tools.Word.RichTextContentControl tempControl = extendedDocument.Controls. AddRichTextContentControl (nativeControl, "VSTORichTextControl" + count.ToString ());

richTextControls.Add (tempControl);

}

}

}

}

Після чого приєднати обробник подій

Application_DocumentOpen до події DocumentOpen:

this.Application.DocumentOpen += new Word.ApplicationEvents4 _DocumentOpenEventHandler (Application_DocumentOpen);

4.2.2.6 Захист частин документів за допомогою елементів керування вмістом

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

Можна заборонити користувачам редагувати або видаляти елемент керування вмістом шляхом завдання властивостей елемента керування в проекті рівня документа на етапі розробки або під час виконання.

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

Для захисту елемента керування вмістом на етапі розробки у документі, який розміщений в конструкторі Visual Studio, виберіть елемент керування вмістом, який необхідно захистити, та у вікні

98

Властивості, щоб заборонити користувачам змінювати елемент керування, задайте для властивості LockContents значення True, а щоб заборонити користувачам видаляти елемент керування, задайте для властивості LockContentControl значення True.

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

private Microsoft.Office.Tools.Word.RichTextContentControl deletableControl;

private Microsoft.Office.Tools.Word.RichTextContentControl editableControl;

private void AddProtectedContentControls ()

{ this.Paragraphs[1]. Range.InsertParagraphBefore (); Word.Range range1 = this.Paragraphs[1]. Range; deletableControl = this.Controls.AddRichTextContentControl

(range1, "DeletableControl"); deletableControl.PlaceholderText = "You can delete this

control," + "But you cannot edit it"; deletableControl.LockContents = true; range1.InsertParagraphAfter ();

Word.Range range2 = this.Paragraphs[2]. Range; editableControl = this.Controls.AddRichTextContentControl

(range2, "EditableControl"); editableControl.PlaceholderText = "You can edit this

control," + "But you cannot delete it"; editableControl.LockContentControl = true;

}

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

private Microsoft.Office.Tools.Word.RichTextContentControl deletableControl;

private Microsoft.Office.Tools.Word.RichTextContentControl editableControl;

private void AddProtectedContentControls () {Microsoft.Office.Tools.Word.Document vstoDocument=Globals.

99

Factory.GetVstoObject (this.Application.ActiveDocument);

vstoDocument.Paragraphs[1]. Range.InsertParagraphBefore (); Word.Range range1 = vstoDocument.Paragraphs[1]. Range; deletableControl = vstoDocument.Controls.

AddRichTextContentControl (range1,"DeletableControl"); deletableControl.PlaceholderText = "You can delete this

control," + "But you cannot edit it"; deletableControl.LockContents = true; range1.InsertParagraphAfter ();

Word.Range range2 = vstoDocument.Paragraphs[2]. Range; editableControl = vstoDocument.Controls.

AddRichTextContentControl (range2, "EditableControl"); editableControl.PlaceholderText = "You can edit this

control," + "But you cannot delete it."; editableControl.LockContentControl = true;

}

Можна заборонити користувачам змінювати частину документа, помістивши цю частину в елемент керування GroupContentControl. Це рекомендується робити у випадках, коли необхідно захистити частину документа, що не містить елементів керування вмістом, або частину документа, що вже містить елементи керування вмістом, проте текст чи інші елементи, які необхідно захистити, не включені в елементи керування вмістом.

Для захисту області документа на етапі розробки у документі, який розміщений в конструкторі Visual Studio, виберіть область, яку необхідно захистити, у стрічці натисніть на вкладку Розробник, а у групі Елементи керування натисніть кнопку Група та виберіть пункт Група. При цьому в класі ThisDocument проекту буде автоматично створений елемент керування GroupContentControl, що містить область, яку необхідно захистити. На етапі розробки відображається межа, що представляє елемент керування групи, яку не видно під час виконання.

Для того щоб захистити область документа під час виконання в проекті рівня документа, виберіть область, яку необхідно захистити, програмним способом, після чого викличте метод AddGroupContentControl для створення елемента керування

GroupContentControl:

100

private Microsoft.Office.Tools.Word.GroupContentControl groupControl1;

private void ProtectFirstParagraph ()

{this.Paragraphs[1]. Range.InsertParagraphBefore (); Word.Range range1 = this.Paragraphs[1]. Range;

range1.Text = "You cannot edit or change the formatting of text" + "In this sentence, because this sentence is in a GroupContentControl.";

range1.Select ();

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

}

Приклад коду для проекту рівня застосування:

private Microsoft.Office.Tools.Word.GroupContentControl groupControl1;

private void ProtectFirstParagraph () {Microsoft.Office.Tools.Word.Document vstoDocument =

Globals.Factory.GetVstoObject

(this.Application.ActiveDocument); vstoDocument.Paragraphs[1]. Range.InsertParagraphBefore (); Word.Range range1 = vstoDocument.Paragraphs[1].Range; range1.Text = "You cannot edit or change the formatting of

text" + "In this sentence, because this sentence is in a GroupContentControl.";

range1.Select ();

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

}

4.2.2.7 Створення шаблону за допомогою елементів керування вмістом

Розглянемо, як створювати налаштування на рівні документа, що використовує елементи керування вмістом для створення в шаблоні Microsoft Office Word структурованого вмісту з можливістю повторного використання.