VSTO 3.0: Aggiungere un controllo personalizzato in Word tramite Visua

In questo articolo, vedremo l'utilizzo di Visual Studio tools for office per Microsoft Office Word 2007.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

Introduzione

In questo articolo vedremo la programmazione Microsoft Office 2007 tramite Visual Studio Tools Office 3.0 per la versione 2008 di Visual Studio.

In particolare in questo articolo vedremo come aggiungere un controllo personalizzato in Microsoft Word 2007, per la formattazione del testo. Il controllo personalizzato avrà il compito di impostare il testo nel documento con la formattazione di tipo grassetto, corsivo o di colore blue.

Aggiunta del controllo.

Si crea un nuovo progetto per office, dopo aver selezionati il linguaggio di proprio interesse, selezionare nella tipologia di progetto, office e la sottovoce 2007, nella finestra dei modelli di Visual Studio 2008, selezionate il modello denominato “Documento di Word 2007” a questo punto fate click sul pulsante ok di tale finestra, verrà aperta una nuova finestra che chiede se creare un nuovo documento o utilizzare uno esistente, nel nostro caso si crea un nuovo documento, mentre per la voce formato lasciamo documento di word (*.docx). 

A questo punto viene aperto l’ambiente di sviluppo con l’interfaccia simile ad un documento Word, dal menu di scelta rapida (tasto destro del mouse sul nome della soluzione appena creata) selezionare la  voce di menu “controllo utente”, situata sotto la voce “aggiungi”. (figura 1).

 

 

Figura 1

Verrà aperta una finestra, (figura 2) in cui è possibile impostare il nome del controllo utente (es. UserFormattazione), dopo aver impostato il nome fate click sul pulsante aggiungi di tale finestra, a questo punto verrà inserito nel progetto un usercontrol. Inserite tre controlli checkbox, ed impostate la proprietà “Name” uno con il valore “chkgrassetto”, uno con il valore “chkcorsivo” e l’ultimo con il valore “chkcolore”, mentre per la proprietà text, impostate per il primo il valore “Grassetto”, il secondo con il valore “Corsivo” ed il terzo con il valore “blue”, l’aspetto del controllo dev’essere simile a quello mostrato in figura 3.

 

 

Figura 2

 

 

Figura 3

 

Stesura codice.

Dopo aver predisposto con le dovute formattazione il nostro user control, facciamo doppio click sul primo controllo checkbox, denominato (chkgrassetto), in questo modo passiamo in visualizzazione codice, e più precisamente nell’evento CheckedChanged del controllo selezionato.

Questo evento, viene eseguito nel momento in cui si fa click sul controllo checkbox, sia per mettere o togliere la spunta dalla casella. In tale evento inseriamo il codice che permette di impostare il testo (in modo graduale) in grassetto. In particolare tramite la sotto proprietà font della proprietà Characters impostiamo le dovute formattazioni al testo, in questo caso in grassetto tramite la proprietà bold.  Il codice dev’essere simile a quello riportato qui di seguito.

 

 

VB.Net

'verifico che il checkbox è sputanto in questo caso rendo il testo (i primi 5 caratteri) in grassetto

        If chkGrassetto.Checked = True Then

            Globals.ThisDocument.ActiveWindow.Document.Characters(1).Font.Bold = True

            Globals.ThisDocument.ActiveWindow.Document.Characters(2).Font.Bold = True

            Globals.ThisDocument.ActiveWindow.Document.Characters(3).Font.Bold = True

            Globals.ThisDocument.ActiveWindow.Document.Characters(4).Font.Bold = True

            Globals.ThisDocument.ActiveWindow.Document.Characters(5).Font.Bold = True

        Else 'tolgo il grassetto dal testo

            Globals.ThisDocument.ActiveWindow.Document.Characters(1).Font.Bold = False

            Globals.ThisDocument.ActiveWindow.Document.Characters(2).Font.Bold = False

            Globals.ThisDocument.ActiveWindow.Document.Characters(3).Font.Bold = False

            Globals.ThisDocument.ActiveWindow.Document.Characters(4).Font.Bold = False

            Globals.ThisDocument.ActiveWindow.Document.Characters(5).Font.Bold = False

        End If

C#

