Partilhar via


Como controlar o editor de código (Visual Basic)

Os suplementos do Visual Studio foram substituídos no Visual Studio 2013. Você deve atualizar seus suplementos para as extensões VSPackage. Para obter mais informações sobre atualização, consulte Perguntas frequentes: convertendo suplementos em extensões VSPackage.

O Editor de códigos do Visual Studio é um editor de texto que acomoda serviços de linguagem como o Visual Basic, Visual C++ e Visual C#. O texto escrito em um buffer que é exibido em um documento de texto. Usando os objetos de modelo de automação do editor de Visual Studio, será possível manipular o texto nos bastidores no buffer de texto ou na exibição.

Os quatro objetos principais usados para controlar texto no editor de códigos são:

Nome do objeto

Descrição

TextSelection

Usado para manipular texto na exibição. O objeto TextSelection representa o ponto de inserção (ou circunflexo) ou o texto selecionado no documento visível.

TextPoint

Uma posição fixa no buffer de texto.

EditPoint2

Semelhante ao objeto TextPoint, mas ele pode ser movido e pode modificar o texto no buffer.

VirtualPoint

Semelhante ao objeto TextPoint , exceto pelo fato de que ele contém funcionalidade adicional para localizar posições de texto no espaço virtual.

Os dois principais objetos que você usa para manipular o editor de códigos são objetos TextSelection e EditPoint2 . As principais diferenças entre eles são:

  • TextSelection representa a seleção visível de texto. Alterar sua posição, altera a seleção na exibição. Um EditPoint2 não está vinculado a algum componente de interface do usuário (UI), portanto, alterar sua posição não altera a exibição.

  • Como TextSelection representa a seleção visível, há apenas um objeto TextSelection por documento. Apesar de um único documento poder conter vários objetos TextSelection, todos eles referem-se à mesma seleção visível e todos têm a mesma posição. Você pode ter tantos objetos EditPoint2 quanto desejar, e eles podem ter diferentes posições.

  • Os métodos do objeto TextSelection são criados para ter uma correspondência de um para um com as ações do usuário, enquanto os métodos de EditPoint2, não. Como resultado, alguns métodos EditPoint2 fazem o que nenhum método TextSelection único pode fazer, enquanto outros métodos EditPoint2 são mais granulares na função do que os métodos TextSelection. Esse é também o motivo pelo qual TextSelection é mais sofisticado nas propriedades e nos métodos que EditPoint2.

Usando esses objetos, será possível:

  • Selecione, adicione, exclua e mova o texto no buffer ou no modo de exibição.

  • Mova o ponto de inserção em torno do buffer ou modo de exibição.

  • Recuar o texto no buffer ou na exibição.

  • Inserir, remover, e navegar até indexadores.

  • Adicione ou remova o texto, inclusive espaço em branco.

  • Localize ou substitua o texto com base em um padrão específico.

  • Crie uma seção da estrutura de tópicos no código e texto.

  • Consulte informações sobre o texto, como a posição do texto, a parte superior e inferior do documento, os intervalos de texto selecionados e assim por diante.

Os exemplos a seguir demonstram como referenciar e usar os vários membros do modelo de automação do editor. Para obter mais informações sobre como executar o código de exemplo, consulte Como compilar e executar os exemplos de código do modelo de objeto Automation.

Para outros exemplos que demonstram o uso do modelo de automação do editor, consulte os exemplos em Exemplos de Automação para o site do Visual Studio (https://msdn2.microsoft.com/vstudio/aa718336.aspx).

Dica

As caixas de diálogo e os comandos de menu que você vê podem diferir das descritas no Help dependendo de suas configurações ativas ou de edição.Esses procedimentos foram desenvolvidos com as Configurações Gerais de Desenvolvimento ativas.Para alterar as configurações, escolha Importar e ExportarConfigurações no menu de Ferramentas.Para obter mais informações, consulte Personalizando configurações de desenvolvimento no Visual Studio.

HTMLWindow3, vsHTMLPanes e vsHTMLViews foram adicionados com a introdução do modo de exibição Divisão no editor HTML do Visual Studio 2008. O modo de exibição dividido separa a guia e os elementos da exibição da janela de edição HTML. Alternar o modo de exibição (para Design ou Origem) não significa necessariamente alternar a guia (Design/Divisão/Origem). Por exemplo, quando você clica na guia Divisão, alternar entre os modos de design e de código-fonte não altera a guia, somente ativa ou desativa as partes de design e de código-fonte na exibição de divisão.

Exemplo

Exemplo de ActivePoint. Esse exemplo também ilustra o uso de StartOfLine, DisplayColumn e EndOfLine. Antes de executar esse exemplo, abra um arquivo de código ou um documento de texto em Visual Studio, adicione um texto e selecione algum texto.

' 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

Exemplo de AnchorPoint. Esse exemplo também ilustra o uso de DisplayColumn, Line, StartOfDocument e EndOfDocument. Antes de executar esse exemplo, abra um arquivo de código ou um documento de texto em Visual Studio, adicione um texto e selecione algum texto.

' 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

Exemplo de Insert. Esse exemplo também ilustra o uso de IsEmpty, WordLeft, WordRight, Text, Delete e MoveToPoint. Antes de executar esse exemplo, abra um documento de texto ou um arquivo de código em Visual Studio e adicione algum texto.

' 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

Exemplo de FindPattern. Esse exemplo também ilustra o uso de SelectLine. Antes de executar esse exemplo, é necessário abrir um documento de texto ou um arquivo de código em Visual Studio e adicionar algum texto.

' 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

Exemplo de OutlineSection. Esse exemplo também ilustra o uso de StartOfDocument, Line, LineCharOffset, FindPattern, SwapAnchor, MoveToLineAndOffset e LineDown. Antes de executar esse exemplo, abra um documento de código em Visual Studio que contém um bloco de #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

O exemplo abre um documento de texto e gera uma lista de todos os comandos disponíveis no documento.

  ' 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

Exemplo para o objeto de HTMLWindow. Esse exemplo também ilustra o uso de ActiveDocument, ActiveWindow, Window, CurrentTab, CurrentTabObject, ActivePane, StartPoint, CreateEditPoint, FindPattern e InsertFromFile. Antes de executar esse exemplo, abra um documento HTML em 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

Consulte também

Tarefas

Como alterar características da janela

Como criar um suplemento

Instruções passo a passo: criando um assistente

Conceitos

Gráfico do modelo de objetos automation

Outros recursos

Criando e controlando janelas de ambiente

Criando suplementos e assistentes

Referência sobre automação e extensibilidade