Share via


Aggiunta di controlli ai documenti di Office in fase di esecuzione

È possibile aggiungere i controlli a un documento Microsoft Office Word e a una cartella di lavoro Microsoft Office Excel 2003 e rimuoverli, in fase di esecuzione. I controlli aggiunti ai documenti in fase di esecuzione sono noti come controlli dinamici.

Si applica a: le informazioni fornite in questo argomento sono valide per i progetti a livello di documento e di applicazione per Excel 2007, Excel 2010, Word 2007 e Word 2010. Per ulteriori informazioni, vedere Funzionalità disponibili in base ai tipi di progetto e applicazioni di Office.

In questo argomento vengono fornite le seguenti informazioni:

  • Gestione dei controlli in fase di esecuzione utilizzando gli insiemi di controllo

  • Aggiunta di controlli host ai documenti

  • Aggiunta di controlli Windows Form ai documenti

Collegamento a video Per una dimostrazione video correlata, vedere l'argomento relativo alla procedura di aggiunta di colonne all'area di un documento in fase di esecuzione (la pagina potrebbe essere in inglese).

Gestione dei controlli in fase di esecuzione utilizzando gli insiemi di controllo

Per aggiungere, ottenere o rimuovere i controlli in fase di esecuzione, utilizzare i metodi di supporto degli oggetti Microsoft.Office.Tools.Excel.ControlCollection e Microsoft.Office.Tools.Word.ControlCollection.

La modalità di accesso a questi oggetti dipende dal tipo di progetto che si sta sviluppando:

Aggiunta di controlli

I tipi Microsoft.Office.Tools.Excel.ControlCollection e Microsoft.Office.Tools.Word.ControlCollection includono metodi di supporto utilizzabili per aggiungere a documenti e fogli di lavoro controlli host e controlli Windows Form comuni. Il formato del nome del metodo è Add<classe del controllo>, in cui classe del controllo è il nome della classe del controllo da aggiungere. Ad esempio, per aggiungere un controllo NamedRange al documento, utilizzare il metodo AddNamedRange. Per un elenco completo dei metodi di supporto, vedere Metodi di supporto per i controlli host e Metodi di supporto per i controlli Windows Form.

Nell'esempio di codice seguente viene aggiunto un controllo NamedRange a un oggetto Sheet1 di un progetto a livello di documento per Excel.

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

Accesso ai controlli e relativa eliminazione

È possibile utilizzare la proprietà Controls di un oggetto Microsoft.Office.Tools.Excel.Worksheet o Microsoft.Office.Tools.Word.Document per scorrere tutti i controlli nel documento, compresi i controlli aggiunti in fase di progettazione. Questi controlli sono anche noti come controlli statici.

Per rimuovere i controlli dinamici è possibile chiamare il metodo Delete del controllo oppure il metodo Remove di ogni insieme Controls. Nell'esempio di codice seguente, il metodo Remove viene utilizzato per rimuovere un controllo NamedRange dall'oggetto Sheet1 di un progetto a livello di documento per Excel.

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

I controlli statici non possono essere rimossi in fase di esecuzione. Se si tenta di utilizzare il metodo Delete o il metodo Remove per rimuovere un controllo statico, verrà generata un'eccezione CannotRemoveControlException.

Nota

Non rimuovere a livello di codice i controlli nel gestore eventi Shutdown del documento: gli elementi di interfaccia utente del documento non sono più disponibili quando viene generato l'evento Shutdown. Se si desidera rimuovere i controlli prima della chiusura del documento, aggiungere il codice al gestore eventi per un altro evento, ad esempio Document.BeforeClose o Document.BeforeSave per Word oppure Workbook.BeforeClose o Workbook.BeforeSave per Excel.

Aggiunta di controlli host ai documenti

Quando si aggiunge a livello di codice un controllo host a un documento è necessario specificare un nome che identifichi il controllo in modo univoco nonché la posizione del documento in cui aggiungere il controllo. Per istruzioni specifiche, vedere gli argomenti seguenti:

Per ulteriori informazioni sui controlli host, vedere Cenni preliminari sugli elementi e sui controlli host.

Quando si salva e si chiude un documento, tutti i controlli host creati dinamicamente vengono disconnessi dai relativi eventi e perdono le proprie funzionalità di associazione dati. È possibile aggiungere codice alla soluzione per ricreare i controlli host quando il documento viene riaperto. Per ulteriori informazioni, vedere la classe Persistenza dei controlli dinamici nei documenti di Office.

Nota

I controlli host XmlMappedRange, XMLNode e XMLNodes non possono essere aggiunti a livello di codice ai documenti. Di conseguenza, per tali controlli non viene fornito alcun metodo di supporto.

Aggiunta di controlli Windows Form ai documenti

Quando si aggiunge a livello di codice un controllo Windows Form a un documento, è necessario fornire il percorso del controllo e un nome che lo identifichi in modo univoco. Runtime di Visual Studio Tools per Office fornisce metodi di supporto per ogni controllo. Tali metodi vengono sottoposti a overload per consentire il passaggio di un intervallo o di coordinate specifiche per la posizione del controllo. Per istruzioni specifiche, vedere Procedura: aggiungere controlli Windows Form a documenti di Office.

