Porady: kontrolowanie edytora kodu (Visual Basic)

Dodatki Visual Studio zostały zaniechane w programie Visual Studio 2013.Dodatki należy uaktualniać do pakietu rozszerzenia VSPackage.Aby uzyskać więcej informacji na temat uaktualniania, zobacz Często zadawane pytania: konwertowanie dodatków na rozszerzenia pakietu VSPackage.

Visual Studio Edytor kodu jest edytorem tekstu, która może pomieścić usługi językowych, takie jak Visual Basic, Visual C++, i Visual C#.Tekst jest zapisany do buforu, który wyświetla się w dokumencie tekstu.Za pomocą obiektów modelu Edytora automatyzacji Visual Studio można manipulować tekstem w tle w buforze tekstu lub w widoku.

Są cztery główne obiekty używane do kontrolowania tekstu w edytorze kodu:

Nazwa obiektu

Opis

TextSelection

Używane do manipulowania tekstem w widoku.TextSelection obiekt reprezentuje punkt wstawiania (lub daszek) lub zaznaczony tekst w widocznym dokumencie.

TextPoint

Stała pozycja w buforze tekstu.

EditPoint2

Podobny do TextPoint obiektu, ale może być przesuwany i może zmodyfikować tekst w buforze.

VirtualPoint

Podobny do TextPoint obiektu, chyba, że zawiera on dodatkowe funkcje, aby zlokalizować położenie tekstu w wirtualnej przestrzeni.

Dwa główne obiekty są używane do manipulowania Edytora kodu TextSelection i EditPoint2 obiektów.Główne różnice między nimi są następujące:

  • TextSelection reprezentuje zaznaczenie tekstu widocznego.Zmiana położenia zmienia zaznaczenie w widoku.EditPoint2 nie jest związany z żadnym składnikiem interfejsu użytkownika, więc zmiana jego położenia nic nie zmienia w widoku.

  • Ponieważ TextSelection reprezentuje wyboru widoczny, istnieje tylko jeden obiekt TextSelection w dokumencie.Kiedy masz wiele TextSelection obiektów w dokumencie, wszystkie one odnoszą się do tego samego widocznego wyboru i wszystkie one mają taką samą pozycję.Masz tyle EditPoint2 obiektów ile chcesz, a wszystkie mogą mieć różne stanowiska.

  • Metody TextSelection obiektu mają mieć relację jeden do jednego z użytkownikami działania podczas gdy metody EditPoint2 nie muszą.W rezultacie niektóre metody EditPoint2 wykonują czynności, których pojedyncza metoda TextSelection nie może wykonać, podczas gdy inne metody EditPoint2 są bardziej szczegółowe w działaniu niż metody TextSelection.Jest to również powód, który TextSelection jest bogatszy we właściwości i metody niż EditPoint2.

Za pomocą tych obiektów można:

  • Wybierz, dodaj, usuń i przenieś tekst w buforze lub w widoku.

  • Przesuń punkt wstawiania wokół buforu lub widoku.

  • Wcięcie tekstu w buforze lub widoku.

  • Wstaw, usuń i przejdź do zakładek.

  • Dodaj lub usuń tekst, łącznie z „białą przestrzenią”.

  • Znajdź lub zamień tekst oparty na określonym wzorze.

  • Utwórz sekcję obramowania w kodzie i tekście.

  • Badanie informacji dotyczących tekstu, na przykład położenie tekstu, górnej i dolnej części dokumentu, zakresy zaznaczonego tekstu i tak dalej.

Poniższy przykład pokazuje, jak odwołać się i używać różnych członków modelu automatyzacji edytora.Aby uzyskać więcej informacji na temat sposobu uruchamiania kodu przykładu, zobacz Porady: kompilowanie i uruchamianie kodu modelu obiektów automatyzacji — przykłady.

Aby uzyskać dodatkowe przykłady ilustrujące użycie modelu Edytora automatyzacji, zobacz przykłady w witrynie sieci Web — Przykłady automatyzacji dla programu Visual Studio (https://msdn2.microsoft.com/vstudio/aa718336.aspx).

[!UWAGA]

Polecenia menu i okien dialogowych mogą różnić się od tych opisanych w Pomocy, w zależności od ustawień aktywnych lub wydania.Procedury te zostały opracowane z ogólnych ustawień projektowych active.Aby zmienić swoje ustawienia, wybierz Importuj i eksportujustawienia w menu Narzędzia.Aby uzyskać więcej informacji, zobacz Dostosowywanie ustawień środowiska deweloperskiego w Visual Studio.

HTMLWindow3, vsHTMLPanes i vsHTMLViews zostały dodane z wprowadzeniem widoku złożonego w Visual Studio 2008 edytorze HTML.Okno podziału oddziela zakładkę i elementy widoku okna Edycja HTML.Przełączanie widoku (do projektowania lub źródła) niekoniecznie oznacza przełączenie na karcie (projekt Split/źródło).Na przykład, po kliknięciu karty Podziel, przełączanie widoków Projektu i Źródła nie zmienia karty; włącza tylko lub wyłącza części Projektu i Źródła w widoku Podziel.

Przykład

Przykład ActivePoint.Ten przykład ilustruje także użycie StartOfLine, DisplayColumn, EndOfLine i .Przed uruchomieniem tego przykładu, należy otworzyć plik kodu lub dokument tekstowy w Visual Studio, dodać do niego fragment tekstu i zaznaczyć fragment tekstu.

' 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

Przykład AnchorPoint.Ten przykład ilustruje także użycie DisplayColumn, Line, StartOfDocument i EndOfDocument.Przed uruchomieniem tego przykładu, należy otworzyć plik kodu lub dokument tekstowy w Visual Studio, dodać do niego fragment tekstu i zaznaczyć fragment tekstu.

' 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

Przykład Insert.Ten przykład ilustruje także użycie IsEmpty, WordLeft, WordRight, Text, Delete i MoveToPoint.Przed uruchomieniem tego przykładu, należy otworzyć plik kodu lub dokument tekstowy w Visual Studio i dodać do niego fragment tekstu.

' 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

Przykład FindPattern.Ten przykład ilustruje także użycie SelectLine.Przed uruchomieniem tego przykładu, należy otworzyć dokument tekstowy lub plik kodu w Visual Studio i dodać do niego fragment tekstu.

' 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

Przykład OutlineSection.Ten przykład ilustruje także użycie StartOfDocument, Line, LineCharOffset, FindPattern, SwapAnchor, MoveToLineAndOffset i LineDown.Przed uruchomieniem tego przykładu, należy otworzyć dokument kodu w Visual Studio zawierającym blok #if _DEBUG…#endif.

' 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

Przykład otwiera dokument tekstowy i generuje listę wszystkich dostępnych poleceń do tego dokumentu.

  ' 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

Przykład obiektu HTMLWindow.Ten przykład ilustruje także użycie ActiveDocument, ActiveWindow, Window, CurrentTab, CurrentTabObject, ActivePane, StartPoint, CreateEditPoint, FindPattern i InsertFromFile.Przed uruchomieniem tego przykładu, należy otworzyć dokument HTML w Visual Studio.

' 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

Zobacz też

Zadania

Porady: zmienianie charakterystyki okna

Porady: tworzenie dodatku

Wskazówki: tworzenie kreatora

Koncepcje

Wykres modelu obiektów automatyzacji

Inne zasoby

Tworzenie i kontrolowanie okien środowiska

Tworzenie dodatków i kreatorów

Odwołanie do automatyzacji i rozszerzalności