Ctrl-F is not your only option
I cannot speak for everyone but I am a person of habit, CTRL-F is one of those habits.
After using hundreds of windows applications the CTRL-F shortcut to find information in any document dominates how I search. Unfortunately this is not a good strategy if I want to use the full power of the Visual Studio development environment.
In an effort to finally break the habit I put together a list of search options in Visual Studio. Here is a summary of the four main options I am now familiar with:
Quick Find (Quick Search)
Shortcut: CTRL-F | "Item by item forward looking" search for strings using literals or regular expressions
|
Find In Files (Full Search)
Shortcut: CTRL-SHIFT-F | "All items in scope" search for strings using literals or regular expressions
|
Find Symbol (Object and Member search)
Shortcut: ALT-F12 | You can use this dialog to locate Objects and Members as detailed below.
Objects: Namespaces, types, interfaces, enumerations, and other containers
Members: Classes, properties, methods, events, constants, variables, and other contained items
(Above taken directly from MSDN article on the subject)
|
Incremental Search (Search as You Type)
Shortcut: CTRL-I | Searches the current document for a string literal and locates matches as you type, providing even partial matches in the beginning
Only works on the currently open document and will not extend to additional physical locations. |
Next lets look at these options in more detail and provide examples.
Quick, Files, Symbols?

Before we go into the individual features of these three search option lets review the commonalities:
Search Option Commonalities
First lets define the purpose of the various search options: "a way to find a text in project resources". Once a match is found the main difference is how each option display it.
Second lets review the common options available in the search:
1. You can define the scope of your search by using the "Look In" field. This option various depending of the search type by providing the appropriate selection options for that type, example: Solution level vs Open Document level search scope
2. You can use string literals or regular expression strings to conduct your search
3. You can match for the whole world, substring and/or define a case sensitive search (Warning: many times people enable case sensitive search and are therefore unable to find the information they seek, use this option with care)
Differences
Now that we have defined the common features of the different searches lets talk about each in more detail.
Quick Find provides an interface to do exactly what it says, to quickly find something inside of the documents in your solution. It does this by looking through the file or files your scope selection covers and highlighting the first instance of the found text. You can then move to the next location this text is found by hitting enter Find Next button.
Each time you move "forward" the search continues to look for the next matching case. This is therefore quick to find at least one reference as it does not require the search mechanism to look through every file covered in the searches scope before returning the results.
This search is used very often since just like me many people find it by pressing CTRL-F. This is by no means an out-dated search mechanism as it meet a specific need: to find at least one match quickly. This works great especially when searching through a small document.
Find In Files works by looking through the entire scope of the search and displaying a combined output of every location where your target text is found. The output itself is nicer then Quick Find as it provides a summary that when clicked takes you to the location of the found text while still displaying the other possible locations.
Unfortunately this option can be very slow depending on the scope and/or size of your solution. The search simply takes time, it has to look at each file in your scope, find the matching text, note it and continue to iterate until all the files are processed.
Find Symbols is best described by what it will not search compared to Quick Find or Find In Files: Will not find comments, specific code, or other arbitrary strings within your code files.
Instead it searches for various type of Symbols such as Classes, Namespace, events, and other items at the same level. For a complete list see this MSDN article.
Here is an example of when this search is a good fit: To find every overload of a particular class by searching for the class in the scope of the .NET Framework. Depending on the scope selected using the Look In option the results will take you to either all the file locations using the string you search for and/or the Object Browser view that provides valuable information on the item in question.
Search as You Type
Search As You Type (or Incremental Search as its known in the documentation) provides no pop-up dialog, instead it lets you search by pressing the CTRL-I sequence to start the search then start typing the desired string value. As you type and matches are found the cursor will jump to the location of the match. As you continue to type, the cursor will continue to jump until it has searched the entire document and can no longer find additional locations to jump to based on your last type character.
If multiple matches exist for the string you entered you can use F3 (forward) or SHIFT-F3 (back) to jump between the matches.
As with the other search options you have certain advantages, and certain disadvantages. The following are two limitations of this feature:
1. Regular expression are not supported, only string literals
2. Search scope is limited to the open document and cannot be extended beyond this to other files (no Look In option)
What About Replace?
"Replace in Files" vs "Quick Replace" has the same fundamental difference as "Quick Search" vs "Find in Files": The way the results are displayed after a replace operation. Covering this feature is an article in itself and wont be covered here.
Visual Studio 2005 vs 2008: Search Compared
The search features between the two IDE's seem fairly consistent with no large differences. While a difference might exist, I am simply not aware of it at the time of this post. (Please feel free to correct me by posting a comment to this thread)
3rd Party Search Options
As one can imagine there are many 3rd party plug-ins available to make search in Visual Studio even more powerful. One good example is Koders.com Code Search. Koders has a great product line for web-based and IDE plug-in enabled code search across your entire source tree, I definitely recommend checking them out.
(You can also listen to Koders.com Product Manager Phil Haack interview on .Net Rocks! in show #261)
Search Bug?
Error: "Find in files" says : "No files were found to look in. Find was stopped"
During my research for this post I came across references to a bug in search with the error above. For more information about it please see the Visual Studio feedback thread listed below.
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=105511
I honestly do not have time to see if this bug is still even applicable but I decided it was worth mentioning (Personally, I never encountered it).
Closing Thoughts
Search is a powerful tool that can enhance your abilities to develop code quickly and at higher quality. Use the right-tool, for the right-job and you will do well.
I look forward to your comments.