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/Esporta Impostazioni dal menu Strumenti. Per ulteriori informazioni, vedere Gestione delle impostazioni.
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