//verifico che il checkbox è sputanto in questo caso rendo il testo (i primi 5 caratteri) in grassetto

          

if (chkgrassetto.Checked  ==  true )

            {

                Globals.ThisDocument.Characters[1].Font.Bold = 1;

                Globals.ThisDocument.Characters[2].Font.Bold = 1;

                Globals.ThisDocument.Characters[3].Font.Bold = 1;

                Globals.ThisDocument.Characters[4].Font.Bold = 1;

                Globals.ThisDocument.Characters[5].Font.Bold = 1;

            }

            else //tolgo il grassetto dal testo

            {

                Globals.ThisDocument.Characters[1].Font.Bold = 0;

                Globals.ThisDocument.Characters[2].Font.Bold = 0;

                Globals.ThisDocument.Characters[3].Font.Bold = 0;

                Globals.ThisDocument.Characters[4].Font.Bold = 0;

                Globals.ThisDocument.Characters[5].Font.Bold = 0;

            }

 

 

Ritorniamo in modalità designer, e facciamo doppio click sul secondo controllo checkbox, quello per la formattazione in corsivo denominato chkCorsivo. Impostando la sotto proprietà Italic, della proprietà font, con il valore true, possiamo rendere il testo in corsivo.

Di seguito si riporta il frammento di codice, per tale scopo.

 

 

VB.Net

'Verifico che il controllo  è sputanto in questo caso applicato il corsivo

        If chkCorsivo.Checked = True Then

            Globals.ThisDocument.ActiveWindow.Document.Characters(1).Font.Italic = True

            Globals.ThisDocument.ActiveWindow.Document.Characters(2).Font.Italic = True

            Globals.ThisDocument.ActiveWindow.Document.Characters(3).Font.Italic = True

            Globals.ThisDocument.ActiveWindow.Document.Characters(4).Font.Italic = True

            Globals.ThisDocument.ActiveWindow.Document.Characters(5).Font.Italic = True

        Else 'tolgo al testo la modalità corsivo

            Globals.ThisDocument.ActiveWindow.Document.Characters(1).Font.Italic = False

            Globals.ThisDocument.ActiveWindow.Document.Characters(2).Font.Italic = False

            Globals.ThisDocument.ActiveWindow.Document.Characters(3).Font.Italic = False

            Globals.ThisDocument.ActiveWindow.Document.Characters(4).Font.Italic = False

            Globals.ThisDocument.ActiveWindow.Document.Characters(5).Font.Italic = False

        End If

C#

 //Verifico che il controllo  è sputanto in questo caso applicato il corsivo

            if (chkcorsivo.Checked == true  )

            {

                Globals.ThisDocument.Characters[1].Font.Italic = 1;

                Globals.ThisDocument.Characters[2].Font.Italic = 1;

                Globals.ThisDocument.Characters[3].Font.Italic = 1;

                Globals.ThisDocument.Characters[4].Font.Italic = 1;

                Globals.ThisDocument.Characters[5].Font.Italic = 1;

            }

            else //tolgo al testo la modalità corsivo

            {

                Globals.ThisDocument.Characters[1].Font.Italic = 0;

                Globals.ThisDocument.Characters[2].Font.Italic = 0;

                Globals.ThisDocument.Characters[3].Font.Italic = 0;

                Globals.ThisDocument.Characters[4].Font.Italic = 0;

                Globals.ThisDocument.Characters[5].Font.Italic = 0;

            }

 

Ritorniamo in visualizzazione designer, e facciamo doppio click sul terzo ed ultimo controllo checkbox, denominato chkcolore quello per l’impostazione del colore del testo.

Tramite la sotto proprietà Color della proprietà Font, possiamo impostare il colore del carattere. Di seguito si riporta un esempio di codice per impostare i primi 5 carattere di colore blue.

 

 

VB.Net