Quando si salva e si chiude un documento, tutti i controlli Windows Form creati dinamicamente vengono rimossi dal documento. È possibile aggiungere codice alla soluzione per ricreare i controlli quando il documento viene riaperto. Se si creano controlli Windows Form dinamici tramite un componente aggiuntivo a livello di applicazione, i wrapper ActiveX dei controlli rimangono nel documento. Per ulteriori informazioni, vedere la classe Persistenza dei controlli dinamici nei documenti di Office.

Nota

I controlli Windows Form non possono essere aggiunti a documenti protetti a livello di codice. Per rimuovere a livello di codice la protezione di un documento di Word o di un foglio di lavoro di Excel allo scopo di aggiungere un controllo, è necessario scrivere codice aggiuntivo per rimuovere il wrapper ActiveX del controllo alla chiusura del documento. Il wrapper ActiveX del controllo non viene eliminato automaticamente dai documenti protetti.

Aggiunta di controlli personalizzati

Se si desidera aggiungere un controllo System.Windows.Forms.Control non supportato dai metodi di supporto disponibili (ad esempio, un controllo utente personalizzato), utilizzare i metodi seguenti:

Per aggiungere il controllo, passare il controllo System.Windows.Forms.Control, la posizione del controllo e un nome che lo identifichi in modo univoco al metodo AddControl. Il metodo AddControl restituisce un oggetto che definisce la modalità di interazione del controllo con il foglio di lavoro o il documento. Il tipo dell'oggetto restituito dipende dal progetto:

  • Per i progetti destinati a .NET Framework 4, questo metodo restituisce un oggetto Microsoft.Office.Tools.Excel.ControlSite (per Excel) o un oggetto Microsoft.Office.Tools.Word.ControlSite (per Word).

  • Per i progetti destinati a .NET Framework 3.5, questo metodo restituisce un oggetto Microsoft.Office.Tools.Excel.OLEObject (per Excel) o un oggetto Microsoft.Office.Tools.Word.OLEControl (per Word).

Nell'esempio di codice seguente viene illustrato come utilizzare il metodo AddControl(Control, Range, String) per aggiungere in modo dinamico un controllo utente personalizzato a un foglio di lavoro in un progetto di Excel a livello di documento destinato a .NET Framework 4. In questo esempio, il controllo utente denominato UserControl1 e l'oggetto Range è denominato range1. Per utilizzare questo esempio, eseguirlo dalla classe Sheetn nel progetto.

Dim customControl As New UserControl1()

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

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

Utilizzo dei membri di controlli personalizzati

Dopo aver utilizzato uno dei metodi AddControl per aggiungere un controllo a un foglio di lavoro o a un documento, si dispone di due oggetti controllo diversi:

  • Il controllo System.Windows.Forms.Control che rappresenta il controllo personalizzato.

  • Oggetto ControlSite, OLEObject o OLEControl che rappresenta il controllo dopo l'aggiunta al foglio di lavoro o al documento.

Questi controlli condividono molti metodi e proprietà. È importante accedere a questi membri mediante il controllo appropriato.

  • Per accedere ai membri appartenenti esclusivamente al controllo personalizzato, utilizzare System.Windows.Forms.Control.

  • Per accedere a membri condivisi dai controlli, utilizzare l'oggetto ControlSite, OLEObject o OLEControl.

Se si accede a un membro condiviso da System.Windows.Forms.Control, è possibile che vengano generati risultati non validi oppure che si verifichi un errore senza che vengano visualizzati avvisi o notifiche. Utilizzare sempre i metodi o le proprietà del'oggetto ControlSite, OLEObject o OLEControl a meno che il metodo o la proprietà da utilizzare non sia disponibile; solo in questo caso è opportuno fare riferimento a System.Windows.Forms.Control.

Ad esempio, sia la classe ControlSite che la classe System.Windows.Forms.Control dispongono di una proprietà Top. Per ottenere o impostare la distanza fra la parte superiore del controllo e quella del documento, utilizzare la proprietà Top del controllo ControlSite anziché la proprietà Top del controllo System.Windows.Forms.Control.

' Property is set in relation to the document.
dynamicControl.Top = 100

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

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

Vedere anche

Attività

Procedura: aggiungere controlli ListObject a fogli di lavoro

Procedura: aggiungere controlli NamedRange a fogli di lavoro

Procedura: aggiungere controlli Chart a fogli di lavoro

Procedura: aggiungere controlli del contenuto ai documenti di Word

Procedura: aggiungere controlli segnalibro ai documenti di Word

Procedura: aggiungere controlli Windows Form a documenti di Office

Concetti

Persistenza dei controlli dinamici nei documenti di Office

Metodi di supporto per i controlli host

Metodi di supporto per i controlli Windows Form

Cenni preliminari sui controlli Windows Form nei documenti di Office

Altre risorse

Controlli nei documenti di Office