
1.3 Visual Studio 2010实用技巧
1.3.1 Visual Studio 2010如何突出显示“空格”和“换行”
很多时候我们希望能看看代码与代码之间究竟空了多少距离,似乎肉眼看并不明显,Visual Studio 2010给我们提供了这样的功能。我们先看一段平常的代码,如图1-21所示。

图1-21 一段默认设置的代码
这个时候我们单击“编辑”→“高级”→“查看空白”命令,如图1-22所示。

图1-22 “查看空白”命令
再看看代码,如图1-23所示。

图1-23 Visual Studio 2010已经给空白加上虚点
一个空格用一个点表示,这样就清晰很多。
当然还可以按“Ctrl+R”组合键,再按“Ctrl+W”组合键就可以打开、关闭这个功能。
1.3.2 注释的快捷键
可以说我们的代码离不开注释,需要注释代码时可以先选中要注释的代码,然后单击注释的快捷按钮“注释选中行”按钮,如图1-24所示。

图1-24 Visual Studio 2010注释代码
这个时候我们也可以单击“编辑”→“高级”→“注释选定内容”命令,如图1-25所示。
如果单击注释快捷按钮又觉得不够方便,将这个注释和1.3.1节介绍的显示空格的菜单放在一起,你会发现原来注释的快捷键是:“Ctrl + K”组合键,“Ctrl + C”组合键,而取消注释的快捷键是:“Ctrl+K”组合键,“Ctrl+U”组合键。

图1-25 “注释选定内容”命令
1.3.3 自动注释如何写
很多时候我们需要在一个方法上写注释,我们的注释要包括参数等信息,往往要输入很久,其实不用那么麻烦,直接在方法上连着按“///”就会自动打出注释格式。
///<summary> /// ///</summary> ///<param name="sender"></param> ///<param name="e"></param>
如图1-26所示。这样加注释的效率就快多了。

图1-26 自动注释
1.3.4 智能感知的增强以及善用智能感知提高效率
Visual Studio 2010有着很好的智能感知功能,所谓智能感知就是代码提示,可以提高开发的速度,在需要智能感知的地方,单击“显示文字自动完成”即可。例如,我们想了解Response这个对象的说明,把鼠标移上去即可,如图1-27所示。

图1-27 智能感知功能
也可以“点(.)”出来。例如,输入DataTime后可以“点(.)”出后面的提示,如图1-28所示。

图1-28 智能感知提示代码
可以一直“点(.)”下去,如图1-29所示。

图1-29 智能感知提示可以一直“点(.)”下去
注意: ToShortDateString是方法,有的都是方法,所以要加括号“()”。
有图标的是属性,不需要“()”,例如Now。
不光后台,在前台HTML和JavaScript部分智能感知也得到了更大的提升。
本来我想写document,但是现在输入字母d就出现提示,此刻可以用方向键向下滚动选择你所需要的document即可,假设你要写document.getElementById来获取ID,如图1-30所示。

图1-30 前端JavaScript的智能感知功能
不光是JavaScript,对于HTML、CSS也有同样的智能感知,如图1-31所示,我们在div元素里按Space键就出现智能感知提示。

图1-31 前端HTML的智能感知功能
所以说使用智能感知可以提升速度,减少错误。
1.3.5 常用代码段for、foreach、try…catch快速输入
我们的代码中大量充斥着for语句、foreach语句、try…catch语句。
从头到尾写一段代码:
for (int i=0; i < length; i++) { }
不仅枯燥而且毫无意义,纯粹是重复劳动。
不知道大家注意没有,我们在写for的字母f的时候Visual Studio 2010已经智能感知了for,如图1-32所示。

图1-32 快速输入for代码段
可能很多人以为这仅仅是提示我们输入正确,其实在for后面连续按两次Tab键你会惊喜地发现,Visual Studio 2010自动帮我们写好了for的整个代码。
类似的,foreach代码段如下所示。
foreach (var item in collection) { }
try…catch代码段如下所示。
try { } catch (Exception) { throw; }
只要智能感知前有代码段图标,就都可以连续按两次Tab键出现代码,如图1-33方框处所示。

图1-33 智能感知代码图标
1.3.6 代码收缩功能
如果代码很长,我们希望把这些代码依次收缩,该怎么办?答案是在你的代码头尾输入以下代码。
#region MyRegion #endregion
这样就可以自由伸缩代码,如图1-34所示。

图1-34 自由伸缩代码功能
单击“”图标就可以收缩代码,如图1-35所示。

图1-35 Visual Studio 2010伸缩代码
如果把鼠标移到“MyRegion”上就会显示代码,如图1-36所示。
单击“”图标就可以展开代码。

图1-36 Visual Studio 2010已伸缩代码提示
1.3.7 用Code Snippets插入代码段功能
Visual Studio 2010提供Code Snippets插入代码段的功能,可以使我们的工作效率提高一倍,很多时候我们会需要输入大量重复的代码,例如,for循环。
for (int i=0; i < length; i++) { }
例如,try catch循环。
try { } catch (Exception) { throw; }
例如,代码折叠。
#region MyRegion #endregion
其实,完全不用输入代码,只要单击鼠标右键就可以。在后台代码处单击鼠标右键,在弹出菜单中选择“插入代码段”命令,如图1-37所示。

图1-37 选择“插入代码段”命令
或者单击菜单栏上的“编辑”→“IntelliSense”→“插入代码段”命令,如图1-38所示。

图1-38 “编辑”菜单中的“插入代码段”命令
出现“插入代码段”的提示,如图1-39所示。

图1-39 “插入代码段”提示
我们选择“Visual C#”,出现相关代码,如图1-40所示。

图1-40 插入一段代码
然后你就可以选择你需要的代码,直接单击就可以了。
1.3.8 用自定义常用代码段制作自己的snippet文件
使用Visual Studio 2010自定义常用代码段制作自己的snippet文件,可以使工作效率再提升一倍。
系统默认只提供了几个代码段,很多时候我们需要重复输入大量的代码段,例如:
页面首次载入执行的代码:if (!IsPostBack){};
页面跳转的代码:Response.Redirect;
页面输出代码:Response.Write;
声明一个表:DataTable dt=newDataTable()等。
我们希望把自己的时间最大化地解放出来。
那么,如何实现自己的自定义代码呢?
打开Visual Studio 2010安装文件夹下的VC#\Snippets\2052目录,如图1-41所示。

图1-41 自定义代码段目录
C:\Program Files\Microsoft Visual Studio 10.0\VC#\Snippets\2052,这个目录会因为Visual Studio 2010安装的不同而不同,本机是安装在F盘。
系统默认的代码段就在这些文件下,其中Visual C#目录存放的就是我们自定义的C#代码段,如图1-42所示。

图1-42 自定义代码段片段
图1-42中是一个一个的snippet文件,都是XML格式的。
我们用Visual Studio 2010打开其中的一个cw.snippet,这是最简单的。
<?xml version="1.0" encoding="utf-8"?> <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/ CodeSnippet"> <CodeSnippet Format="1.0.0"> <Header> <Title>cw</Title> <Shortcut>cw</Shortcut> <Description>Console.WriteLine 的代码段</Description> <Author>Microsoft Corporation</Author> <SnippetTypes> <SnippetType>Expansion</SnippetType> </SnippetTypes> </Header> <Snippet> <Declarations> <Literal Editable="false"> <ID>SystemConsole</ID> <Function>SimpleTypeName(global::System.Console) </Function> </Literal> </Declarations> <Code Language="csharp"><![CDATA[$SystemConsole$.WriteLine ($end$);]]> </Code> </Snippet> </CodeSnippet> </CodeSnippets>
这个的作用就是输入cw,按Tab键出现Console.WriteLine(),如图1-43所示。

图1-43 输入cw出现其自定义提示代码段
先不说具体的snippet语法,我们仿照cw写一个自动Response.Write()的snippet。
<?xml version="1.0" encoding="utf-8"?> <CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/ CodeSnippet"> <CodeSnippet Format="1.0.0"> <Header> <Title>hm</Title> <Shortcut>hm</Shortcut> <Description>hm 的代码段</Description> <Author>Microsoft Corporation</Author> <SnippetTypes> <SnippetType>Expansion</SnippetType> </SnippetTypes> </Header> <Snippet> <Declarations> <Literal Editable="false"> <ID>SystemConsole</ID> <Function>SimpleTypeName(global::System.Console) </Function> </Literal> </Declarations> <Code Language="csharp"><![CDATA[$SystemConsole$.WriteLine ($end$);]]> </Code> </Snippet> </CodeSnippet> </CodeSnippets>
你只要在<Code Language="csharp">区域写上自定义的代码即可。
为了和系统的snippet区分开,我建议给自己的snippet取一个前缀,例如hm,这样只要输入hm就出现提示,如图1-44所示。

