Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez aussi afficher la version anglaise dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte.
Traduction
Anglais
Nous recommandons d’utiliser Visual Studio 2017

Comment : automatiser la recherche et le remplacement de texte

Les add-ins Visual Studio sont déconseillées dans Visual Studio 2013. Vous devriez mettre vos macros complémentaires à niveau vers des extensions VSPackage. Pour plus d'informations sur les mises à jour, consultez FAQ : conversion de compléments en extensions VSPackage.

Visual Studio vous permet de rechercher et de remplacer du texte présent dans des documents ouverts dans l'environnement de développement intégré (IDE) et enregistrés dans des fichiers sur le système. Le principal moyen d'y parvenir consiste à utiliser les méthodes FindReplace et Execute de l'objet Find. Les objets TextSelection et EditPoint fournissent également la méthode FindPattern. Pour plus d'informations, consultez la méthode FindPattern dans Comment : contrôler l'éditeur de code (Visual Basic).

Remarque Remarque

La valeur de constante vsFindOptionsMatchInHiddenTex[t] dans l'énumération [vsFindOptions] ne s'applique pas à la méthode FindPattern car elle applique sa recherche à l'intégralité du texte, y compris au texte masqué.

La version de Find dans l'espace de noms EnvDTE80 est nommée Find2. Elle est identique à l'objet Find, mais offre une nouvelle propriété nommée WaitForFindToComplete. Lorsque cette propriété booléenne a la valeur True, l'opération de recherche ne s'arrête pas tant que tous les documents sélectionnés n'ont pas été parcourus.

Par exemple, si vous recherchez un mot dans 100 documents, vous pouvez recevoir des résultats incomplets à moins d'utiliser la propriété WaitForFindToComplete ou de gérer l'événement FindDone. Si les deux méthodes fonctionnent, la définition de la propriété WaitForFindToComplete n'en reste pas moins une méthode plus rapide et plus facile de garantir que tous les documents ont été examinés avant d'afficher les résultats de la recherche.

Remarque Remarque

Les boîtes de dialogue et les commandes de menu qui s'affichent peuvent être différentes de celles qui sont décrites dans l'aide, en fonction de vos paramètres actifs ou de l'édition utilisée. Ces procédures ont été développées avec les paramètres de développement généraux actifs. Pour modifier vos paramètres, sélectionnez Importation et exportationde paramètres dans le menu Outils. Pour plus d'informations, consultez Paramètres Visual Studio.

Les exemples suivants montrent comment référencer et utiliser les différents membres du modèle Automation Find. Cet exemple crée un document texte qui contient du texte, puis recherche et remplace du texte à l'aide de différentes méthodes. Pour exécuter cet exemple, remplacez la méthode OnConnection dans un complément simple par le code ci-dessous. Pour exécuter différentes sections de cet exemple, supprimez les marques de commentaire du code approprié. Avant d'exécuter ce code, assurez-vous que la propriété « Embed Interop Types » de la référence d'assembly EnvDTE a la valeur False.

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()
}
Afficher: