lunedì 6 ottobre 2008

VSTO 3.0: Aggiungere un controllo personalizzato in Word tramite Visual Studio Tools Office (VB.Net e C#)

Riporto un articolo scritto per il sito iprogrammatori http://www.iprogrammatori.it/articoli/programmazione/art_vsto-30-aggiungere-un-controllo-personal_127.aspx, riguardante la programmazione Office 2007, tramite VSTO


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

Nessun commento: