Пошаговое руководство. Добавление элементов управления в лист во время выполнения в проекте уровня приложения
Обновлен: Июль 2008
Применение |
---|
Сведения в данном разделе относятся только к указанным проектам Visual Studio Tools for Office и версиям приложений Microsoft Office. Тип проекта
Версия Microsoft Office
Дополнительные сведения см. в разделе Доступность функций по типам приложений и проектов. |
Можно добавлять элементы управления на любой открытый лист при помощи надстройки Excel 2007. В данном пошаговом руководстве демонстрируется, как с помощью ленты предоставить пользователям возможность добавлять на лист элементы управления Button, NamedRange и ListObject.
Дополнительные сведения см. в разделе Добавление элементов управления в документы Office во время выполнения.
В данном пошаговом руководстве рассмотрены следующие задачи:
Предоставление пользовательского интерфейса для добавления элементов управления на лист.
Добавление элементов управления на лист.
Удаление элементов управления из листа.
Примечание. |
---|
На вашем компьютере названия некоторых элементов интерфейса пользователя Visual Studio или их расположение могут отличаться от указанных в нижеследующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Параметры Visual Studio. |
Обязательные компоненты
Ниже приведены компоненты, необходимые для выполнения данного пошагового руководства.
Visual Studio Tools for Office (необязательный компонент Visual Studio 2008 Professional и Visual Studio Team System);
Пакет обновления 1 (SP1) для Visual Studio 2008.
Microsoft Office Excel 2007.
Создание нового проекта надстройки Excel
Начните с создания проекта надстройки для Excel 2007.
Создание нового проекта надстройки Excel
В Visual Studio создайте проект надстройки Excel 2007 с именем ExcelDynamicControls.
В диалоговом окне Создание проекта выберите команду Создать каталог для решения.
Сохраните проект в каком-либо расположении.
Дополнительные сведения см. в разделе Практическое руководство. Создание проектов Visual Studio Tools for Office.
Предоставление пользовательского интерфейса для добавления элементов управления на лист
Добавьте пользовательскую вкладку на ленту Excel 2007. Пользователи смогут устанавливать флажки на этой вкладке для добавления элементов управления на лист.
Предоставление пользовательского интерфейса для добавления элементов управления на лист
В меню Проект выберите команду Добавить новый элемент.
В диалоговом окне Добавление нового элемента выберите Лента (визуальный конструктор) и нажмите кнопку Добавить.
В конструкторе лент откроется файл с именем Ribbon1.cs или Ribbon1.vb, а также отобразится вкладка по умолчанию и группа.
Перетащите элемент управления "Флажок" с вкладки Элементы управления ленты Office в панели элементов в группу group1.
Щелкните CheckBox1, чтобы выбрать его.
В окне Свойства измените следующие свойства:
Свойство
Значение
Name
Button
Label
Button
Добавьте второй флажок в group1 и измените следующие свойства.
Свойство
Значение
Name
NamedRange
Label
NamedRange
Добавьте третий флажок в group1 и измените следующие свойства.
Свойство
Значение
Name
ListObject
Label
ListObject
Добавление элементов управления на лист
Управляемые элементы управления можно добавлять только к ведущим элементам, действующим как контейнеры. Поскольку проекты надстроек работают с любым открытым листом, прежде чем добавить элемент управления, надстройка преобразовывает лист в ведущий элемент либо получает существующий ведущий элемент. Добавьте код в обработчик событий нажатия каждого элемента управления, чтобы создать ведущий элемент Worksheet на основе открытого листа. Затем добавьте элементы управления Button, NamedRange и ListObject в текущую выбранную область листа.
Добавление элементов управления на лист
В конструкторе ленты дважды щелкните элемент Button.
В редакторе кода откроется обработчик событий Click элемента Button.
Замените обработчик событий Button_Click следующим кодом.
Этот код использует метод GetVstoObject для получения ведущего элемента, представляющего первый лист в книге, а затем добавляет элемент управления Button в выбранную ячейку.
Private Sub Button_Click(ByVal sender As System.Object, _ ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _ Handles Button.Click Dim worksheet = CType(Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1), _ Excel.Worksheet).GetVstoObject() Dim buttonName As String = "MyButton" If CType(sender, RibbonCheckBox).Checked Then Dim selection As Excel.Range = Globals.ThisAddIn.Application.Selection If Not (selection Is Nothing) Then Dim button As New Microsoft.Office.Tools.Excel.Controls.Button() worksheet.Controls.AddControl(button, selection, buttonName) End If Else worksheet.Controls.Remove(buttonName) End If End Sub
private void Button_Click(object sender, RibbonControlEventArgs e) { Worksheet worksheet = ((Excel.Worksheet) Globals.ThisAddIn.Application. ActiveWorkbook.Worksheets[1]).GetVstoObject(); string buttonName = "MyButton"; if (((RibbonCheckBox)sender).Checked) { Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range; if (selection != null) { Microsoft.Office.Tools.Excel.Controls.Button button = new Microsoft.Office.Tools.Excel.Controls.Button(); worksheet.Controls.AddControl(button, selection, buttonName); } } else { worksheet.Controls.Remove(buttonName); } }
В обозревателе решений выберите файл Ribbon1.cs или Ribbon1.vb.
В меню Вид выберите Конструктор.
В конструкторе ленты дважды щелкните элемент NamedRange.
Замените обработчик событий NamedRange_Click следующим кодом.
Этот код использует метод GetVstoObject для получения ведущего элемента, представляющего первый лист в книге, а затем задает элемент управления NamedRange для выбранной ячейки или ячеек.
Private Sub NamedRange_Click(ByVal sender As System.Object, _ ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _ Handles NamedRange.Click Dim worksheet = CType(Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1), _ Excel.Worksheet).GetVstoObject() Dim rangeName As String = "MyNamedRange" If CType(sender, RibbonCheckBox).Checked Then Dim selection As Excel.Range = Globals.ThisAddIn.Application.Selection If Not (selection Is Nothing) Then Dim namedRange As NamedRange = _ worksheet.Controls.AddNamedRange(selection, rangeName) End If Else worksheet.Controls.Remove(rangeName) End If End Sub
private void NamedRange_Click(object sender, RibbonControlEventArgs e) { Worksheet worksheet = ((Excel.Worksheet)Globals.ThisAddIn.Application.ActiveWorkbook. Worksheets[1]).GetVstoObject(); string Name = "MyNamedRange"; if (((RibbonCheckBox)sender).Checked) { Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range; if (selection != null) { worksheet.Controls.AddNamedRange(selection, Name); } } else { worksheet.Controls.Remove(Name); } }
В конструкторе ленты дважды щелкните элемент ListObject.
Замените обработчик событий ListObject_Click следующим кодом.
Этот код использует метод GetVstoObject для получения ведущего элемента, представляющего первый лист в книге, а затем задает элемент управления ListObject для выбранной ячейки или ячеек.
Private Sub ListObject_Click(ByVal sender As System.Object, _ ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _ Handles ListObject.Click Dim worksheet = CType(Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1), _ Excel.Worksheet).GetVstoObject() Dim listObjectName As String = "MyListObject" If CType(sender, RibbonCheckBox).Checked Then Dim selection As Excel.Range = _ Globals.ThisAddIn.Application.Selection If Not (selection Is Nothing) Then worksheet.Controls.AddListObject(selection, listObjectName) End If Else worksheet.Controls.Remove(listObjectName) End If End Sub
private void ListObject_Click(object sender, RibbonControlEventArgs e) { Worksheet worksheet = ((Excel.Worksheet)Globals.ThisAddIn.Application.ActiveWorkbook. Worksheets[1]).GetVstoObject(); string listObjectName = "MyListObject"; if (((RibbonCheckBox)sender).Checked) { Excel.Range selection = Globals.ThisAddIn.Application.Selection as Excel.Range; if (selection != null) { worksheet.Controls.AddListObject(selection, listObjectName); } } else { worksheet.Controls.Remove(listObjectName); } }
Добавьте следующие инструкции "using" в начало файла кода ленты.
Imports Excel = Microsoft.Office.Interop.Excel Imports Microsoft.Office.Tools.Excel Imports Microsoft.Office.Tools.Excel.Extensions
using Excel = Microsoft.Office.Interop.Excel; using Microsoft.Office.Tools.Excel; using Microsoft.Office.Tools.Excel.Extensions;
Удаление элементов управления из листа
При сохранении и закрытии листа элементы управления не сохраняются. Следует удалить программными средствами все созданные элементы управления Windows Forms перед сохранением листа, в противном случае при повторном открытии этого листа появится только контур этого элемента управления. Добавьте в событие WorkbookBeforeSave код, который удаляет элементы управления Windows Forms из коллекции созданного ведущего элемента. Дополнительные сведения см. в разделе Сохранение динамических элементов управления в документах Office.
Удаление элементов управления из листа
В обозревателе решений выберите файл ThisAddIn.cs или ThisAddIn.vb.
В меню Вид выберите пункт Код.
Добавьте следующий метод в класс ThisAddIn. Этот код получает первый лист книги, а затем с помощью метода HasVstoObject проверяет, имеется ли на этом листе созданный объект Visual Studio Tools for Office. Если созданный объект листа имеет элементы управления, то код получает этот объект и выполняет итерацию по коллекции элементов управления, удаляя элементы управления один за другим.
Sub Application_WorkbookBeforeSave _ (ByVal workbook As Microsoft.Office.Interop.Excel.Workbook, _ ByVal SaveAsUI As Boolean, ByRef Cancel As Boolean) _ Handles Application.WorkbookBeforeSave Dim worksheet As Excel.Worksheet = workbook.Worksheets(1) If worksheet.HasVstoObject() And worksheet.GetVstoObject().Controls.Count > 0 Then Dim vstoWorksheet As Worksheet = worksheet.GetVstoObject() While vstoWorksheet.Controls.Count > 0 Dim vstoControl As Object = vstoWorksheet.Controls(0) vstoWorksheet.Controls.Remove(vstoControl) End While End If End Sub
void Application_WorkbookBeforeSave(Microsoft.Office.Interop.Excel.Workbook workbook, bool SaveAsUI, ref bool Cancel) { Excel.Worksheet worksheet = workbook.Worksheets[1] as Excel.Worksheet; if (worksheet.HasVstoObject() && worksheet.GetVstoObject().Controls.Count > 0) { Worksheet vstoWorksheet = worksheet.GetVstoObject(); while (vstoWorksheet.Controls.Count > 0) { object vstoControl = vstoWorksheet.Controls[0]; vstoWorksheet.Controls.Remove(vstoControl); } } }
В C# следует создать обработчик событий для события WorkbookBeforeSave. Можно заменить этот код в методе ThisAddIn_Startup. Сведения о создании обработчиков событий см. в разделе Практическое руководство. Создание обработчиков событий в пакете инструментов Visual Studio для Office. Замените метод ThisAddIn_Startup следующим кодом.
private void ThisAddIn_Startup(object sender, System.EventArgs e) { this.Application.WorkbookBeforeSave += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookBeforeSaveEventHandler (Application_WorkbookBeforeSave); }
Проверка работы решения
Добавьте на лист элементы управления, выбрав их в пользовательской вкладке на ленте. При сохранении листа эти элементы управления будут удалены.
Проверка решения.
Нажмите клавишу F5 для запуска проекта.
Выберите какую-либо ячейку в листе Sheet1.
Щелкните вкладку Надстройки.
В группе group1 щелкните элемент Button.
В выбранной ячейке появится кнопка.
Выберите другую ячейку в листе Sheet1.
В группе group1 щелкните элемент NamedRange.
Для выбранной ячейки будет задан именованный диапазон.
Выберите ряд ячеек в листе Sheet1.
В группе group1 щелкните элемент ListObject.
В выбранные ячейки будет добавлен список.
Сохраните лист.
Элементы управления, добавленные в Sheet1, более не появляются.
Следующие действия
Дополнительные сведения об элементах управления в проектах надстроек Excel 2007 см. в следующем разделе:
- Сведения о сохранении элементов управления на листе см. в разделе Пример динамических элементов управления надстройками Excel.
См. также
Основные понятия
Разработка надстроек уровня приложения для Excel
Использование элементов управления Windows Forms в листах Excel
Другие ресурсы
Элементы управления в документах Office
Элементы управления ведущего приложения Excel
Журнал изменений
Дата |
Журнал изменений |
Причина |
---|---|---|
Июль 2008 |
Добавлен раздел. |
Изменение функции SP1. |