第一章 编码
编程者要执行大量的日常工作:参加团队会议,设计和测试程序,书写文档,代码复审。但是写代码是每个编程者最初本的工作。如果你喜欢代码,微软的Visual Studio.NET非常适合于你因为它提供了许多方式来帮助你书写和编辑代码。这章所提到的技巧有助于你比以前更快地书写和导航你的代码。这章覆盖了所有你书写代码时需要知道的技巧,包括从代码注释和代码导航到产生代码片段和执行复杂的查找替换。
加XML注释
可能谈论关于VS.NET最多的特性就是通过插入代码注释到用户定义的类和方法中来扩展智能感知(VS.NET最流行的特性,它显示给你一个给定对象的成员)。在C#中在一个类或成员定义的前面三个“///”来实现 。VS.NET能够自动产生必要的XML格式的片段以便于你能插入描述和参数信息(见图1)。重新生成项目后,VS.NET就能得到你所指定用于智能感知的信息。信息包括方法注释,方法参数,方法论回值,枚举,枚举值得和属性。
图1 加注释到C#
除了经常看到的
VS.NET2002和2003对VB.NET不支持XML注释。但是VS.NET 2005支持。所有你要作的就是敲三个省略号来产生XML注释片段(见图2)。可选择的方法,在想注释的构造体处右击从弹出的菜单上选择插入注释。
图2 在VS.NET 2005中VB.NET的注释
.NET框架是如此直觉的一个理由就是通过智能感知显示大量的描述。强烈推荐你在自己的项目中使用这个特性。
注释Web页
你放在代码中的XML注释不但能通过智能感知来显示,而且能够用来快速产生一个描述所有类和类中的域的web文档。选择工具>建立注释web页来实现。选择只对一个项目或整个解决方案的输出注释。
产生的代码注释web报告通过命名空间和项目列出了所有排序后的类,类成员的描述和继承关系。
如果你不喜欢预定义的模板的编排,你能导出注释到XML文件中,然后产生你自己的XSLT转换成你所喜欢的样式。在解决方案管理器上右击你的项目,从弹出菜单上选择属性>生成。在XML文档文件域中输入一个XML文件名。当生成项目时,VS.NET输出完整的注释到这个XML文件中。因为这个XML文件是一个完整的注释列,所有的XML注释都被显示。换句话说,每一个没有文档化的方法,属性,枚举等在编译过程中都将产生一个警告信息。
在VS.NET 2005中取消了产生代码注释web报告的功能。
跨项目使用智能感知
如果你使用XML注释,你可能注意到在同一个解决方案中跨项目时代码注释并没有出现在智能感知中。
通过给XML文件和程序集同样的名字就可以修补这个问 题。这样作可以确保同一个解决方案下的其它项目能够得到这个XML文件当你加一个引用到项目时通过智能感知显示这个注释。只有当你设置引用的拷贝到当地的属性设为true时才起作用。因为VS.NET只拷贝XML和程序集从引用的项目到工作项目的bin目录下,只有当你更新这个XML文件时,你在引用项目中对注释所作的变化才能反应到智能感知中去。不幸的时,你这样作的唯一的方式就是设置拷贝到当地的属性为false,等几秒钟,接着设为true。VS.NET将删除引用的XML文件的拷贝,然后重新从引用项目上拷贝。
幸运的是,在VS.NET 2005中为了让智能感知跨项目支持者并不需要产生XML文 件。同一个解决方案中的项目自动有整个的智能感知支持。当你对注释作了变化时并不需要重新编译。
插入注释标记
你是否经常写一个注释提醒自己还有一个任务没有完成,而随后又忘记它在那了?你能插入注释标记帮助你。这些VS.NET认识的关键字能够编译到一个列表中。例如,放一个TODO注释到你的代码中,如图3所示。
图3 注释标记
不用重新编译,选择视图>显示任务>所有就能看到所有你放在代码中的提示列表(见图4)。在C#中,VS.NET只显示当前打开文档的TODOs标记,但是在VB.NET中它显示整个解决方案的确所有的TODOs标记 。
图4 任务列表中的TODO标记
在VS.NET 2005中,选择视图>其它视图>任务列表(或者按Ctrl-Alt-K)在任务列表的上边从下拉菜单中过滤任务为“注释”。
除了TODO标记 ,VS.NET还有预先配置的HACK,UNDONE和UnresolvedMergeConflict标记。通过选择工具>选项>环境>任务列表,你能配置这些任务的优先级,同样也可以加自己的标记。
注意:注释标记是大小写敏感的。
除了使用注释标记,你能通过按照Ctrl-K,Ctrl-H或者在你的代码中右击从弹出菜单上选择的加任务快捷键放任务快捷键在你的代码中。这用一个快捷图标标记当前行,放一个可单击的快捷图标在任务列表中。使用同样的键盘组合可以移去快捷键。当IDE重启时快捷键就消失了。
注释代码块
你能放一个行注释在代码中对C#使用“//”标签,VB.NET使用“’”标签。除此外,C#允许你注释整个段落通过放“/*”(和相应的“*/”)标签。
一个更快注释整个段的方法是选择文本框接着按注释按钮式(见图5)或者按Ctrl-K,Ctrl-C。这会注释整个选择。通过按取消注释按钮来取消注释(或者按Ctrl-K,Ctrl-U)。
图5 注释和取消注释按钮
创造区域
当你的代码越来越长时,就越来越难以导航了。你能从编辑器上部的下拉列表中选择类和它们的方法,你也能把你的代码分组成逻辑区域。指定区域用#region关键字和一个
在你的段的开始的描述,和一个在你的段的结束处相应的#endregion关键字(见图6)。
图6 创造区域
使用区域的好处是你能通过击加号标记折叠区域。这折叠代码成一个灰行,它显示区域的描述。作为一个开发者,你已经意识到这个特性了因为VS.NET经常使用这个特性来产生代码。
注意:在VB.NET中,你通过双引号来指定一个区域。并且,在方法内并不允许区域,相反只能围绕方法和类来创造区域。
当你放鼠标在灰色的描述行上时你能看到折叠区内部的代码(见图7)。你甚至在你的代码中能够拖放折叠的区域。不幸的是人,当你粘贴一个折叠的区域到一个不同的位置时,粘贴的文本会自动展开。
图7 鼠标放在一个区域上看它的内容
你能按Ctrl-M,Ctrl-M来展开或者折叠当前的区域。
区域是非常有帮助的对于逻辑切分代码或者注释它,特别是能够嵌套使用它们。通过右击编辑器窗口的左边的灰条一次展开和折叠所有的区域。弹出的菜单显示了不同的折叠和展开选项。
隐藏当前的选择
能够对方法,注释和段创造区域通过使用#region编译指示符。在VB.NET和常规的文本文件中,你能创造区域并不需要使用#region。只需要显高想隐藏的段接着按Ctrl-M,Ctrl-H。这会隐藏当前的选择到一个临时的折叠区域内(见图8)。通过按Ctrl-M,Ctrl-M展开它们。关闭项目后临时区域会丢掉。
图8 隐藏文本段
因为这个技巧只对任何文本文件起作用,它证明对折叠HTML标记是相当有用的。这个技巧只用于使用VS.NET 2002或者VS.NET 2003(不用于VS.NET 2005)的VB.NET代码中。
选择单个词
编辑代码时选择一个词是非常平常的任务,你能在一个词的任何部分双击或者按Ctrl-W来选择一个词。
选择完整的字符文本
另一个通常的任务就是选择一个完整的字符串。如果你想选择两个双引号内的所有文本,移你的鼠标到开引号的左边,接着双击这个区域。整个字符串(包括双引号)将被选择(见图9)。除了双击外,你也能单击同时按下Ctrl键。这个技巧只适用于C#。
图9 双击开引号选择整个字符
在选择的前端和后端切换
当你想在一个选择的文本块的前后跳转时,你能重复地按Ctrl-R,Ctrl-P。这允许你在这两点前后跳转。
放代码到工具箱
每个项目包含一定的代码片段或文本你想重复使用的-它可能是你放在每个文件头的一个标准的版权头或者是想执行通常任务的代码片段。如果你发现你经常粘贴这个文本片段在上文件中时,它可能是有用的放在工具箱上(一个列出所有窗体或WEB控件的窗体,你能按Ctrl-Alt-X弹出)。只需要显高你的文本片段接着拖选择的文本到工具箱的常规Tab页上(见图10)。
右击工具箱上的文本块从弹出菜单上选择重命名项来重命名产生的文本块。和工具箱上其它的控件一样,你能拖文本块到你的代码窗口或者双击插入文本块到当前的光标位置。
循环应用剪切板中的复制项
循环应用剪切板中的复制项包含了你放在剪切板上的最后几十个文本片断。它非常象你已经熟悉的微软的Office中的剪切板环,它也是非常方便的,当你偶尔覆盖当前的剪切板的内容,或当你发现你经常在不同的项之间切换时。
循环应用剪切板中的复制项在工具条上是一个tab。你能双击一个记起的剪切项粘它到当前的光标处或者把它拖到编辑器中。
当循环应用剪切板中的复制项上包含许多项或你不能看到 环上每个项的完整内容时,通过循环应用剪切板中的复制项是非常有用的。重复选择编辑>循环应用剪切板中的复制项(或者按Cytrl-Shift-V)使VS.NET循环剪切板环的内容,显示存储的剪切内容到文本编辑器中当前的光标位置。循环应用剪切板的复制项的优点是使当环中的内容可视时粘到文本编辑器中是非常容易的。继续在剪切板的内容中循环只到你发现你正在寻找的项然后粘贴。
调换单个字符或词
调换单个字符或词意味着交换光标周围的字符或词,接着移光标到右边。如果你拼错误 了一个词或以不正确的次序写一个句子或代码段,你就能使用调换来修补这个错误。
调换单个字符可以按Ctrl-T。它交换光标周围的两个字符接着移光标到右边。重复按Ctrl-T允许你进一步移单个字符到右边。
调换单个词可以按Ctrl-Shift-T。注意到这只是交换两个相邻的词。VS.NET是足够聪明地忽略“不重要的”单个字符如等号,字符串引号,空格,逗号等等。
假设你有一行代码初始状态如下:
new SqlCommand(“trans”,stored_procedure,conn);
重复按Ctrl-Shift-T在词“trans”产生如下的结果:
new SqlCommand(“stored_procedure”, trans,conn);
最终应该是这样的:
new SqlCommand(“stored_procedure”,conn, trans);
在整个过程中引号标示和逗号保持它们原来的位置。当你到达一行的结尾处时,按Ctrl-Shift-T将和下一行的第一个词进行交换。
剪切,拷贝,删除和调换单行
为了拷贝整个当前行到剪切板,按Ctrl-C(或按Copy图标),不用选择任何的文本。如果你想剪切一个完整的行也不用选择任何的文本,按Ctrl-X(或按Cut图标)剪切完整的当前行到剪切板上。
你能删除单行通过按Ctrl-L。如果你想交换当前行和下一行,按Alt-Shift-T。这样移光标到下一行。这允许你重复按这个键盘快捷键只到你移你的当前行到预期的位置。
表格模式编辑XML
以文本模式编辑XML有时是困难的。虽然文本编辑器能插入关闭标签,你有时必须拷贝和粘贴完整的XML节点来插入一个新的元素(看插图11)。
图 11 以文本模式编辑 XML
编辑一个XML文件的数据部分的一个好的方法就是切换到数据模式(按主窗口底部的Data按钮)。它将XML文件以表格模式展现(见插图12),它允许你编辑原始数据和通过按每一行旁边的加号标记向下钻取到子元素。你能插入新的XML节点通过简单插入数据到最后一行(有*号标记的行)。一旦你完成了一行,有相应的标签和内容的XML节点就会插入到实际的XML文件中。
图 12 以数据模式编辑 XML
表格模式对于编辑XML序列化的dataset来说确实是简单的。编辑一个有比较深的层次结构的XML文件就会产生一些位置错位的XML段落。
以HTML格式粘贴文本
当你拷贝一个格式化的文本段落(例如来自一个Web站点或word编辑器)接着粘贴它到你的编辑器,使用通常的粘贴命令或键盘快捷键Ctrl-V,你将看到VS.NET是足够聪明的插入有额外的HTML代码的文本以便它的格式能够保留。在大多数情况下这不是你期望通过常规的粘贴行为得到的。
如果你只想粘贴文本,没有异样的格式化信息,使用VS.NET的以HTML格式粘贴特性。例如,如果你想从一个编程站点上拷贝段代码片断,你可能只想粘贴代码,不想有额外的格式化信息。使用以HTML格式粘贴特性只放文本内容到你的编辑器。
不幸的是,这些命令的名字是相反的:以HTML格式粘贴是常规的粘贴功能,现在的粘贴应当是“以HTML格式粘贴”因为它确实是这样作的。
为了使命令更加直观,VS.NET2005把“以HTML格式粘贴”作为缺省的粘贴命令的行为,重命名“以HTML格式粘贴”为粘贴作为替代的命令。
加类的域成员
通过使用增加对话框你能很容易地增加类的域成员(属性,变量,索引,方法)。到类视图窗口,右击你的类,导航到相应的增加对话框项(增加方法,增加属性,增加域,增加索引器)。使用对话框,你能输入域的成员信息如域类型,名字,访问修饰符。但是,有时手工输入可能是更快。
除此之外,增加对话框并不总是放增加的类成员在一个期望的位置。这些项在VS.NET2005中消失了,因为一个新的重构方法提供了同样的功能(看第四章的“重构代码”)。
格式化整个块
有几个有用的功能你能用来修改一个给定的选择的:大写,小写,删除水平空格,这只是这个例子。选择编辑>高级来访问这些特性。一个最有用的特性是格式化选择功能。通过按Ctrl-K,Ctrl-F来访问这个功能,它格式化整个选择,在恰当的位置插入tab,用正确的特定的块缩排来修改代码。这通常在录入代码时录入关闭一个块时(在C#中是敲入“}”)会自动格式化。但格式化选择功能将强迫自动化格式整个块(格式化已经乱的)(见插图13和14)。
图 13 格式化块前
图 14 格式化块后
在VS.NET2002和2003中,这个特性只能应用于C#和VB.NET代码,不能用于XML和HTML代码。但在VS.NET2005,你同样能格式化标记语言的文件(见图15)。事实上,这个格式化特性是如此流行以至于在VS.NET2005中有一个格式化整个文档的按钮(图16中所圈示)。同样你能选择编辑>高级>格式化文档或按Ctrl-K,Ctrl-D来访问这个功能。
图 15 在 VS.NET 2005 中格式化标记语言
图 16 VS.NET 2005 中的格式化文档按钮
自动换行
选择编辑>高级来打开或关闭当前视图的自动换行。通常,使用键盘快捷键(Ctrl-R,Ctrl-R)更容易使用这个功能。
强迫智能感知显示域成员
智能感知是相当有用的特性的。每一个VS.NET编程人员都会依靠它来导航.NET框架类层次。当你在一个类实例后敲一个句点时智能感知才能运行,而有时你需要强迫智能感知出现。例如,假设你拼错了一个方法名字。你只能通过完全退格到句点处让智能感知出现。
在这种情况下,你能按Ctrl-J强迫智能感知运行。这允许你通过智能感知选择一个恰当的方法来替代拼错的方法。对这个操作VS.NET2005有一个缺省的按钮(见图17)。
图 17 VS.NET 2005 中强迫智能感知出现的按钮(第一个按钮)
强迫智能感知显示参数信息
如同你能强迫智能感知类的域成员,你也能强迫它显示参数信息。我发现这个特性是相当有用的,当我需要查看一个已经签入到微软的源代码管理中的文件中类的特定方法的参数信息时。现在,唯一的得到参数信息的方法就是修改实际的参数列。不幸的是,你只有从源代码管理中签出文件你才能这样作。
替代签出文件只是查看参数信息,简单地放光标在参数上,按Ctrl-Shift-空格。VS.NET 2005对这个特性提供了一个按钮(见图18)。
图 18 VS.NET 2005 中强迫参数信息出现(第二个按钮)
注意:智能感知工具条上第三个按钮式(Ctrl-K,I)简单地显示当前光标的快速信息。换句话说,它显示的内容就是当鼠标放在当前词上时出现的内容。
完成一个词
一个在VS.NET IDE中最流行的快捷键可能就是Ctrl-空格快捷键了。当你开始敲入一个词时,如果你已经敲入足够多的开始的字符以便它能够标识一个给定的词在你当前的文件中,试着按Ctrl-空格。智能感知下拉列将按指定的开始的字符排序。简单的选择恰当的选择快速完成这个词。
如果你敲入的开始字符能在智能感知列中表明一个词,这个完整的词将会自动插入。当你熟悉这个工作方式时,你就能以一种非常快的方式敲入整个代码段。VS.NET 2005为这个特性提供了一个按钮(见图19)。
图 19 VS.NET 2005 中完成一个词(最后一个按钮)
实现接口方法
如果你正在写一个类,你决定这个类将实现一个特定的接口,你能允许VS.NET产生这个接口所有要求的方法的存根。有两种方法可以作。
如果你在VS.NET 2003中写你的类,当你敲完接口的名字后你将看到一个ToolTip,说明VS.NET能够完成所有的接口成员,通过按Tab键。当你按了Tab键后,VS.NET会自动插入接口的存根在一个处于关闭状态的区域内。
如果你先前已经定义了一个接口,你需要加接口的实现,转到类视图,在“基类和接口”的树节点上右击类的接口,接着导航到增加>实现接口弹出菜单项(见图20)。这个特性在VS.NET 2003中只能用于C#。
图 20 实现接口方法
在VS.NET 2005中,你不能通过菜单项来实现接口。在VB.NET所有的接口方法会自动产生(你实际上没有选择)。在C#中,当你在编辑器中击你的接口时会计现一个智能标签,通过它来实现(见图21)。
重载方法
如同实现接口一样,你能重载一个基类的方法通过同样的菜单。到类视图,在“基类和接口”树节点下扩展一个基类节点,右击你想重载的方法,接着导航到增加>重载。
这将立即写一个空的重载基方法的方法。在VS.NET2003中,通过简单写出方法的宣称,你将能发现那一个方法能够被重载。例如,敲public override,会引发智能感知显示所有你能重载的方法。从列表中选择一个方法,你将创建一个有正确标识的方法,它会在方法体中调用它的基方法。
创建GUIDs
当你开发一个新类或组件时,你经常需要创建一个所谓的全局唯一标识符(GUID),它是一个128位的值,经常用32个十六进制数表示。开始,组件开发者使用GUIDs作为唯一的名字来标记他们的组件,因为两个组件有同一个GUID的可能性是非常小的。今天,开发者可以使用GUIDs在一些需要唯一标识符的地方。通过随机选择32个十六进制数手工创建GUIDs是相当单调的。
幸运的是,VS.NET预置了一个工具,当你需要时随时会为你创建GUIDs。选择工具>创建GUIDs打开一个创建GUID的对话框(见图22)。在那,你能创建不同格式的标识符,包括通用代码片断,它经常用在COM开发中。
不幸的是,这个工具不能提供一个原始的格式:32个十六进制数简单的排列在一起,这个同样是非常有用的。
创造区域选择
在VS.NET中通过按住Alt键,拖运鼠标在一个矩形区域上来做一个区域选择。不知道你是否这样选择过区域?这个技巧允许你创造一个区域并不包含其间的行(见图23)。拷贝,剪切,粘贴矩形区域块通过这个方法非常容易作。
你可能惊奇为什么有人需要这个深奥的特性。事实上,我经常使用它在上特定的文档段落中作一个目标查找-替换操作,但是由于常规的自动换行选项使得我没有办法这样作。我相信你会发现这个特性是非常方便的。
切换视图
当开发ASP.NET应用时,你经常需要在设计器视图和HTML视图之间切换。除了在恰当的视图按钮上移动鼠标来切换视图之外,你也可以通过按Ctrl-PgUp和Ctrl-PgDn键盘快捷键来快速切换。(对于Web窗体,你应该使用那个快捷键并没有意义,因为那一个都将切换到另一个视图)当阅读XML文档时这种方式也可以在XML视图和数据视图之间切换。
对于Windows窗体,按F7切换到代码视图和按Shift-F7切换到设计器视图。
在VS.NET 2005中,Ctrl-PgUp和Ctrl-PgDn快捷键能够应用于Web窗体但不能用于XML文档。对于Windows窗体,F7将在两个视图中拴住设计器视图。(在VS.NET 2005中Shift-F7被保留作为另一个特性。)
跳转到行
运行时异常通常会提供给你行号。为了快速到你的文本文件中一行,按Ctrl-G或双击底部的状态栏上的行号。在出现的一个小对话框上,输入要跳转的行号。
如果你敲入的行号在可能的行号之外,光标将跳转到文件的开始或结束。过大的行号跳转到文件尾,过小的行号跳转到文件首。
搜索词
通常当你在一个文件中搜索一个词时,你能选择编辑>查找接着在查找对话框中敲入一个词。但是也有其它的方法来搜索一个词。例如,在主工具条上配置下拉列表的右边有一个组合框。敲入或粘贴一个词到这个列表中接着按回车,立即触发搜索功能。重复按回车会找到下一个匹配的词。你能快速按Ctrl-D导航到这个组合框。
有一个更快的方法来搜索一个词。选择完整的词或放光标在词中的任何位置,接着按Ctrl-F3。它触发同样的我前面描述的搜索功能。重复按Ctrl-F3迭代的所有匹配的。
使用组合框或Ctrl-F3快捷键应用同样的在常规的查找对话框中指定的搜索选项。首先要确保你正确设置了这些选项(例如,搜索隐藏文本在搜索区域内包含所有折叠的区域)。
查找和显高匹配的标记
某些标识总是成对出现。例如,在C#中,“{”标识必须用对应的“}”标识关闭。同样,编译器指示符“#region”必须有对应的“#endregion”指示符。当导航你的代码时,你有时需要查找对应的标识。通过按Ctrl-]你可以这样做。这个快捷键只有当光标在这些标识符的任一个的下面时才起作用,它会立即跳转到对应的标识符而不管它是开的或闭的标识。
如果你想显亮两个匹配的标识之间的所有代码时,按Ctrl-Shift-]显亮整个块,并移动光标到开的标识处。这个快捷键只有当光标在任一个标识的下面时才起作用(如光标在区域内它就不会起作用了)。
注意:这个特性只应用于C#。
执行渐进式搜索
对于熟悉UNIX下的Enacs的开发者可能知道渐进式搜索。通过按Ctrl-I触发,它允许你查找一个一次敲入一个字符搜索关键字的出现。在每一次键盘敲入后,VS.NET立即显亮下一个到目前最匹配你敲入的可能的出现。你敲入的越多,找到的匹配的出现越有可能就是你查找的。
渐进式搜索的好处就是你并不需要敲入整个词来找到一个特定的出现;你只需要敲入小数的能标识你正在搜索的词的字符。
一旦你满意一个发现的结果,按Esc键返回到正常的编辑模式。如果你不满足,重复按Ctrl-I查找匹配你的部分搜索关键字的出现,或者按Ctrl-Shift-I查找前一个匹配的出现。当然,你能简单地敲入更多的字符来缩减搜索。
我的观点,这个渐进式搜索的缺点就是因为它忽略折叠区域使它几乎没有用处,即使你在查找对话框中打开搜索隐藏文本。
用规则表达式或通配符查找或替换
用过规则表达式的人都知道不管他们查找什么,规则表达式都是非常有力的工具用来查找复杂的搜索关键字和搜索模式。规则表达式允许你利用匹配符,字符和分组来描述一个搜索模式。
许多开发者经常忽略VS.NET中一个内置的特性。当你通过按Ctrl-F或Ctrl-H调用查找或替换对话框时。注意到除了常规的选项可以精确你的搜索外,最后的检查框允许你定义你的基于规则表达式或匹配符的搜索。
在规则表达式模式中,使用你已经熟悉的System.Text.RegularExpressions命名空间中符号来指定表达式。如果你象我一样当构建表达式时总是需要一个懒的方式,你就会欣赏查找输入框旁边的箭头按钮。按它会看到一列可能的构造体,你能插入到你的规则表达式中(见图24)。
图24 用规则表达式搜索
在匹配符模式中,构造你的搜索模式,可以使用在MS-DOS下人所共知的匹配符,如“*”和“?”。
如果你能正确使用,这两种模式是非常有用的,在精确你的搜索算法甚至在开发基于规则表达式的程序时作为试验地。
执行全局查找或替换
每一个代码编辑器都有查找和替换功能,但是你是否知道VS.NET有一个可以跨越整个项目和解决方案中的全局查找和替换特性?按Ctrl-Shift-F或Ctrl-Shift-H可以调用全局查找或全局替换对话框。除了它允许你指定在多个文件中查找或替换外,它非常类似于常规的查找和替换对话框。
你能执行一个全局的查找和替换只在当前的文档,当前的项目,整个解决方案,或只是打开的文档(见图25)。你甚至能过滤你想在那些文件(基于匹配符)中查找。
一旦你开始搜索或替换动作,VS.NET在所有指定的文档中查找,如果必要的话修改它们。当使用全局替换时,你也会被提示是否打开修改过的文档。这个选项允许你回滚替换动作,因为只有打开的文档提供这个回滚特性。如果你没有选择这个选项,全局替换会自动保存修改过的文件到磁盘,因而这是个永久的动作。
通过按Ctrl-Break你能立即停止全局搜索或替换。
做一个搜索或替换动作之后,在“查找结果”对话框中会给你展现一列已经找到的结果。如同在VS.NET中的大多数列表,你能通过按在F8在列表中切换或通过双击它导航到一个发现。如果这个查找结果位于一个折叠的区域,双击列表中的查找结果会自动展开这个区域。
一旦开始一个新的查找或替换动作,VS.NET清空这个容器用新的结果来填充这个列表。但是,如果你想保持这个以前的结果,在搜索对话框上选择显示在查找2上的选项,这样会输出结果到第二个窗口。这允许你在结果集中切换。
在VS.NET 2005中,所有查找/替换功能被打包在一个对话框上(见图26),但你仍然能访问全局的查找/替换功能,通过使用顶部的下拉列表。所有的快捷键和前面描述的一样。
使用书签
当你浏览Web时,你能保存你喜欢的站点的链接作为书签。允许你快速返回到处一个给定的Web页。这种能力同样也能应用到编程上。
当你在编程时,可能有一段代码是你需要经常返回去的。除了重复滚动到这些地方外,可以考虑把这些代码作一书签,通过单击文本编辑器工具条上的蓝色标记图标。(通过右击存在的工具条的任何地方,从弹出的菜单上选择文本编辑器就能看到这个工具条了)你也能通过按Ctrl-K,Ctrl-K来设置一个书签。这样作不但可以在代码的左边显示一个书签,而且通过单击恰当的工具条上的标记按钮(见图27)你能快速地跳转到其它的书签。你也能按Ctrl-K,Ctrl-P到前一个书签,按Ctrl-K,Ctrl-N到下一个书签。
你能按清除标记图标或按Ctrl-K,Ctrl-L来清除所有的书签。
通过点击标记所有的按钮,VS.NET中的查找对话框允许你把所有匹配的结果标记为书签。
VS.NET 2005对书签增加了更多的支持。其中一个就是,你有一个在同一个文件中移至下一个或前一个书签的选项,通过使用书签工具条上的两个按钮(见图28)。
图 28 VS.NET 2005 中在同一个文件中移动书签的按钮
你也能命名你的书签。首先按Ctrl-K,Ctrl-W打开一个新的书签窗口(也可通过选择视图>其它窗口>书签来打开)。它会显示所有你已经创建的书签(见图29)。如同任务列表一样,你能力双击一个书签直接跳转到它的位置。你也能按F2或使用重命名右键菜单项来重命名你的书签。此外,你能创建文件夹来分组书签。也有按钮帮助者你在同一个文件夹中书签之间跳转。
书签窗口在每个文件夹和书签旁边会显示检查框。这允许你暂时关闭书签而不用实际删除它。关闭的书签在你使用按钮或快捷键导航你的书签时会跳过。
跳转到方法的定义
当你看到你一个类的方法调用时,你极有可能想看看方法体。使用过VB6的 人欣赏Shift-F4快捷键,它允许你直接跳转到方法的定义处。在VS.NET中通过上下文菜单实现。在文本编辑器中在方法名称内右击,从弹出菜单中选择到定义(见图30)。VS.NET立即跳转到这个方法的定义处。这个特性的缺省的快捷键是F12。
当你在一个已经打开的项目中第一次使用这个特性,在找到方法源时会有一个比较明显的时间延缓。我猜想VS.NET反射了所有引用的程序集来建立它自己的方法-行映射关系。这种准备工作只需要一次;随后这个特性的使用-即使是不同的方法-是相当快的。
使用浏览器模式的导航
VS.NET在IDE中装配了象浏览器一样的后退和前进按钮,它允许你回顾最近的光标位置。后退和前进按钮通常在撤消和重复按钮的右边(见图31的左边)。也可以在视图菜单上找到它们。
在使用到定义处特性后或在切换到另一个文件后或甚至在同一个文件中跳转到不同的行后,你能通过简单地点击后退按钮返回到最后的编辑位置。如同Web浏览器一样,VS.NET保存了你最近访问位置的历史。后退按钮也有一个下拉的菜单,你能控制你想返回到那个文件。(前进按钮没有这个列表。)
导航按钮也预置的快捷键。向后导航按Ctrl-Hyphen。向前导航按Ctrl-Shift-Hyphen。
插入外部的文本文件
当开发者插入一个外部的完整文件作为代码段落时,他们倾向在记事本中打开文件,然后拷贝。另一种方法就是在代码编辑器中选择编辑>插入文件作为文本。这其实没有什么惊奇的,只不过是省了打开和关闭记事本的步骤。
插入JavaScript标签
即使ASP.NET的架构功能强大,你仍然需要依靠JavaScript作为客户端脚本。在一个ASP.NET文件中写JavaScript代码时,你必须嵌入下面的标签:
除此之外,Web开发者趋向放注释分隔符在脚本标签内(见图32)来阻止浏览器把它们作为JavaScript代码,因为在