Dela via


Lägg till kontroller i Office-dokument under körning

Du kan lägga till kontroller i ett Microsoft Office Word-dokument och en Microsoft Office Excel-arbetsbok under körning. Du kan också ta bort dem vid körning. Kontroller som du lägger till eller tar bort vid körning kallas dynamiska kontroller.

Gäller för: Informationen i det här avsnittet gäller för projekt på dokumentnivå och VSTO-tilläggsprojekt för Excel och Word. Mer information finns i Funktioner som är tillgängliga efter Office-program och projekttyp.

I det här avsnittet beskrivs följande:

Hantera kontroller vid körning med hjälp av kontrollsamlingar

Om du vill lägga till, hämta eller ta bort kontroller vid körning använder du hjälpmetoder för ControlCollection och ControlCollection objekt.

Hur du kommer åt dessa objekt beror på vilken typ av projekt du utvecklar:

Lägga till kontroller

Typerna ControlCollection och ControlCollection innehåller hjälpmetoder som du kan använda för att lägga till värdkontroller och vanliga Windows Forms-kontroller i dokument och kalkylblad. Varje metodnamn har Add, där kontrollklassen är klassnamnet för den kontroll som du vill lägga till. Om du till exempel vill lägga till en NamedRange kontroll i dokumentet använder du AddNamedRange metoden .

I följande kodexempel läggs ett NamedRange till Sheet1 i ett projekt på dokumentnivå för Excel.

Excel.Range range1 = Globals.Sheet1.Range["A1", "D5"];
Microsoft.Office.Tools.Excel.NamedRange namedRange1 =
    Globals.Sheet1.Controls.AddNamedRange(range1, "ChartSource");

Åtkomst- och borttagningskontroller

Du kan använda Controls egenskapen för en Worksheet eller Document för att iterera genom alla kontroller i dokumentet, inklusive de kontroller som du lade till vid designtillfället. Kontroller som du lägger till vid designtillfället kallas även statiska kontroller.

Du kan ta bort dynamiska kontroller genom att anropa Delete kontrollens metod eller genom att anropa metoden för Remove varje controls-samling. I följande kodexempel används Remove metoden för att ta bort en NamedRange från Sheet1 i ett projekt på dokumentnivå för Excel.

Globals.Sheet1.Controls.Remove("ChartSource");

Du kan inte ta bort statiska kontroller vid körning. Om du försöker använda Delete metoden eller Remove för att ta bort en statisk kontroll genereras en CannotRemoveControlException .

Anmärkning

Ta inte bort kontroller programmatiskt i Shutdown dokumentets händelsehanterare. Användargränssnittselementen i dokumentet är inte längre tillgängliga när händelsen Shutdown aktiveras. Om du vill ta bort kontroller innan dokumentet stängs lägger du till koden i händelsehanteraren för en annan händelse, till exempel BeforeClose eller BeforeSave för Word eller BeforeClose, eller BeforeSave för Excel.

Lägga till värdkontroller i dokument

När du programmatiskt lägger till värdkontroller i dokument måste du ange ett namn som unikt identifierar kontrollen och du måste ange var kontrollen ska läggas till i dokumentet. Specifika anvisningar finns i följande avsnitt:

Mer information om värdkontroller finns i Översikt över värdobjekt och värdkontroller.

När ett dokument sparas och sedan stängs, kopplas alla dynamiskt skapade värdkontroller från händelserna och förlorar sin databindningsfunktion. Du kan lägga till kod i lösningen för att återskapa värdkontrollerna när dokumentet öppnas igen. Mer information finns i Spara dynamiska kontroller i Office-dokument.

Anmärkning

Hjälpmetoder tillhandahålls inte för följande värdkontroller eftersom dessa kontroller inte kan läggas till programmatiskt i dokument: XmlMappedRange, XMLNodeoch XMLNodes.

Lägga till Windows Forms-kontroller i dokument

