Procedura: controllare l'editor di codice (Visual Basic)
L'editor di codice di Visual Studio è un editor di testo che supporta servizi di linguaggio quali Visual Basic, Visual C++ e Visual C#. Il testo viene scritto in un buffer visualizzato in un documento di testo. Utilizzando gli oggetti del modello di automazione dell'editor di Visual Studio è possibile modificare il testo nel buffer di testo o nella visualizzazione.
I quattro oggetti principali utilizzati per controllare il testo nell'editor di codice sono:
Nome oggetto |
Descrizione |
---|---|
Utilizzato per modificare il testo nella visualizzazione. L'oggetto TextSelection rappresenta il punto di inserimento o il testo selezionato nel documento visibile. |
|
Una posizione fissa all'interno del buffer di testo. |
|
Simile all'oggetto TextPoint, con la differenza che può essere spostato e utilizzato per modificare il testo all'interno del buffer. |
|
Simile all'oggetto TextPoint, con la differenza che contiene funzionalità aggiuntive per individuare posizioni di testo nello spazio virtuale. |
I due principali oggetti utilizzati per modificare l'editor di codice sono TextSelection e EditPoint2. Le principali differenze tra questi due oggetti sono le seguenti:
L'oggetto TextSelection rappresenta la selezione di testo visibile. Se si modifica la sua posizione, si modifica la selezione all'interno della visualizzazione. Un oggetto EditPoint2 non è collegato ad alcun componente dell'interfaccia utente, per cui la modifica della posizione non comporta la modifica della visualizzazione.
Poiché l'oggetto TextSelection rappresenta la selezione visibile, è presente un solo oggetto TextSelection per documento. In un documento possono essere presenti più oggetti TextSelection, ma tutti farebbero riferimento alla stessa selezione visibile e avrebbero tutti la stessa posizione. Il numero di oggetti EditPoint2 che possono essere presenti è illimitato e tutti possono avere posizioni diverse.
A differenza dei metodi dell'oggetto EditPoint2, quelli dell'oggetto TextSelection sono progettati per avere una corrispondenza uno a uno con le azioni dell'utente. Di conseguenza, alcuni metodi dell'oggetto EditPoint2 consentono di eseguire operazioni non eseguibili con nessun singolo metodo dell'oggetto TextSelection, mentre altri metodi dell'oggetto EditPoint2 offrono una maggiore granularità in termini di funzione rispetto ai metodi dell'oggetto TextSelection. Anche per questo motivo l'oggetto TextSelection contiene un maggior numero di proprietà e di metodi rispetto all'oggetto EditPoint2.
Utilizzando questi oggetti è possibile:
Selezionare, aggiungere, eliminare e spostare testo nel buffer o nella visualizzazione.
Spostare il punto di inserimento all'interno del buffer o della visualizzazione.
Impostare il rientro di testo nel buffer o nella visualizzazione.
Inserire, rimuovere e cercare segnalibri.
Aggiungere o rimuovere testo, spazio incluso.
Individuare o sostituire testo in base a un criterio specifico.
Creare una sezione di struttura nel codice e nel testo.
Ricercare informazioni sul testo, ad esempio la posizione del testo, il bordo superiore e inferiore del documento, gli intervalli di testo selezionati e così via.
Negli esempi di macro riportati di seguito viene illustrato come fare riferimento ai diversi membri del modello di automazione dell'editor e come utilizzarli. Per ulteriori informazioni su come eseguire il codice di esempio, vedere Procedura: compilare ed eseguire gli esempi di codice del modello a oggetti di automazione.
Per ulteriori esempi sull'utilizzo del modello di automazione dell'editor, vedere la macro Controllo ortografia e gli altri esempi disponibili sul sito Web dedicato all'automazione di Visual Studio all'indirizzo https://msdn2.microsoft.com/en-us/vstudio/aa718336.aspx (informazioni in lingua inglese).
Nota
Le finestre di dialogo e i comandi di menu visualizzati potrebbero non corrispondere a quelli descritti nella Guida in quanto dipendono dall'edizione o dalle impostazioni attive. Queste routine sono state sviluppate con le Impostazioni generali per lo sviluppo attive. Per modificare le impostazioni, scegliere Importa/Esporta Impostazioni dal menu Strumenti. Per ulteriori informazioni, vedere Gestione delle impostazioni.
Con l'introduzione di Visualizzazione suddivisa nell'editor HTML di Visual Studio 2008, sono stati aggiunti HTMLWindow3, vsHTMLPanes e vsHTMLViews. La Visualizzazione suddivisa separa gli elementi scheda e visualizzazione della finestra di modifica HTML. Il passaggio alla visualizzazione (Progettazione o Origine) non indica necessariamente il cambio di scheda (Progettazione/Suddivisione/Origine). Se ad esempio si fa clic sulla scheda Dividi, il passaggio tra Progettazione e Origine non comporta il cambiamento di scheda, bensì attiva o disattiva le parti di Progettazione e Origine nella Visualizzazione suddivisa.
Esempio
Esempio di macro per la proprietà ActivePoint. In questo esempio viene illustrato l'utilizzo del metodo StartOfLine, della proprietà DisplayColumn e del metodo EndOfLine. Prima di eseguire questo esempio, aprire un file di codice o un documento di testo in Visual Studio, aggiungervi del testo e selezionarne una parte.
' Macro example for TextSelection.ActivePoint.
'
Sub ActivePointExample()
' Before running this example, open a text document.
Dim objSel As TextSelection = DTE.ActiveDocument.Selection
Dim objActive As VirtualPoint = objSel.ActivePoint
' Collapse the selection to the beginning of the line.
objSel.StartOfLine()
' objActive is "live", tied to the position of the actual
' selection, so it will reflect the new position.
Dim iCol As Long = objActive.DisplayColumn
' Move the selection to the end of the line.
objSel.EndOfLine()
MsgBox("The length of the insertion point line is " & _
(objActive.DisplayColumn - iCol) & " display characters.")
End Sub
Esempio di macro per la proprietà AnchorPoint. In questo esempio viene illustrato l'utilizzo delle proprietà DisplayColumn e Line e dei metodi StartOfDocument e EndOfDocument. Prima di eseguire questo esempio, aprire un file di codice o un documento di testo in Visual Studio, aggiungervi del testo e selezionarne una parte.
' Macro example for TextSelection.AnchorPoint.
'
Sub AnchorPointExample()
' Before running this example, open a text document.
Dim objSel As TextSelection = DTE.ActiveDocument.Selection
Dim objAnchor As VirtualPoint = objSel.AnchorPoint
' objAnchor is "live", tied to the position of the actual
' selection, so it will reflect changes. iCol and iRow are created
' here to save a "snapshot" of the anchor point's position at this
' time.
Dim iCol As Long = objAnchor.DisplayColumn
Dim iRow As Long = objAnchor.Line
' As the selection is extended, the active point moves but the
' anchor point remains in place.
objSel.StartOfDocument(True)
objSel.EndOfDocument(True)
If (iCol = objAnchor.DisplayColumn And iRow = objAnchor.Line) Then
MsgBox("The anchor point has remained in place at row " & _
iRow & ", display column " & iCol)
End If
End Sub
Esempio di macro per la proprietà Insert. In questo esempio viene illustrato l'utilizzo della proprietà IsEmpty, dei metodi WordLeft e WordRight, della proprietà Text e dei metodi Delete e MoveToPoint. Prima di eseguire questo esempio, aprire un file di codice o un documento di testo in Visual Studio e aggiungervi del testo.
' Macro example for TextSelection.Insert.
'
Sub InsertExample()
' Before running this example, open a text document.
Dim objSel As TextSelection = DTE.ActiveDocument.Selection
If objSel.IsEmpty Then
' If there is no text selected, swap the words before and after
' the insertion point. We begin by selecting the word before
' the insertion point.
objSel.WordLeft(True)
If Not objSel.IsEmpty Then
' We can continue only if the selection was not already at
' the beginning of the document.
Dim strBefore As String = objSel.Text
' The text is saved in strBefore; now delete it and move
' past the following word.
objSel.Delete()
objSel.WordRight(True)
If objSel.Text.StartsWith(" ") Or _
objSel.Text.StartsWith(Microsoft.VisualBasic. _
ControlChars.Tab) Then
' The previous call to WordRight may have skipped some
' white space instead of an actual word. In that case,
' we should call it again.
objSel.WordRight(True)
End If
' Insert the new text at the end of the selection.
objSel.Insert(strBefore, _
vsInsertFlags.vsInsertFlagsInsertAtEnd)
End If
Else
' If some text is selected, replace the following word with the
' selected text.
Dim strSelected As String = objSel.Text
objSel.MoveToPoint(objSel.BottomPoint)
objSel.WordRight(True)
If objSel.Text.StartsWith(" ") Or _
objSel.Text.StartsWith(Microsoft.VisualBasic. _
ControlChars.Tab) Then
' The previous call to WordRight may have skipped some
' white space instead of an actual word. In that case, we
' should call it again.
objSel.WordRight(True)
End If
' Insert the text, overwriting the existing text and leaving
' the selection containing the inserted text.
objSel.Insert(strSelected, _
vsInsertFlags.vsInsertFlagsContainNewText)
End If
End Sub
Esempio di macro per la proprietà FindPattern. In questo esempio viene illustrato l'utilizzo del metodo SelectLine. Prima di eseguire questo esempio, è necessario aprire un documento di testo o un file di codice in Visual Studio e aggiungervi del testo.
' Macro example for TextSelection.FindPattern.
'
Sub FindPatternExample()
' Before running this example, open a text document.
Dim objSel As TextSelection = DTE.ActiveDocument.Selection
' Advance to the next Visual Basic function beginning or end by
' searching for "Sub" with white space before and after it.
If objSel.FindPattern(":WhSub:Wh", _
vsFindOptions.vsFindOptionsRegularExpression) Then
' Select the entire line.
objSel.SelectLine()
End If
End Sub
Esempio di macro per la proprietà OutlineSection. In questo esempio viene inoltre illustrato come utilizzare il metodo StartOfDocument, le proprietà Line e LineCharOffset e i metodi FindPattern, SwapAnchor, MoveToLineAndOffset e LineDown. Prima di eseguire questo esempio, aprire un documento di codice in Visual Studio contenente un blocco #if _DEBUG…#endif.
' Macro example for TextSelection.OutlineSection.
'
Sub OutlineSectionExample()
' Before running this example, open a code document
' containing a #if _DEBUG…#endif block.
Dim objSel As TextSelection = DTE.ActiveDocument.Selection
' Move to the beginning of the document so we can iterate over the
' whole thing.
objSel.StartOfDocument()
While objSel.FindPattern("#if _DEBUG")
' If we found the beginning of a debug-only section, save the
' position.
Dim lStartLine As Long = objSel.TopPoint.Line
Dim lStartColumn As Long = objSel.TopPoint.LineCharOffset
' Look for the end.
If objSel.FindPattern("#endif") Then
' Select the entire section and outline it.
objSel.SwapAnchor()
objSel.MoveToLineAndOffset(lStartLine, lStartColumn, True)
objSel.OutlineSection()
objSel.LineDown()
End If
End While
End Sub
Nell'esempio di macro viene aperto un documento di testo e viene generato un elenco di tutti i comandi disponibili in quel documento.
' Macro example
' This generates a text document listing all available command names.
Sub CommandNamesCollapseExample()
Dim Cmd As Command
Dim Commands As Commands = DTE.Commands
Dim PrjItem As ProjectItem
Dim Doc As Document
Dim TxtDoc As TextDocument
DTE.ItemOperations.NewFile ("General\Text File")
Set Doc = ActiveDocument
Set TxtDoc = Doc.Object("TextDocument")
For Each Cmd In Commands
If (Cmd.Name <> "") Then
TxtDoc.Selection.Text = Cmd.Name & vbLF
TxtDoc.Selection.Collapse
End If
Next
End Sub
Esempio di macro per l'oggetto HTMLWindow. In questo esempio viene illustrato l'utilizzo delle proprietà ActiveDocument e ActiveWindow, dell'oggetto Window, delle proprietà CurrentTab, CurrentTabObject, ActivePane, StartPoint, dei metodi CreateEditPoint, FindPattern e InsertFromFile. Prima di eseguire questo esempio, aprire un documento HTML in Visual Studio.
' Macro example for HTMLWindow object
Sub HTMLWindowExample()
' Open an HTML document before running this sample.
If TypeOf ActiveDocument.ActiveWindow.Object Is HTMLWindow Then
' Ask the user for a file to insert into the body of the HTML
' document. This file should be an HTML fragment.
Dim strFile As String = InputBox("Enter the name of a file to _
insert at the end of the HTML document:")
' Get the HTMLWindow object and determin which tab is currently
' active.
Dim objHTMLWin As HTMLWindow = ActiveDocument.ActiveWindow.Object
Dim Tab As vsHTMLTabs = objHTMLWin.CurrentTab
' Switch to the "source" tab.
objHTMLWin.CurrentTab = vsHTMLTabs.vsHTMLTabsSource
' Get an EditPoint at the start of the text.
Dim objTextWin As TextWindow = objHTMLWin.CurrentTabObject
Dim objEP As EditPoint = _
objTextWin.ActivePane.StartPoint.CreateEditPoint
' Look for the end of the document body.
If objEP.FindPattern("</body>") Then
' Insert the contents of the file.
objEP.InsertFromFile(strFile)
End If
' Switch back to the original view of the HTML file.
objHTMLWin.CurrentTab = Tab
Else
MsgBox("You must open an HTML document.")
End If
End Sub
Vedere anche
Attività
Procedura: modificare le caratteristiche delle finestre
Procedura: creare un componente aggiuntivo
Procedura dettagliata: creazione di una procedura guidata
Concetti
Grafico del modello a oggetti di automazione
Altre risorse
Creazione e controllo delle finestre di ambiente