Návod: Přidání ovládacích prvků na list za běhu v projektu na úrovni aplikace
Pomocí doplňku aplikace Excel můžete přidat ovládací prvky do libovolného otevřeného listu.Tento návod ukazuje, jak povolit uživatelům přidávat pomocí pásu karet Button, NamedRangea ListObject do listu.Informace naleznete v části Přidání ovládacích prvků do dokumentů Office za běhu.
Platí pro: informace v tomto tématu se vztahují na projekty na úrovni aplikace Excel 2010.Další informace naleznete v tématu Dostupné funkce podle aplikací systému Office a typů projektu.
Tento návod ilustruje následující úkoly:
Poskytuje uživatelské rozhraní (UI) pro přidání ovládacích prvků do listu.
Přidání ovládacích prvků do listu.
Odebrání ovládacích prvků z listu.
[!POZNÁMKA]
Na vašem počítači se můžou v následujících pokynech zobrazovat jiné názvy nebo umístění některých prvků uživatelského rozhraní Visual Studia. Tyto prvky jsou určeny edicí sady Visual Studio a použitým nastavením. Další informace najdete v tématu Přizpůsobení nastavení pro vývoj v sadě Visual Studio.
Požadavky
Chcete-li dokončit tento návod, potřebujete následující komponenty:
Edice Visual Studia 2013, která zahrnuje nástroje Microsoft Office Developer Tools. Další informace najdete v tématu Konfigurace počítače pro vývoj řešení pro systém Office.
Excel 2013 nebo Excel 2010.
Vytvoření nové aplikace Excel doplněk projektu
Začněte vytvořením Excel přidat do projektu.
Vytvoření nové aplikace Excel doplněk projektu
V Visual Studio, vytvoření projektu aplikace Excel doplněk s názvem ExcelDynamicControls.Další informace naleznete v tématu Postupy: Vytváření projektů pro systém Office v prostředí Visual Studio.
Přidat odkaz Microsoft.Office.Tools.Excel.v4.0.Utilities.dll sestavení.Tento odkaz je nutné programově přidat ovládací prvek model Windows Forms listu dále v tomto návodu.
Poskytuje uživatelské rozhraní pro přidání ovládacích prvků do listu
Přidáte vlastní kartu pásu karet aplikace Excel.Uživatelé mohou vybrat zaškrtávací políčka na kartě přidání ovládacích prvků do listu.
Uživatelské rozhraní pro přidání ovládacích prvků do listu
V nabídce Projekt klikněte na příkaz Přidat novou položku.
V Přidat novou položku dialogovém **pásu karet (vizuální návrhář)**a klepněte na tlačítko Přidat.
Soubor s názvem Ribbon1.cs nebo Ribbon1.vb v Návrháři pásu karet se zobrazí výchozí kartu a skupiny.
Z Ovládací prvky pásu karet Office kartě nástrojů, přetáhněte ovládací prvek CheckBox do skupina1.
Klepněte na CheckBox1 jej vyberte.
V Vlastnosti okna, změnit následující vlastnosti.
Property
Value
Název
Tlačítko
Popisek
Tlačítko
Přidání druhého zaškrtávacího políčka na skupina1a potom změňte následující vlastnosti.
Property
Value
Název
NamedRange
Popisek
NamedRange
Přidat třetí políčko skupina1a potom změňte následující vlastnosti.
Property
Value
Název
Objektu ListObject
Popisek
Objektu ListObject
Přidání ovládacích prvků do listu
Spravované ovládací prvky lze přidat pouze hostitel položek, které fungují jako kontejnery.Protože doplněk projekty pracovat libovolný otevřený sešit,-v listu převede položku hostitele nebo získá existující položku hostitele před přidáním ovládacího prvku.Přidejte kód do obslužné rutiny události klepněte na tlačítko Generovat každého ovládacího prvku Worksheet hostitel položky založené na otevřený list.Pak přidejte Button, NamedRangea ListObject na aktuální výběr v listu.
Přidání ovládacích prvků do listu
V Návrháři pásu karet, poklepejte na tlačítko.
Click Obslužné rutiny tlačítko políčko otevře Editor kódu.
Nahradit Button_Click obslužnou rutinu následujícím kódem.
Tento kód používá GetVstoObject metoda získat položku hostitele, který představuje první list sešitu a potom přidá Button řízení aktuálně vybranou buňku.
Private Sub Button_Click(ByVal sender As System.Object, _ ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _ Handles Button.Click Dim NativeWorksheet As Microsoft.Office.Interop.Excel.Worksheet = Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1) Dim worksheet As Microsoft.Office.Tools.Excel.Worksheet = Globals.Factory.GetVstoObject(NativeWorksheet) 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 = Globals.Factory.GetVstoObject( Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]); 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); } }
V Průzkumníku, vyberte Ribbon1.cs nebo Ribbon1.vb.
Na zobrazení nabídky, klepněte na Designer.
V Návrháři pásu karet, poklepejte na NamedRange.
Nahradit NamedRange_Click obslužnou rutinu následujícím kódem.
Tento kód používá GetVstoObject metoda získat položku hostitele, který představuje první list sešitu a potom definuje NamedRange ovládací prvek pro aktuálně vybranou buňku nebo buňky.
Private Sub NamedRange_Click(ByVal sender As System.Object, _ ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _ Handles NamedRange.Click Dim NativeWorksheet As Microsoft.Office.Interop.Excel.Worksheet = Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1) Dim worksheet As Microsoft.Office.Tools.Excel.Worksheet = Globals.Factory.GetVstoObject(NativeWorksheet) 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 = Globals.Factory.GetVstoObject( Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]); 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); } }
V Návrháři pásu karet, poklepejte na objektu ListObject.
Nahradit ListObject_Click obslužnou rutinu následujícím kódem.
Tento kód používá GetVstoObject metoda získat položku hostitele, který představuje první list sešitu a potom definuje ListObject pro aktuálně vybranou buňku nebo buňky.
Private Sub ListObject_Click(ByVal sender As System.Object, _ ByVal e As Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) _ Handles ListObject.Click Dim NativeWorksheet As Microsoft.Office.Interop.Excel.Worksheet = Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets(1) Dim worksheet As Microsoft.Office.Tools.Excel.Worksheet = Globals.Factory.GetVstoObject(NativeWorksheet) 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 = Globals.Factory.GetVstoObject( Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets[1]); 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); } }
Přidejte následující příkazy na začátek souboru kódu pásu karet.
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;
Odebrání ovládacích prvků z listu
Ovládací prvky nejsou trvalé při uložení a zavření listu.Generované ovládací prvky model Windows Forms byste měli odebrat programově před list uložen nebo pouze obrysy ovládacího prvku se zobrazí při otevření sešitu znovu.Přidejte kód WorkbookBeforeSave události, která odebere z kolekce ovládacích prvků položky generované hostitele model Windows Forms prvky.Další informace naleznete v tématu Uchování dynamických ovládacích prvků v dokumentech systému Office.
Chcete-li odebrat ovládací prvky z listu
V Průzkumníku, vyberte ThisAddIn.cs nebo ThisAddIn.vb.
V menu Zobrazit klikněte na příkaz Kód.
Přidejte následující metodu třídy ThisAddIn.Tento kód získá první list v sešitu a potom použije HasVstoObject metoda zkontrolujte, zda objekt generované listu listu.Pokud má objekt listu generovaných ovládacích prvků, kód získá objektu listu a prochází kolekci ovládacích prvků, odebrání ovládacích prvků.
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 Globals.Factory.HasVstoObject(worksheet) And Globals.Factory.GetVstoObject(worksheet).Controls.Count > 0 Then Dim vstoWorksheet As Worksheet = Globals.Factory.GetVstoObject(worksheet) 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 (Globals.Factory.HasVstoObject(worksheet) && Globals.Factory.GetVstoObject(worksheet).Controls.Count > 0) { Worksheet vstoWorksheet = Globals.Factory.GetVstoObject(worksheet); while (vstoWorksheet.Controls.Count > 0) { object vstoControl = vstoWorksheet.Controls[0]; vstoWorksheet.Controls.Remove(vstoControl); } } }
V jazyce C#, je nutné vytvořit obslužnou rutinu události WorkbookBeforeSave události.Tento kód můžete umístit ThisAddIn_Startup metoda.Další informace o vytváření obslužných rutin událostí, viz Postupy: Vytváření obslužných rutin událostí v projektech pro systém Office.Nahradit ThisAddIn_Startup metodu následujícím kódem.
private void ThisAddIn_Startup(object sender, System.EventArgs e) { this.Application.WorkbookBeforeSave += new Microsoft.Office.Interop.Excel.AppEvents_WorkbookBeforeSaveEventHandler (Application_WorkbookBeforeSave); }
Testování řešení
Přidání ovládacích prvků do listu výběrem z vlastní kartu na pásu karet.Při uložení listu tyto ovládací prvky jsou odebrány.
Test řešení.
Stisknutím klávesy F5 spustit projektu.
Vyberte jakoukoli buňku v listu List1.
Klepněte Doplňky kartu.
V skupina1 skupinu, klepněte na tlačítko.
Tlačítko se zobrazí ve vybrané buňce.
Vyberte jiné buňky v listu List1.
V skupina1 skupinu, klepněte na NamedRange.
Pojmenovanou oblast je definována pro vybrané buňky.
Vyberte řadu buněk v listu List1.
V skupina1 skupinu, klepněte na objektu ListObject.
U vybraných buněk je přidán objekt seznamu.
Uložení listu.
Zobrazí se ovládací prvky, které jste přidali již List1.
Další kroky
Další informace o ovládacích prvcích v aplikaci Excel doplněk projekty z tohoto tématu:
- Informace o ukládání ovládacích prvků do listu naleznete v tématu aplikace Excel doplněk dynamické ovládací prvky vzorku v Ukázky a návody k vývoji pro systém Office.
Viz také
Koncepty
Přehled ovládacích prvků Windows Forms v dokumentech Office