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

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

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

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

有帮助吗?

解决方案

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

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

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

  • 打开文件时自动展开区域
  • 可以选择防止区域折叠(但仍然能够折叠其他代码)
  • 给 #region / #end 区域线一个更小、更亮的背景,这样它们就不太引人注目(也是一个选项)
  • 适用于 C# 和 VB

Region Tool Screenshot

其他提示

有快捷键来处理它们:

Ctrl+M, Ctrl+M  Collapse or expand the block you're currently in.
Ctrl+M, Ctrl+O  Collapse all blocks in the file
Ctrl+M, Ctrl+L  Expand all blocks in the file
Ctrl+M, Ctrl+P  Stop outlining mode. (Ctrl+M, Ctrl+O resumes) 

请参阅的问题代码折叠

我个人写一个VS宏(工具>宏)以展开文件上打开的所有区域。

我不知道这样的任何插件,诚实。然而,随着 VSTO ,它很容易自己写一个。

这是有些...单薄,并且可以具有副作用但:

工具 - >选项 - >环境 - >字体和颜色 - >预处理器关键字 改变前景和背景颜色为白色(或任何默认背景)。

您不会看到其他预处理关键字虽然。

有关VS 2008米的用户,则可以停止概述和编程重新启动它(通过宏)。我发现这个代码在 http://weblogs.asp.net/ rweigelt /存档/ 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 Basic .NET在Visual Studio 2008中的工作这是一个有点蛮力,但这个想法是评论所有的#区域标记,扩大了轮廓。下一步取消注释它们,将它们恢复到原来的状态(并不完全正确......可以在代码的其他部分#地区的流氓应用)。此代码不返回查找和替换对话框回到它的原始状态,无论是。与这些警告,这是一个将执行该杂项宏模块:

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。因为我发现他们,我会发布。

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

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

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

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

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

很快就会发布更新。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top