'verico che il controllo è spuntato in tal caso imposto il colore della frase in blue

        If chkcolore.Checked = True Then

            Globals.ThisDocument.ActiveWindow.Document.Characters(1).Font.Color = Word.WdColor.wdColorBlue

            Globals.ThisDocument.ActiveWindow.Document.Characters(2).Font.Color = Word.WdColor.wdColorBlue

            Globals.ThisDocument.ActiveWindow.Document.Characters(3).Font.Color = Word.WdColor.wdColorBlue

            Globals.ThisDocument.ActiveWindow.Document.Characters(4).Font.Color = Word.WdColor.wdColorBlue

            Globals.ThisDocument.ActiveWindow.Document.Characters(5).Font.Color = Word.WdColor.wdColorBlue

        Else 'imposto il colore della frase nel colore normale se non è spuntato il checkbox per il colore

            Globals.ThisDocument.ActiveWindow.Document.Characters(1).Font.Color = Word.WdColor.wdColorAutomatic

            Globals.ThisDocument.ActiveWindow.Document.Characters(2).Font.Color = Word.WdColor.wdColorAutomatic

            Globals.ThisDocument.ActiveWindow.Document.Characters(3).Font.Color = Word.WdColor.wdColorAutomatic

            Globals.ThisDocument.ActiveWindow.Document.Characters(4).Font.Color = Word.WdColor.wdColorAutomatic

            Globals.ThisDocument.ActiveWindow.Document.Characters(5).Font.Color = Word.WdColor.wdColorAutomatic

        End If

 

C#

  //verico che il controllo è spuntato in tal caso imposto il colore della frase in blue

            if (chkcolore.Checked == true)

            {

                Globals.ThisDocument.Characters[1].Font.Color = Microsoft.Office.Interop.Word.WdColor.wdColorBlue ;

                Globals.ThisDocument.Characters[2].Font.Color = Microsoft.Office.Interop.Word.WdColor.wdColorBlue;

                Globals.ThisDocument.Characters[3].Font.Color = Microsoft.Office.Interop.Word.WdColor.wdColorBlue;

                Globals.ThisDocument.Characters[4].Font.Color = Microsoft.Office.Interop.Word.WdColor.wdColorBlue;

                Globals.ThisDocument.Characters[5].Font.Color = Microsoft.Office.Interop.Word.WdColor.wdColorBlue;

            }

            else //imposto il colore della frase nel colore normale se non è spuntato il checkbox per il colore

            {

                Globals.ThisDocument.Characters[1].Font.Color = Microsoft.Office.Interop.Word.WdColor.wdColorAutomatic;

                Globals.ThisDocument.Characters[2].Font.Color = Microsoft.Office.Interop.Word.WdColor.wdColorAutomatic;

                Globals.ThisDocument.Characters[3].Font.Color = Microsoft.Office.Interop.Word.WdColor.wdColorAutomatic;

                Globals.ThisDocument.Characters[4].Font.Color = Microsoft.Office.Interop.Word.WdColor.wdColorAutomatic;

                Globals.ThisDocument.Characters[5].Font.Color = Microsoft.Office.Interop.Word.WdColor.wdColorAutomatic;

            }

 

 

A questo punto una volta scritto il codice, occorre compilare, dal menu compila selezioniamo la voce di menu compila soluzione, se apriamo il progetto VSTO, ossia in visualizzazione Word  troviamo nella barra degli strumenti il nostro usercontrol appena creato,  come mostrato in figura 4.

 

Figura 4

Esecuzione del codice

A questo punto occorre verificare ed eseguire il nostro progetto, restando in visualizzazione Word,  trascianiamo dalla barra degli strumenti, il nostro user controllo (figura 4)  .

Fatto ciò, tramite il menu  debug selezioniamo la voce avvia debug oppure direttamente il pulsante F5 della tastiera, verrà aperto un documento Microsoft Word con il controllo personalizzato, digitiamo qualche frase e facciamo click nei vari checkbox, vedremo cambiare la formattazione del testo.

Conclusioni

In questo articolo, abbiamo visto come inserire in un progetto per  Microsoft Office 2007  un controllo personalizzato, un semplice controllo per la formattazione del testo. L’articolo ha voluto introdurre il lettore alla creazione di controlli personalizzati in ambiente Microsoft Office 2007, i controlli personalizzati possono aiutare il programmatore ad ampliare la vasta gamma della classi e controlli forniti da VSTO 3.0.  L'utilizzo di usercontrollo, amplia le possibilità di sviuppo in ambiente Office

Tramite la parola download è possibile scaricare il file di esempio.

Download