När du programmatiskt lägger till en Windows Forms-kontroll i ett dokument måste du ange platsen för kontrollen och ett namn som unikt identifierar kontrollen. Visual Studio Tools för Office runtime-miljö innehåller hjälpmetoder för varje kontroll. Dessa metoder är överbelastade så att du kan skicka antingen ett intervall eller specifika koordinater för kontrollens plats.

När ett dokument sparas och stängs tas alla dynamiskt skapade Windows Forms-kontroller bort från dokumentet. Du kan lägga till kod i lösningen för att återskapa kontrollerna när dokumentet öppnas igen. Om du skapar dynamiska Windows Forms-kontroller med hjälp av ett VSTO-tillägg finns ActiveX-omslutningarna för kontrollerna kvar i dokumentet. Mer information finns i Spara dynamiska kontroller i Office-dokument.

Anmärkning

Windows Forms-kontroller kan inte läggas till programmatiskt i skyddade dokument. Om du programmatiskt tar bort skyddet av ett Word-dokument eller Excel-kalkylblad för att lägga till en kontroll måste du skriva ytterligare kod för att ta bort kontrollens ActiveX-omslutning när dokumentet stängs. Kontrollens ActiveX-omslutning tas inte bort automatiskt från skyddade dokument.

Lägga till anpassade kontroller

Om du vill lägga till en Control som inte stöds av tillgängliga hjälpmetoder, till exempel en anpassad användarkontroll, använder du följande metoder:

  • I Excel använder du någon av metoderna för ett ControlCollection-objekt AddControl.

  • För Word använder du någon av AddControl metoderna för ett ControlCollection-objekt.

    För att lägga till kontrollen skickar du Control, en plats för kontrollen och ett namn som unikt identifierar kontrollen till AddControl-metoden. Metoden AddControl returnerar ett objekt som definierar hur kontrollen interagerar med kalkylbladet eller dokumentet. Metoden AddControl returnerar ett ControlSite (för Excel) eller ett ControlSite objekt (för Word).

    Följande kodexempel visar hur du använder AddControl metoden för att dynamiskt lägga till en anpassad användarkontroll i ett kalkylblad i ett Excel-projekt på dokumentnivå. I det här exemplet heter användarkontrollen UserControl1, och Range heter range1. Om du vill använda det här exemplet kör du det från en Sheetn-klass i projektet.

    UserControl1 customControl = new UserControl1();
    
    Microsoft.Office.Tools.Excel.ControlSite dynamicControl =
        this.Controls.AddControl(customControl, range1, "dynamic");
    

Använda medlemmar i anpassade kontroller

När du har använt någon av AddControl metoderna för att lägga till en kontroll i ett kalkylblad eller dokument har du nu två olika kontrollobjekt:

  • Det Control som representerar den anpassade kontrollen.

  • Objektet ControlSite, OLEObjecteller OLEControl som representerar kontrollen efter att den har lagts till i kalkylbladet eller dokumentet.

    Många egenskaper och metoder delas mellan dessa kontroller. Det är viktigt att du får åtkomst till dessa medlemmar via rätt kontroll:

  • Om du vill komma åt medlemmar som bara tillhör den anpassade kontrollen använder du Control.

  • Om du vill komma åt medlemmar som delas av kontrollerna använder du ControlSiteobjektet , OLEObjecteller OLEControl .

    Om du får åtkomst till en delad medlem från Controlkan det misslyckas utan varning eller meddelande, eller så kan det ge ogiltiga resultat. Använd alltid metoder eller egenskaper för ControlSiteobjektet , OLEObject, eller OLEControl såvida inte den metod eller egenskap som behövs inte är tillgänglig. Endast då bör du referera till Control.

    Till exempel har både ControlSite klassen och Control klassen en Top egenskap. Om du vill hämta eller ange avståndet mellan kontrollens överkant och överkanten av dokumentet använder du egenskapen TopControlSite, inte egenskapen TopControl.

    // Property is set in relation to the document.
    dynamicControl.Top = 100;
    
    // Property is set in relation to the container control.
    customControl.Top = 100;