24

我知道 VS 代码折叠问题是一个老问题,但我在浏览过的所有其他讨论中都找不到这个问题:

我们有一个 C# 团队,有些人喜欢他们,有些人讨厌他们,而且我们似乎没有太多的中间立场可以合作。

是否有 VS 的插件或加载项只会“隐藏”这些区域?这样那些想要它们的人就会正常地看到它们,但是安装插件并查看 .cs 文件的人不存在这些区域,就好像它们不存在一样。

我可以看到在移动代码时这可能是一个问题,它可能会导致某些方法在错误区域之内或之外的问题,但这可能是团队满意的权衡......

4

7 回答 7

59

我讨厌区域(我的团队喜欢它们)并且惊讶地发现没有人编写扩展来使它们变得更好。我终于自己写了一篇名为I Hate #Regions 的文章

让#regions 吸得更少(免费):

http://visualstudiogallery.msdn.microsoft.com/0ca60d35-1e02-43b7-bf59-ac7deb9afbca

  • 打开文件时自动扩展区域
  • 可选地防止区域被折叠(但仍然能够折叠其他代码)
  • 给#region / #end 区域线一个更小、更亮的背景,这样它们就不那么明显了(也是一个选项)
  • 在 C# 和 VB 中工作

区域工具截图

于 2011-05-30T18:50:05.563 回答
15

有快捷键可以处理它们:

Ctrl+M、Ctrl+M 折叠或展开您当前所在的块。
Ctrl+M, Ctrl+O 折叠文件中的所有块
Ctrl+M, Ctrl+L 展开文件中的所有块
Ctrl+M, Ctrl+P 停止大纲模式。(Ctrl+M,Ctrl+O 恢复)

查看代码折叠问题

于 2009-05-13T15:43:21.777 回答
1

就个人而言,我编写了一个 VS 宏(工具 > 宏)来扩展文件打开时的所有区域。

于 2009-05-13T14:04:40.313 回答
0

老实说,我不知道有这样的插件。但是,使用VSTO,自己编写一个非常容易。

于 2009-05-13T14:03:22.953 回答
0

这有点……低俗,并且可能有副作用,但是:

Tools-->Options-->Environment-->Fonts and Colors-->Preprocessor Keyword 将前景色和背景色更改为白色(或任何您的默认背景)。

不过,您不会看到其他预处理器关键字。

于 2009-05-13T14:09:23.643 回答
0

对于 VS 2008 用户,您可以停止大纲并以编程方式重新启动它(通过宏)。我在http://weblogs.asp.net/rweigelt/archive/2003/07/06/9741.aspx找到了这段代码

Imports EnvDTE

' Expands all regions in the current document    
Sub ExpandAllRegions()        
    DTE.ExecuteCommand("Edit.StopOutlining")        
    DTE.ExecuteCommand("Edit.StartAutomaticOutlining")    
End Sub

以上适用于 C# IDE;出于某种原因,VB 的 IDE 在明确告知时不会删除带有区域的轮廓。希望这可以帮助!

-- 附加编辑:

这是在 Visual Studio 2008 中适用于 Visual Basic .NET 的一个。这有点暴力,但想法是注释所有#region 标记,扩展轮廓。下一步取消它们的注释,将它们返回到它们的原始状态(严格来说不是真的......可能在代码的其他部分有恶意使用#region)。此代码也不会将“查找和替换”对话框返回到其原始状态。有了这些警告,这是将执行此杂务的宏模块:

Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports System.Diagnostics

Public Module MacroMod01
    Sub ExpandAllRegions()
    ' comment out all #region occurances
        DTE.ExecuteCommand("Edit.Replace")
        DTE.Find.Action = vsFindAction.vsFindActionReplaceAll
        DTE.Find.FindWhat = "#region"
        DTE.Find.ReplaceWith = "'#region"
        DTE.Find.Target = vsFindTarget.vsFindTargetCurrentDocument
        DTE.Find.MatchCase = False
        DTE.Find.MatchWholeWord = False
        DTE.Find.MatchInHiddenText = True
        DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxLiteral
        DTE.Find.ResultsLocation = vsFindResultsLocation.vsFindResultsNone
        DTE.Find.Action = vsFindAction.vsFindActionReplaceAll
        DTE.Find.Execute()

    ' uncomment all #region occurances
        DTE.ExecuteCommand("Edit.Replace")
        DTE.Find.Action = vsFindAction.vsFindActionReplaceAll
        DTE.Find.FindWhat = "'#region"
        DTE.Find.ReplaceWith = "#region"
        DTE.Find.Target = vsFindTarget.vsFindTargetCurrentDocument
        DTE.Find.MatchCase = False
        DTE.Find.MatchWholeWord = False
        DTE.Find.MatchInHiddenText = True
        DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxLiteral
        DTE.Find.ResultsLocation = vsFindResultsLocation.vsFindResultsNone
        DTE.Find.Action = vsFindAction.vsFindActionReplaceAll
        DTE.Find.Execute()

    'close the find 'n replace dialog
        DTE.Windows.Item("{CF2DDC32-8CAD-11D2-9302-005345000000}").Close()  

    End Sub

End Module

对于 VS2008 中的 VB,可能还有其他一些方法可以完成此操作。我会在找到它们时发布。

于 2012-02-10T13:27:56.003 回答
-5

我认为任何讨厌地区的人都很有趣。我非常喜欢 Regions,我编写了一个名为 Regionizer 的程序,这是一个位于http://regionizer.codeplex.com的开源项目

我有老板和一些讨厌他们的团队成员,但我的工具按字母顺序组织所有代码,因此方法在方法区域中按字母顺序排序,属性在属性区域中排序,事件在事件区域中排序。

尝试在没有此工具(或区域)的情况下查找代码就是我所说的意大利面条代码)。

我一直在寻找一种简单的方法来折叠和展开所有区域,并且 MS 告诉我这些区域是 .suo 文件的一部分(与项目或解决方案同名)并且没有一种简单的方法来处理在区域上反对他们自己。

我已经搜索了整个 DTE,但我还没有找到折叠所有区域或展开所有区域的方法,我将尝试使用宏代码,看看它是否有效。

将很快发布更新。

于 2012-04-01T18:35:18.533 回答