图1-44 在Visual Studio 2010中输入h出现自定义代码段
按Tab键后自动实现代码:Response.Write();可以参考其他的snippet写出自己的自定义代码。
Title为定义在代码段上显示的名称,Shortcut为该代码段的快捷方式。
1.3.9 外侧代码功能
前面讲的是第一次书写一段代码的时候可以快速写好代码片段,这里再讲一个功能,就是在已有的代码外侧包围代码功能。例如,有代码:Response.Write("外侧代码");,现在我们希望得到如下这样一个for循环。
for (int i=0; i < length; i++) { Response.Write("外侧代码"); }
当然手写是可以的,但是如果我们使用“外侧代码”功能会快很多。
首先,选中你要包括的代码,然后单击鼠标右键弹出菜单,如图1-45所示,选择“外侧代码”命令。在弹出的子菜单中选择你要包括的代码段即可,如图1-46所示。

图1-45 右键菜单选择“外侧代码”命令

图1-46 外侧代码功能
最后代码如下:
for (int i=0; i < length; i++) { }
我们可以用这个功能很方便地实现region收缩功能、try…catch异常处理功能。
1.3.10 在工具箱中保存代码
很多时候,我们有代码要临时保存,其实我们不用借助于外界的记事本,这样效率不高,Visual Studio 2010为我们提供了代码记录本,在代码模式下,先复制一段代码,然后单击左侧的“工具箱”,在“工具箱”中粘贴即可,如图1-47所示。

图1-47 左侧工具箱粘贴代码
其后,就可以看到工具箱中已经粘贴的代码,如图1-48所示。

图1-48 已粘贴的代码
要使用的时候,用鼠标拖曳过来即可,当然也可以在右键菜单中删除。
1.3.11 设置项目启用IIS的模式
很多时候,我们要对项目做一些配置,可以通过“属性”达到。
在“项目”→“××属性”菜单中打开项目属性页进行修改,如图1-49所示。

图1-49 项目属性菜单
配置网站是否启用IIS,如图1-50所示。

图1-50 项目的配置界面
很多时候,我们觉得使用IIS可以做更多的设置,希望启用IIS模式,就要在这里配置。当然这里还有其他功能可以根据需要选择。
1.3.12 给代码增加行号
默认的HTML和CS代码是没有行号的,这样对于代码的查找很不方便。
单击菜单栏中的“工具”→“选项”命令,如图1-51所示。

图1-51 “工具”选项菜单
弹出“选项”窗口,选择“文本编辑器”列表中的“C#”,就可以选择是否显示行号了,如图1-52所示。

图1-52 代码启用行号功能
可以用同样的方法设置其他文件的行号显示,例如,HTML文件。也可以通过在HTML代码视图下,单击鼠标右键,在弹出菜单中选择“格式设置与验证”命令,如图1-53所示。

图1-53 HTML模式下弹出“格式设置与验证”菜单
同样弹出前面的窗口,有时候希望不显示行号,去掉即可。
再来看HTML代码视图,如图1-54所示。

图1-54 已伸缩代码提示
说明:我们看到图中多了代码行号。
按“Ctrl+G”组合键,可以转到某行,对于代码较多时这是很好的快捷键,如图1-55所示。

图1-55 “转到行”功能
1.3.13 巧用快捷键切换文件
我们都知道按“Alt+Tab”组合键可以方便快捷地在不同的窗口之间切换。项目开发到一定时候就会有许多文件,如果已经打开很多文件,一个个的选择会很慢,我们可以按“Ctrl+Tab”组合键在各文件之间切换,如图1-56所示。其实这也不是Visual Studio 2010特有的,在微软的SQLServer 2005中也有类似功能。

图1-56 按“Ctrl+Tab”组合键切换文件
1.3.14 如何删除“最近的项目”
随着Visual Studio 2010打开的项目越来越多,系统会记录下这些项目的位置,久而久之就会越积越多,很多项目可能我们只是偶尔看一次,却也被记录下来,要想删除,在右键弹出菜单中即可删除,如图1-57所示。

图1-57 最近使用的项目列表
其实这些链接信息是被存储在“注册表”里的,如图1-58所示。
在“开始”→“运行”中输入“egedit”打开注册表,依次展开HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\ProjectMRUList。

