Gewusst wie: Steuern des Code-Editors (Visual Basic)

Add-Ins für Visual Studio sind in Visual Studio 2013 veraltet. Sie müssen für Ihre Add-Ins ein Upgrade auf VSPackage-Erweiterungen durchführen. Weitere Informationen über das Durchführen eines Upgrades finden Sie unter FAQ: Konvertieren von Add-Ins in VSPackage-Erweiterungen.

Der Visual Studio-Code-Editor ist ein Text-Editor, der für Sprachdienste wie Visual Basic, Visual C++ und Visual C# ausgelegt ist. Der Text wird in einem Puffer eingegeben, der in einem Textdokument angezeigt wird. Mithilfe der Editor-Automatisierungsmodellobjekte von Visual Studio können Sie den Text im Hintergrund entweder im Textpuffer oder in der Ansicht bearbeiten.

In der folgenden Tabelle sind die vier Hauptobjekte zur Textsteuerung im Code-Editor aufgeführt:

Objektname

Beschreibung

TextSelection

Damit wird Text in der Ansicht verändert. Das TextSelection-Objekt stellt die Einfügemarke oder den ausgewählten Text im sichtbaren Dokument dar.

TextPoint

Eine fest eingestellte Position im Textpuffer.

EditPoint2

Dieses Objekt ähnelt dem TextPoint-Objekt, es kann jedoch verschoben werden und Text im Puffer verändern.

VirtualPoint

Dieses Objekt ähnelt dem TextPoint-Objekt, es enthält jedoch zusätzliche Funktionen zum Auffinden von Textpositionen im virtuellen Bereich.

Die beiden wichtigsten Objekte zur Veränderung des Code-Editors sind das TextSelection-Objekt und das EditPoint2-Objekt. Sie unterscheiden sich hauptsächlich in den folgenden Punkten:

  • TextSelection stellt die sichtbare Textauswahl dar. Durch Änderung seiner Position verändert sich auch die Auswahl in der Ansicht. Ein EditPoint2 ist an keine Komponente der Benutzeroberfläche gebunden. Eine Positionsänderung wirkt sich daher nicht auf die Ansicht aus.

  • Da TextSelection die sichtbare Auswahl darstellt, ist nur ein TextSelection-Objekt pro Dokument vorhanden. Ein Dokument kann zwar mehrere TextSelection-Objekte enthalten, doch betreffen sie dieselbe sichtbare Auswahl und haben dieselbe Position. Dagegen können beliebig viele EditPoint2-Objekte enthalten sein, und alle können verschiedene Positionen haben.

  • Die Methoden des TextSelection-Objekts wurden so konzipiert, dass sie eine Eins-zu-Eins-Entsprechung zu Benutzeraktionen besitzen. Bei den Methoden von EditPoint2 ist dies nicht der Fall. Infolgedessen können einige EditPoint2-Methoden Vorgänge ausführen, die eine einzelne TextSelection-Methode nicht ausführen kann. Andere EditPoint2-Methoden hingegen sind in ihren Funktionen gegenüber TextSelection-Methoden nicht so fein abgestimmt. Deshalb verfügt TextSelection über eine größere Anzahl von Eigenschaften und Methoden als EditPoint2.

Mithilfe dieser Objekte können Sie folgende Aufgaben durchführen:

  • Text im Puffer oder in der Ansicht auswählen, hinzufügen, entfernen und verschieben.

  • Die Einfügemarke im Puffer oder in der Ansicht beliebig verschieben.

  • Einzüge für Textabsätze im Puffer oder in der Ansicht einfügen.

  • Lesezeichen einfügen, entfernen oder ansteuern.

  • Text samt Leerraum hinzufügen oder entfernen.

  • Text, der auf einem angegebenen Muster basiert, suchen oder ersetzen.

  • Gliederungsabschnitte in Code und Text erstellen.

  • Informationen über den Text abfragen, wie z. B. Textposition, Dokumentanfang und -ende, ausgewählte Textbereiche und vieles mehr.

In den folgenden Beispielen wird gezeigt, wie die verschiedenen Member des Editor-Automatisierungsmodells verwendet werden und wie auf sie verwiesen wird. Weitere Informationen zum Ausführen des Beispielcodes finden Sie unter Gewusst wie: Kompilieren und Ausführen der Codebeispiele für das Automatisierungsobjektmodell.

