Sdílet prostřednictvím


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:

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

  1. 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.

  2. 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

  1. V nabídce Projekt klikněte na příkaz Přidat novou položku.

  2. 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.

  3. Z Ovládací prvky pásu karet Office kartě nástrojů, přetáhněte ovládací prvek CheckBox do skupina1.

  4. Klepněte na CheckBox1 jej vyberte.

  5. V Vlastnosti okna, změnit následující vlastnosti.

    Property

    Value

    Název

    Tlačítko

    Popisek

    Tlačítko

  6. 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

  7. 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

  1. V Návrháři pásu karet, poklepejte na tlačítko.

    Click Obslužné rutiny tlačítko políčko otevře Editor kódu.

  2. 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);
        }
    }
    
  3. V Průzkumníku, vyberte Ribbon1.cs nebo Ribbon1.vb.

  4. Na zobrazení nabídky, klepněte na Designer.

  5. V Návrháři pásu karet, poklepejte na NamedRange.

  6. 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);
        }
    }
    
  7. V Návrháři pásu karet, poklepejte na objektu ListObject.

  8. 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);
        }
    }
    
  9. 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

  1. V Průzkumníku, vyberte ThisAddIn.cs nebo ThisAddIn.vb.

  2. V menu Zobrazit klikněte na příkaz Kód.

  3. 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);
            }
    
        }
    }
    
  4. 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í.

  1. Stisknutím klávesy F5 spustit projektu.

  2. Vyberte jakoukoli buňku v listu List1.

  3. Klepněte Doplňky kartu.

  4. V skupina1 skupinu, klepněte na tlačítko.

    Tlačítko se zobrazí ve vybrané buňce.

  5. Vyberte jiné buňky v listu List1.

  6. V skupina1 skupinu, klepněte na NamedRange.

    Pojmenovanou oblast je definována pro vybrané buňky.

  7. Vyberte řadu buněk v listu List1.

  8. V skupina1 skupinu, klepněte na objektu ListObject.

    U vybraných buněk je přidán objekt seznamu.

  9. 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:

Viz také

Koncepty

Přehled ovládacích prvků Windows Forms v dokumentech Office

NamedRange – ovládací prvek

ListObject – ovládací prvek

Další zdroje

Řešení pro aplikaci Excel

Ovládací prvky v dokumentech Office