图1-58 最近项目列表在注册表中的存放位置
删除您不需要的项目信息即可!
说明:如果你使用的是Visual Studio 2010,那么对应的是:HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\ProjectMRUList。
Visual Studio其他版本找出对应关系即可。
1.3.15 如何实现自动属性
我们的代码中经常有以下属性:
privatestring name; publicstring Name { get { return name; } set { name=value; } }
输入这样的代码很费时。注意属性不能写在方法里!
在我们已经输入privatestring name;以后可以紧接着在name后单击鼠标右键,在弹出菜单中单击“重构”→“封装字段”命令。如图1-59所示。

图1-59 “重构”菜单
弹出“封装字段”对话框,如图1-60所示,单击“确定”按钮即可。

图1-60 “封装字段”对话框
系统就会为我们自动输入以下代码:
publicstring Name { get { return name; } set { name=value; } }
1.3.16 实现多次复制粘贴
可能大家受记事本的影响太深,以为在Visual Studio 2010中只能复制粘贴一次。很多时候不得不把要复制的代码粘贴到记事本暂时存储。其实Visual Studio 2010为我们完美地解决了这个问题。
以这个代码段为例:
using System; using System.Collections; using System.Configuration;
我们依次从第一句开始复制3次。
然后在空白处按“Ctrl+Shift+V”组合键一次就是using System.Configuration;
如果连续按2次就是using System.Collections;
如果连续按3次就是using System;
整个“复制”可以存储最多20次,以堆栈的形式存储,先进后出。
1.3.17 实现整行复制剪切删除
也许是我自己一直在误用一个功能,就是关于复制和剪切,我总是觉得如果要操作整行代码就一定要选中该行代码,如图1-61所示。

图1-61 复杂的复制功能
其实如果要复制整行可以在该行前甚至末尾定位光标,然后直接选择“复制”命令或者按“Ctrl+C”组合键,如图1-62所示。

图1-62 简单的复制功能
然后按“Ctrl+V”组合键实现整行的粘贴,同样的道理,如果要“剪切”整行就只要在本行前定位光标,然后按“Ctrl+X”组合键即可。
如果要“删除”整行就只要在本行前定位光标,然后按“Ctrl+BackSpace”组合键或“Ctrl+Delete”组合键即可。
1.3.18 实现跨行块选择、复制、删除
一切皆有可能,我们要打破思维定势。不要以为我们只能选择一整块,如图1-63所示。

图1-63 普通选择
对比图1-63,我们要想复制如图1-64所示似乎不可能。

图1-64 块选择
但是很多时候确实又有这样的需求,在Visual Studio 2010中一切都变得很容易,首先,在你要复制的任何一行处按住“Shift+Alt”组合键不放,然后拖动光标,你想复制哪一“列”都可以,如图1-65所示,再看这样的复制。

图1-65 块选择方法
然后在空白处粘贴,如图1-66所示。

图1-66 在空白处粘贴
当然你也可以做删除,比如我们要删除其间的“Web”就可以实现,如图1-67所示。

图1-67 块删除
1.3.19 实现页面滚动的另一种方法
我们都知道使用鼠标滚轮可以在页面滚动,但是Visual Studio 2010还有另一种方法可以实现这种功能,按住“Ctrl+↓”组合键或者“Ctrl+↑”组合键就可以实现,当然,也许你觉得有鼠标滚轮,这个功能很鸡肋,不过很多时候有可能滚轮坏了,或者使用一个无滚轮的旧鼠标,或者你觉得使用快捷键更能提高工作效率,那么这个方法将是你的不二选择,当然这也暗示Visual Studio 2010的无所不能,只是我们没有发现而已。
1.3.20 实现依次渐进式搜索相同字符串
先看如下代码:
privatestring name; publicstring Name { set { name=value; } get { return name; } }
我们如果要一个一个搜索所有的“string”怎么办?
可以先选中第一个“string”,然后按“Ctrl+I”组合键,光标就会在页面中所有的“string”中切换,如图1-68所示。

图1-68 第一次按“Ctrl+I”组合键
再次按“Ctrl+I”组合键时,光标定位到相同的字符串,如图1-69所示。

图1-69 再次按“Ctrl+I”组合键
1.3.21 实现添加网格参考线润物细无声
杜甫有句诗,“随风潜入夜,润物细无声”,我觉得用这个来形容Visual Studio 2010暗含的这个网格线功能一点也不为过,我们都知道在Firework和Photoshop等图像设计工具中都有网格线这个功能,如图1-70所示。至于为何Visual Studio 2010中没有,我们不得而知,唯一的猜测是微软开发组觉得这个功能华而不实?不过很多时候我们希望有这个功能。