Zusätzliche Beispiele zur Verwendung des Editor-Automatisierungsmodells finden auf der Website "Automation Samples for Visual Studio" unter https://msdn2.microsoft.com/vstudio/aa718336.aspx.

Hinweis

Je nach den aktiven Einstellungen oder der Version unterscheiden sich die Dialogfelder und Menübefehle auf Ihrem Bildschirm möglicherweise von den in der Hilfe beschriebenen.Bei der Entwicklung dieser Verfahren war die Option "Allgemeine Entwicklungseinstellungen" aktiviert.Wählen Sie im Menü Extras die Option Einstellungen importieren und exportieren aus, um die Einstellungen zu ändern.Weitere Informationen finden Sie unter Anpassen der Entwicklungseinstellungen in Visual Studio.

Mit der Einführung der geteilten Ansicht im HTML-Editor von Visual Studio 2008 wurden HTMLWindow3, vsHTMLPanes und vsHTMLViews hinzugefügt. In der geteilten Ansicht werden die Registerkarte und die Ansichtselemente im HTML-Bearbeitungsfenster getrennt dargestellt. Wenn Sie zwischen Ansichten wechseln (entweder in die Entwurfs- oder Quellansicht), bedeutet dies nicht unbedingt, dass auch die Registerkarte gewechselt wird (Entwurf/Teilen/Quelle). Wenn Sie z. B. auf die Registerkarte Teilen klicken und dann von der Entwurfs- in die Quellansicht wechseln, wird die Registerkarte nicht geändert, sondern lediglich die Entwurfs- und Quellcodebereiche in der geteilten Ansicht aktiviert bzw. deaktiviert.

Beispiel

Beispiel für ActivePoint. In diesem Beispiel wird auch die Verwendung von StartOfLine, DisplayColumn und EndOfLine veranschaulicht. Öffnen Sie vor dem Ausführen des Beispiels in Visual Studio eine Codedatei oder ein Textdokument, fügen Sie dieser bzw. diesem Text hinzu, und markieren Sie einen Teil des Textes.

' 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

Beispiel für AnchorPoint. In diesem Beispiel wird auch die Verwendung von DisplayColumn, Line, StartOfDocument und EndOfDocument veranschaulicht. Öffnen Sie vor dem Ausführen des Beispiels in Visual Studio eine Codedatei oder ein Textdokument, fügen Sie dieser bzw. diesem Text hinzu, und markieren Sie einen Teil des Textes.

' 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

Beispiel für Insert. In diesem Beispiel wird auch die Verwendung von IsEmpty, WordLeft, WordRight, Text, Delete und MoveToPoint veranschaulicht. Öffnen Sie vor dem Ausführen des Beispiels in Visual Studio eine Codedatei oder ein Textdokument, und fügen Sie dieser bzw. diesem Text hinzu.

' 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

Beispiel für FindPattern. In diesem Beispiel wird auch die Verwendung von SelectLine veranschaulicht. Vor dem Ausführen des Beispiels müssen Sie in Visual Studio ein Textdokument oder eine Codedatei öffnen und diesem bzw. dieser Text hinzufügen.

' 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

Beispiel für OutlineSection. In diesem Beispiel wird auch die Verwendung von StartOfDocument, Line, LineCharOffset, FindPattern, SwapAnchor, MoveToLineAndOffset und LineDown veranschaulicht. Öffnen Sie vor dem Ausführen des Beispiels in Visual Studio ein Codedokument mit einem #if _DEBUG…#endif-Block.

' 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

In dem Beispiel wird ein Textdokument geöffnet und eine Liste aller in dem Dokument verfügbaren Befehle generiert.

  ' 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

Beispiel für das HTMLWindow-Objekt. In diesem Beispiel wird auch die Verwendung von ActiveDocument, ActiveWindow, Window, CurrentTab, CurrentTabObject, ActivePane, StartPoint, CreateEditPoint, FindPattern und InsertFromFile veranschaulicht. Öffnen Sie vor dem Ausführen des Beispiels in Visual Studio ein HTML-Dokument.

' 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

Siehe auch

Aufgaben

Gewusst wie: Ändern des Erscheinungsbilds eines Fensters

Gewusst wie: Erstellen von Add-Ins

Exemplarische Vorgehensweise: Erstellen eines Assistenten

Konzepte

Diagramm "Automationsobjektmodell"

Weitere Ressourcen

Erstellen und Steuern von Umgebungsfenstern

Erstellen von Add-Ins und Assistenten

Referenz zur Automatisierung und Erweiterbarkeit