РазработкаОфисныхЗаст
.pdf161
— для додавання елемента керування зі стилем обтікання "Навколо контуру" слід використовувати перевантаження методу, що приймає ліву і верхню координати елемента керування.
При відкритті шаблону Word в конструкторі Visual Studio, елементи керування, які не є вбудованими, на шаблоні можуть бути не видимими, тому що Visual Studio відкриває шаблон у вигляді Звичайний. Для перегляду елементів керування, змініть вигляд у меню Режим розмітки.
Елементи керування Windows Forms не підтримуються всередині заголовка або нижнього колонтитула або всередині вкладеного документа.
6.2.2.1 Зміна форматування документа з використанням елементів керування CheckBox
Розглянемо принципи використання елементів керування Windows Forms для зміни форматування тексту в налаштуванні рівня документа для Microsoft Office Word.
Перетягніть в документ три елементи керування CheckBox, призначивши їм текст Bold, Italic та Underline. Після цього перемістіть точку вставки під прапорці та введіть наступний текст: “ Встановіть відповідний прапорець, щоб змінити форматування тексту.” Перетягніть в документ елемент керування Bookmark зі вкладки Елементи керування Word в панелі елементів. З'явиться діалогове вікно Додати елемент керування закладками. Виділіть текст, доданий в документ. До виділеного тексту додасться елемент керування Bookmark з ім'ям Bookmark1. У вікні Властивості слід змінити значення властивості (Name) на fontText.
Далі слід написати код форматування тексту при установці або знятті прапорця:
− додайте в клас ThisDocument наступні константи:
const int WordTrue = -1; const int WordFalse = 0;
− додайте наступний код до обробника подій Click прапорця applyBoldFont:
162
private void applyBoldFont_Click (object sender, System.EventArgs e)
{if (this.applyBoldFont.Checked == true)
{this.fontText.Bold = WordTrue;
}
else
{ this.fontText.Bold = WordFalse;
}
}
− додайте наступний код до обробника подій Click прапорця applyItalicFont:
private void applyItalicFont_Click (object sender, System.EventArgs e)
{ if (this.applyItalicFont.Checked == true)
{this.fontText.Italic = WordTrue;
}
else
{this.fontText.Italic = WordFalse;
}
}
− додайте наступний код до обробника подій Click прапорця applyUnderlineFont:
private void applyUnderlineFont_Click (object sender, System.EventArgs e)
{if (this.applyUnderlineFont.Checked == true)
{this.fontText.Underline = Word.WdUnderline.wdUnderlineSingle;
}
else
{this.fontText.Underline = Word.WdUnderline.wdUnderlineNone;
}
}
−додати обробники подій для текстових полів до події Startup:
this.applyBoldFont.Click += new EventHandler (applyBoldFont_Click);
163
this.applyItalicFont.Click += new EventHandler (applyItalicFont_Click);
this.applyUnderlineFont.Click += new EventHandler (applyUnderlineFont_Click);
6.2.2.2 Відображення тексту в текстовому полі документа за допомогою кнопки
Розглянемо принципи використання кнопок і текстових полів у налаштуванні рівня документа для Microsoft Office Word. Елементи інтерфейсу користувача, що розглядаються, для документів Word складаються з кнопки (insertText) і текстового поля TextBox
(displayText).
Введіть код, який буде виконуватися при натисканні кнопки:
private void insertText_Click (object sender, EventArgs e) { this.displayText.Text += "Hello World!";
}
У події Startup необхідно додати обробник подій натискання кнопки:
this.insertText.Click += new EventHandler (insertText_Click);
6.2.2.3 Оновлення діаграми в документі за допомогою перемикачів
Розглянемо основні принципи використання перемикачів у налаштуванні на рівні документа Microsoft Office Word для надання користувачам можливості вибору стилів діаграм в документі.
Спочатку слід створити проект документа Word. Для додавання діаграми в документ виберіть на стрічці вкладку Вставити, у групі Текст натисніть кнопку Вставка об'єкту і виберіть пункт Об'єкт. У діалоговому вікні Об'єкт у списку Тип об'єкта на вкладці Створити виберіть Microsoft Smart Tags 2.0 Type Library. Закрийте вікно Режим таблиці, щоб підтвердити значення за замовчуванням для діаграми, і натисніть мишею в документі, щоб перемістити фокус з діаграми. З
164
контекстного меню діаграми виберіть команду Формат об'єкта. На сторінці Стиль діалогового вікна Форматування об'єкта виберіть пункт Квадрат.
Для додавання елементу керування користувача у браузері рішень виберіть проект Параметри діаграми, у меню Проект виберіть команду Додати новий елемент, у діалоговому вікні Додати новий елемент клацніть елемент керування користувача, назвіть елемент керування ChartOptions і натисніть кнопку Додати.
Перетягніть чотири елементи керування Перемикач у елемент керування користувачата та встановіть їм наступні характеристики:
−Name: columnChart, Text: Гістограма;
−Name: barChart, Text: Лінійчата діаграма;
−Name: lineChart, Text: Графік;
−Name: areaBlockChart, Text: Заповнена діаграма.
Для доступу до схеми з елементу керування користувача в документі, в проекті повинно бути зазначене посилання
Microsoft.Office.Interop.Graph.
Для забезпечення правильної роботи кнопок створіть для елементу керування користувача відкриту подію, додайте властивість для завдання типу вибору і створіть процедуру для події CheckedChanged кожного перемикача.
Додайте в клас ChartOptions код для створення події
SelectionChanged і властивості Selection:
public event EventHandler SelectionChanged; private Microsoft.Office.Interop.Graph.XlChartType selectedType = Microsoft. Office.Interop.Graph.XlChartType.xlColumnClustered;
public Microsoft.Office.Interop.Graph.XlChartType Selection
{get
{return this.selectedType;
}
set
{this.selectedType = value;
}}
Задайте тип діаграми в обробнику подій CheckedChanged
165
перемикача areaBlockChart і викличте подія:
private void areaBlockChart_CheckedChanged (object sender, EventArgs e)
{if (((RadioButton) sender). Checked)
{this.selectedType = Microsoft.Office.Interop.Graph.XlChartType.xlAreaStacked;
if (this.SelectionChanged!= null)
{this.SelectionChanged (this, EventArgs.Empty);
}
}
}
Задайте тип діаграми в обробнику подій CheckedChanged перемикача barChart:
private void barChart_CheckedChanged (object sender, EventArgs e)
{if (((RadioButton) sender). Checked)
{this.selectedType = Microsoft.Office.Interop.Graph.XlChartType.xlBarClustered;
if (this.SelectionChanged!= null)
{this.SelectionChanged (this, EventArgs.Empty);
}
}
}
Задайте тип діаграми в обробнику подій CheckedChanged
перемикача columnChart:
private void columnChart_CheckedChanged (object sender, EventArgs e)
{if (((RadioButton) sender). Checked)
{this.selectedType = Microsoft. Office.Interop.Graph.XlChartType.xlColumnClustered;
if (this.SelectionChanged!= null)
{ this.SelectionChanged (this, EventArgs.Empty);
}
}}
166
Задайте тип діаграми в обробнику подій CheckedChanged перемикача lineChart:
private void lineChart_CheckedChanged (object sender, EventArgs e)
{if (((RadioButton) sender). Checked)
{this.selectedType = Microsoft.Office.Interop.Graph.XlChartType.xlLineMarkers;
if (this.SelectionChanged!= null)
{this.SelectionChanged (this, EventArgs.Empty);
}
}
}
Додайте обробники подій для перемикачів:
public ChartOptions ()
{ InitializeComponent (); areaBlockChart.CheckedChanged += new EventHandler
(areaBlockChart_CheckedChanged); barChart.CheckedChanged += new EventHandler
(barChart_CheckedChanged); columnChart.CheckedChanged += new EventHandler
(columnChart_CheckedChanged); lineChart.CheckedChanged += new EventHandler
(lineChart_CheckedChanged);
}
Додайте елемент керування користувача ChartOptions в документ. Створіть обробник подій для зміни типу діаграми відповідно до параметрыв, обраних у призначеному для користувача елементі керування.
private void ChartOptions1_SelectionChanged (object sender, EventArgs e)
{try
{object index = 1;
Word.Shape shape = this.Shapes.get_Item (ref index);
shape.Activate (); Microsoft.Office.Interop.Graph.Chart dataChart = (Microsoft.
167
Office.Interop.Graph.Chart) shape.OLEFormat.Object; dataChart.ChartType = this.ChartOptions1.Selection;
this.ChartOptions1.Select ();
}
catch (Exception ex)
{ MessageBox.Show (ex.Message);
}
}
Додайте обробник події Startup для елементу керування користувача:
this.ChartOptions1.SelectionChanged += new EventHandler (ChartOptions1_SelectionChanged);
6.2.2.4 Додавання елементів керування в документ під час виконання в надбудові рівня застосування
Можна також додавати елементи керування в будь-який відкритий документ Microsoft Office Word за допомогою надбудови рівня застосування. Розглянемо, як за допомогою стрічки надати користувачам можливість додавати в документ елементи керування
Button або RichTextContentControl.
Створіть проект надбудови рівня застосування для Word з ім'ям
WordDynamicControls. Якщо проект орієнтований на .NET Framework
4, додайте посилання на Microsoft.Office.Tools.Word.v4.0.Utilities.dll.
Додайте персоналізовану вкладку на стрічку в Word. Для додавання елементів керування в документ користувачі зможуть встановлювати прапорці на цій вкладці.
Для цього додайте до документу елемент Стрічка (візуальний конструктор), перетягніть на неї елемент керування Прапорець. Додайте на неї 2 прапорці з іменами: addButtonCheckBox та
addRichTextCheckBox.
Перш ніж можна буде додати елемент керування, в коді надбудови необхідно перетворити активний документ у
Microsoft.Office. Tools.Word.Document. У рішеннях Visual Studio Tools for Office керовані елементи керування можна додавати тільки у ведучі елементи, які відіграють роль контейнерів елементів керування.
168
У проектах надбудов рівня застосування ведучі елементи можуть бути створені тільки під час виконання за допомогою методу
GetVstoObject.
Для додавання та видалення елементів керування в активоу документі додайте в клас ThisAddIn наступний код, що оголошує об'єкти Button і RichTextContentControl, які представляють елементи керування, що будуть додані в документ:
private Microsoft.Office.Tools.Word.Controls.Button button = null;
private RichTextContentControl richTextControl = null;
Додайте наступний метод в клас ThisAddIn, який додає елемент керування Button у поточне виділення в документі, якщо прапорець встановлюється, або видаляє елемент керування Button, якщо прапорець знімається, коли користувач натискає на стрічці прапорець "Додати кнопку":
internal void ToggleButtonOnDocument ()
{ Document vstoDocument = Globals.Factory.GetVstoObject (this.Application.ActiveDocument);
string name = "MyButton";
if (Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked) { Word.Selection selection = this.Application.Selection; if (selection!= null && selection.Range!= null)
{ button = vstoDocument.Controls.AddButton ( selection.Range, 100, 30, name);
}
}
else
{ vstoDocument.Controls.Remove (name);
}
}
Додайте наступний метод в клас ThisAddIn, який при натисканні на другий прапорець додає елемент керування RichTextContentControl в поточне виділення в документі, якщо прапорець встановлюється, або видаляє елемент керування RichTextContentControl, якщо прапорець знімається:
169
internal void ToggleRichTextControlOnDocument ()
{ Document vstoDocument = Globals.Factory.GetVstoObject (this.Application.ActiveDocument);
string name = "MyRichTextBoxControl";
if (Globals.Ribbons.MyRibbon.addRichTextCheckBox.Checked)
{Word.Selection selection = this.Application.Selection; if (selection!= null && selection.Range != null)
{richTextControl = vstoDocument.Controls. AddRichTextContentControl (selection.Range, name);
}
}
else
{vstoDocument.Controls.Remove (name);
}
}
Розглянемо налаштування видалення елемента керування Button програмними засобами при збереженні документа:
private void Application_DocumentBeforeSave (Word.Document Doc, ref bool SaveAsUI, ref bool Cancel)
{ bool isExtended = Globals.Factory.HasVstoObject (Doc); if (isExtended)
{ Microsoft.Office.Tools.Word.Document vstoDocument = Globals.Factory.GetVstoObject (Doc);
if (vstoDocument.Controls.Contains (button)) { vstoDocument.Controls.Remove (button);
Globals.Ribbons.MyRibbon.addButtonCheckBox.Checked = false;
}
}
}
Додайте наступний код в обробник подій ThisAddIn_Startup, необхідний для підключення до обробника подій
Application_DocumentBeforeSave події DocumentBeforeSave
this.Application.DocumentBeforeSave += new Word. ApplicationEvents4_DocumentBeforeSaveEventHandler (Application_DocumentBeforeSave);
170
Нарешті змініть обробники подій Click доданих на стрічку прапорців, щоб додавати елементи керування в документ і видаляти їх з документа:
private void addButtonCheckBox_Click (object sender, RibbonControlEventArgs e)
{ Globals.ThisAddIn.ToggleButtonOnDocument ();
}
private void addRichTextCheckBox_Click (object sender, RibbonControlEventArgs e)
{ Globals.ThisAddIn.ToggleRichTextControlOnDocument ();
}
6.2.3 Елементи керування Windows Forms у аркушах Excel
Елементи керування Windows Forms можна додавати в аркуші Microsoft Office Excel тим же способом, яким вони додаються у форми Windows. Однак у Excel існують деякі особливості.
−відповідність розміру керуючого елемента розмірам комірки: можна налаштувати елемент керування для автоматичної зміни розміру при зміні розміру батьківської комірки;
−додавання компонентів, спільно використовуваних усіма аркушами: можна додати компоненти, які повинні спільно використовуватися всіма аркушами, наприклад, DataSet, в конструктор книги, а не в аркуші. Компонент з'явиться в області компонентів;
−формула для впровадження елементів керування: при виборі елемента керування в Excel у рядку формул відображається текст = EMBED ("WinForms.Control.Host", ""). Цей текст є обов'язковим і не підлягає видаленню.
6.2.3.1 Зміна розміру всередині комірок аркуша Excel
При зміні розмірів стовпців або рядків у аркуші розмір елементів керування ведучої програми, що містяться в комірках, автоматично змінюється до висоти або ширини зміненої клітинки. Розмір елементів керування Windows Forms за замовчуванням не змінюється.