图1-70 图像处理软件中的网格线
在Visual Studio 2010中可以通过修改注册表实现这个隐含的功能:
在“开始”→“运行”中输入“regedit”打开注册表,依次展开HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\Text Editor,新建“字符串值”,名称是“Guides”,值是:RGB(128,128,128)2,4,6,8,16。
这个值的意思是这样的,RGB(128,128,128)是网格的颜色,2,4,6,8,16是网格的依次标尺,最多可以设置13个。然后重新打开Visual Studio 2010你会惊喜的发现,你的Visual Studio 2010的HTML和CS页面成了如下这般模样,如图1-71和图1-72所示。

图1-71 HTML代码网格线
已经自动加上网格线了,同时细心的你会发现原来微软默认代码是按网格线空同样的空格对齐的。如果要删除网格线也很简单,删除注册表里新增的那个键值即可。这个功能为何没有开放也许是留给Visual Studio 2010开发组自己用的。

图1-72 CS代码网格线
1.3.22 实现多页面视图
很多时候我们希望能同时对比两个页面,如果在页面选项卡里来回切换,实在很麻烦,我们可以把选项中的文件拖曳到Visual Studio 2010界面的右边,如图1-73所示。

图1-73 需要多页面视图的文件
具体操作起来有一点技巧,将default.aspx往右拖,当你看到一个很大的虚框就可以了。靠近右边的时候会出现一个十字形的泊位,和右边那个贴住即可,如图1-74所示“选这个”处。

图1-74 将选项中的文件拖曳到右边
这个时候就会出现双页面视图,如图1-75所示。

图1-75 Visual Studio 2010双页面视图
如果要恢复就再拖回到左边即可。如果这个时候再添加一个页面拖到右边就会出现3个页面同时查看。
1.3.23 实现最近修改的文件切换
工作中经常会打开许多文件,都在选项卡上,很多时候需要返回上一个修改的页面,可以按“Ctrl+F6”组合键。现在打开4个文件:Default.aspx、WebForm1.aspx.cs、WebForm1.aspx、Default.aspx.cs,如图1-76所示。

图1-76 已伸缩代码提示
先在WebForm1.aspx.cs中随便修改一处,再在Default.aspx.cs中随便修改一处,然后按“Ctrl+F6”组合键,会发现页面切换到WebForm1.aspx.cs而不是Default.aspx.cs的上一个或者下一个页面。顺便说一句,如果所有的文件都没有改过,按“Ctrl+F6”组合键就会自然切换。
1.3.24 实现括号对称检测
可以说程序中括号无处不在,很多时候随着代码的增加括号会越来越多,有的时候会多一个或者漏一个括号,这个时候我们要做括号的对称检测。可以在括号处停住光标,然后按“Ctrl+]”组合键,如果括号匹配,光标就会移动到匹配处,否则光标不动。
下面这段代码,在第一个括号处按“Ctrl+]”组合键,光标就会来回切换,如果删除最后一个“}”,光标就会停留在第一个“{”上。
namespace WebApplication { publicpartialclass_Default : System.Web.UI.Page { privatestring name; publicstring Name { get { return name; } set { name=value; } } protectedvoid Page_Load(object sender, EventArgs e) { TextBox1.Text="2"; } } }
1.3.25 实现命令行快速启动
除了双击桌面上的图标启动Visual Studio 2010以外,还可以在“运行”中输入devenv /nosplash快速启动Visual Studio 2010,很多时候我们不是在桌面状态,为了单击桌面上的图标就需要切换到桌面。如果双击桌面上的Visual Studio 2010图标还会多启动一次启动画面。
1.3.26 在文件中查找功能
很多时候我们要对项目中所有的位置查找某一段代码,可以使用在文件中查找的功能,这样就可以搜索整个项目。单击“编辑”→“查找和替换”→“在文件中查找”命令,如图1-77所示。

图1-77 “查找和替换”命令
在弹出的“查找和替换”窗口中输入你要查找的代码即可,如图1-78所示。

图1-78 “查找和替换”窗口
很快系统就会显示查找结果列表,如图1-79所示。

图1-79 查找结果列表
1.3.27 代码转到定义和查找所有引用关系功能
我们要想查找代码的定义,也可以说是父位置,可以使用右键菜单中的“转到定义”命令,如图1-80所示,例如,我们想看Response的定义,选中后单击鼠标右键,在弹出菜单中选择“转到定义”命令,即可转到定义定位的代码,如图1-81所示。我们还可以使用“查找所有引用”命令来查看代码的引用关系。

图1-80 “转到定义”命令

图1-81 转到定义定位的代码