Condividi tramite


Procedura: automatizzare la ricerca e sostituzione di testo

Aggiornamento: novembre 2007

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 anche il metodo FindPattern. Per ulteriori informazioni, vedere il metodo FindPattern in Procedura: controllare l'editor di codice (Visual Basic).

Nota:

Il valore costante vsFindOptionsMatchInHiddenText non si applica al metodo FindPattern perché esegue ricerche in tutto il testo, incluso quello 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:

Le finestre di dialogo e i comandi di menu visualizzati potrebbero non corrispondere a quelli descritti nella Guida in linea 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/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.

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", 
     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 oggetto di automazione

Altre risorse

Creazione e controllo delle finestre di ambiente

Creazione di componenti aggiuntivi e di procedure guidate

Riferimenti su extensibility e automazione