Share via


Procedura: automatizzare la ricerca e sostituzione di testo

In Visual Studio è possibile cercare e sostituire testo in documenti aperti nell'ambiente di sviluppo integrato (IDE, Integrated Development Environment) e contenuti in file del sistema.Il modo migliore per eseguire questa operazione consiste nell'utilizzare i metodi FindReplace e Execute dell'oggetto Find.Gli oggetti TextSelection e EditPoint offrono inoltre il metodo FindPattern.Per ulteriori informazioni, vedere il metodo FindPattern in Procedura: controllare l'editor di codice (Visual Basic).

[!NOTA]

Il valore costante vsFindOptionsMatchInHiddenTex[t] nell'enumerazione [vsFindOptions] non viene applicato al metodo FindPattern, poiché esegue una ricerca all'interno di tutto il testo, incluso il testo nascosto.

La versione di Find nello spazio dei nomi EnvDTE80 è denominata Find2.Equivale all'oggetto Find, ma offre una nuova proprietà denominata WaitForFindToComplete.Quando una proprietà boolean viene impostata su True, l'operazione di ricerca non viene conclusa finché non è stata effettuata la ricerca in tutti i documenti selezionati.

Se, ad esempio, si cerca una parola in 100 documenti, è possibile ricevere risultati incompleti a meno che non si utilizzi la proprietà WaitForFindToComplete o non si gestisca l'evento FindDone.Entrambi i metodi funzionano, ma l'impostazione della proprietà WaitForFindToComplete rappresenta un modo più semplice e veloce per assicurare che la ricerca venga effettuata in tutti i documenti prima che vengano visualizzati i risultati.

[!NOTA]

È possibile che le finestre di dialogo e i comandi di menu visualizzati siano diversi da quelli descritti nella Guida a seconda delle impostazioni attive o dell'edizione del programma.Queste procedure sono state sviluppate con le Impostazioni generali per lo sviluppo attive.Per modificare le impostazioni, scegliere Importa/EsportaImpostazioni dal menu Strumenti.Per ulteriori informazioni, vedere Impostazioni di Visual Studio.

Esempio

Negli esempi riportati di seguito viene illustrato come fare riferimento ai diversi membri del modello di automazione di ricerca e come utilizzarli.In questo esempio viene creato un documento contenente del testo, quindi viene eseguita la ricerca e la sostituzione tramite metodi diversi.Per eseguire questo esempio, sostituire il metodo OnConnection in un semplice componente aggiuntivo con il codice riportato di seguito.Per eseguire le diverse sezioni dell'esempio, rimuovere il commento dal relativo codice.Prima di eseguire questo codice, assicurarsi che la proprietà "Incorpora tipi di interoperabilità" del riferimento all'assembly EnvDTE sia impostata su False.

Public Sub OnConnection(ByVal application As Object, ByVal _
connectMode As ext_ConnectMode, ByVal addInInst As Object, _
ByRef custom As Array) Implements IDTExtensibility2.OnConnection
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    searchReplace(_applicationObject)
End Sub

Public Sub searchReplace(ByVal dte As DTE2)
    Dim findWin As Find2
    Dim doc As Document
    Dim textDoc As TextDocument
    Dim textSel As TextSelection
    Dim iCtr As Integer

    ' Create a new text file.
    dte.ItemOperations.NewFile("General\Text File")

    ' Set up references for the text document, Find object, and
    ' TextSelection object.
    doc = dte.ActiveDocument
    textDoc = CType(doc.Object("TextDocument"), TextDocument)
    textSel = textDoc.Selection
    findWin = CType(dte.Find, Find2)
    ' Make sure all docs are searched before displaying results.
    findWin.WaitForFindToComplete = True

    ' Insert ten lines of text.
    For iCtr = 1 To 10
        textDoc.Selection.Text = "This is a test" & vbCr
    Next iCtr
    textDoc.Selection.Text = "This is a different word"

    ' Uses FindReplace to find all occurrences of the word, test, in 
    ' the document.
    MsgBox("Now changing all occurrences of 'test' to 'replacement'.")
    findWin.FindReplace(vsFindAction.vsFindActionReplaceAll, "test", _
      vsFindOptions.vsFindOptionsMatchCase, "replacement", _
      vsFindTarget.vsFindTargetCurrentDocument, , , _
      vsFindResultsLocation.vsFindResultsNone)

    ' Uses Find2.Execute to find the word, different, in the document.
    ' findWin.FindWhat = "different"
    ' findWin.MatchCase = True
    ' findWin.Execute()

    ' Uses Find2.Execute to replace all occurrences of the word, Test, 
    ' with the word, replacement.
    ' findWin.FindWhat = "test"
    ' findWin.ReplaceWith = "replacement"
    ' findWin.Action = vsFindAction.vsFindActionReplaceAll
    ' findWin.Execute()
End Sub
public void OnConnection(object application, ext_ConnectMode 
  connectMode, object addInInst, ref Array custom)
{
    _applicationObject = (DTE2)application;
    _addInInstance = (AddIn)addInInst;
    searchReplace(_applicationObject);
}

public void searchReplace(DTE2 dte)
{
    Find2 findWin;
    Document doc;
    TextDocument textDoc;
    TextSelection textSel;
    int iCtr;

    // Create a new text file.
    dte.ItemOperations.NewFile("General\\Text File"
      ,"New file",Constants.vsViewKindTextView);

    // Set up references for the text document, Find object, and
    // TextSelection object.
    doc = dte.ActiveDocument;
    textDoc = (TextDocument) doc.Object("TextDocument");
    textSel = textDoc.Selection;
    findWin = (Find2) dte.Find;
    // Make sure all docs are searched before displaying results.
    findWin.WaitForFindToComplete = true;

    // Insert ten lines of text.
    for(iCtr=1; iCtr<=10; iCtr++)
    {
        textDoc.Selection.Text = "This is a test"+Environment.NewLine;
    }
    textDoc.Selection.Text = "This is a different word";

    // Uses FindReplace to find all occurrences of the word, test, in 
    // the document.
   System.Windows.Forms.MessageBox.Show(
     "Now changing all occurrences of 'test' to 'replacement'.");
   findWin.FindReplace(vsFindAction.vsFindActionReplaceAll, "test", 
     (int) vsFindOptions.vsFindOptionsFromStart, "replacement", 
     vsFindTarget.vsFindTargetCurrentDocument, "", 
     "",vsFindResultsLocation.vsFindResultsNone);

   // Uses Find2.Execute to find the word, different, in the document.
   // findWin.FindWhat = "different"
   // findWin.MatchCase = True
   // findWin.Execute()

   // Uses Find2.Execute to replace all occurrences of the word, Test, 
   // with the word, replacement.
   // findWin.FindWhat = "test"
   // findWin.ReplaceWith = "replacement"
   // findWin.Action = vsFindAction.vsFindActionReplaceAll
   // findWin.Execute()
}

Vedere anche

Attività

Procedura: compilare ed eseguire gli esempi di codice del modello a oggetti di automazione

Procedura: controllare l'editor di codice (Visual Basic)

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

Creazione di componenti aggiuntivi e di procedure guidate

Riferimenti su Extensibility e automazione