【问题标题】:How to implement code folding in C#如何在 C# 中实现代码折叠
【发布时间】:2011-01-24 11:14:17
【问题描述】:

我开始在工作中使用 COBOL/BASIC IDE(以替换我们目前拥有的与记事本相比稍有进步的那个)。它将用 C# 制作。管理层对实现一些 Visual Studio 类型的功能非常感兴趣,其中一个重要的功能是代码折叠。我查看了 MSDN,但没有看到任何折叠线条(或添加展开/折叠按钮)的好方法。

我假设文本区域应该是 RichTextBox。我在这里偏离轨道了吗?我想它可以通过某种修改过的 TreeView 来完成,但这对我来说似乎有点不对劲。有没有我只是想念的方法?

【问题讨论】:

  • 为什么不直接使用 Eclipse COBOL 插件?
  • @ctoneal:贵公司目前使用 Visual Studio 吗?它是否与您的版本控制集成?如果没有,您正在使用什么与您的版本控制集成?
  • 即使您的公司是那种偏执狂,我仍然会关注 SharpDevelop。它是用 C# 编写的,并且具有良好的代码编辑器控件。即使您不基于 SharpDevelop 的新应用程序,您仍然可以重用他们已经具有折叠和语法突出显示的代码编辑器。 LGPL 许可证意味着您可以将其包含在一个封闭源代码的应用程序中而无需版税。你应该看看。
  • @ctoneal:我可以建议你参加吗?很明显,您的雇主没有营造一个健康的工作场所。
  • 你的公司对任何新事物都非常偏执,所以他们希望你写一些全新的东西? :-)

标签: c# vsx folding


【解决方案1】:

为什么不使用现有的 IDE 并对其进行扩展?从头开始编写是一项艰巨的任务(您需要解析器、词法分析器、语法高亮器等),如果您需要支持多种语言(您提到 COBOL 和 Basic),则更加复杂。

Notepad++ 具有语法着色功能,可以向其中添加语言 - COBOL 是默认安装的语言之一。它支持代码折叠并且有很多插件(你可以自己写,满足你的需要)。

编辑Eclipse 是另一个出色的 IDE,也有类似的支持,并且在 cmets 中提到有一个 COBOL 插件。

【讨论】:

  • @ctoneal - 很遗憾听到您的限制。 Visual Studio 代码折叠是定制的。我会看看那里的一些开源 IDE 代码(Notepad++、Ecipe、SharpDevelop、MonoDevelop 等等),看看他们是如何实现它的。这会给你一个想法。
【解决方案2】:

我建议你看看SharpDevelop。这是一个相当不错的 IDE,已经内置了许多类似 Visual Studio 的功能。它是用 C# 编写的,并且完全支持代码折叠和几种语言的语法突出显示。此外,它是 LGPL 许可下的开源软件。所以,如果你不想让你的应用基于 SharpDevelop,那么你仍然可以重用他们的一些控件,比如代码编辑器或窗口工具包。

您应该考虑将 COBOL 语言添加到 SharpDevelop,而不是从头开始。如果你不能做到这一点,那么你仍然可以使用 SharpDevelop 代码作为如何让一个好的 IDE 工作的体面参考。

【讨论】:

  • 哇,三个 cmets 都说“不要重新发明 IDE”,而且时间比我输入回复的时间还短……
【解决方案3】:

有时嵌入 Eclipse 或成熟的编辑器是不合适的。由于某些其他原因,这是矫枉过正或超重或错误的。我很欣赏其他帖子中建议的第一个倾向,即不要在这里重新发明,但在某些情况下,一个小发明是必要的。例如,用于制作 Stack Overflow 帖子的文本框......既不是 Eclipse 也不是嵌入式 Visual Studio。我想知道为什么?

提出这个问题很重要 - 构建它还是购买它? - 但有时,正确的答案是构建它。


XPathVisualizer 提供了一个用 C# 实现并基于 RichTextBox 的代码折叠文本编辑器的简单示例。不过,它不是 VB——它是一个 XML 编辑器。但一般原则适用。

来看看吧。

为了动态实现 XML 语法着色,当用户键入时,它使用一个单独的后台线程。原因和一些细节描述in a separate answer on Stack Overflow

您可以为您的 COBOL/VB 做类似的事情。 XPathVisualizer 是开源的,已获得 MS-PL 许可,因此您可以浏览和借阅。

【讨论】:

  • 我没有投票给你,但是对于一个完整的 IDE(而不是仅仅语法高亮、大括号匹配和折叠代码),从除了具有完整 SDK 的高质量 IDE。
  • @280Z28,是的,我同意,构建一个功能齐全的 IDE 将花费数百万美元,而从 RichTextBBox 开始这项工作将是愚蠢的。但有时“IDE”并不意味着“与 Visual-Studio 相媲美的 IDE”。在我的工作中,我们使用嵌入式编辑器制作工具,它们的功能有限,范围有限。基本上记事本加代码折叠。而且不值得捆绑 Eclipse 或 VS 来获得该基本功能。
【解决方案4】:

如果您的团队习惯于“Visual Studio 功能”,那么我假设您在办公室使用 Visual Studio。以下是我的建议:

  • 将您的 IDE 建立在 Visual Studio 上,原因如下:
    • 尽可能使用 Visual Studio 2010。 SDK 与 2008 年/之前相比大大改进了。
    • 否则使用 Visual Studio 2008/2005。目前,我所有的商业 IDE 产品都只支持 2005/2008。
    • 如果您的团队使用 Visual Studio,他们会讨厌 Eclipse。在这种情况下甚至没有考虑的选项除非您选择使用现有的 Eclipse 插件,从而节省您创建新 IDE 的时间。
  • 如果您的团队没有使用 Visual Studio 2010,您可以在集成模式下免费使用 Visual Studio 2010 Shell(隔离模式不是您想要的) .这使您现在可以将 Visual Studio 2010 用于您的 IDE,并且如果团队稍后升级到 Visual Studio 2010 的完整版本之一,您的语言的 IDE 将干净地集成到完整版本中。 编辑: Visual Studio Shell 基本上是 Visual Studio 的核心,不包含任何特定语言(C#、C++、VB 等)。 Microsoft 免费提供此内核,对于有兴趣创建自己的语言支持的人来说,这是一个很好的选择。

阅读以下两个问题的答案:

【讨论】:

  • @280Z28:很好的答案。更好的是对 Visual Studio Shell 的解释,以及 Visual Studio 已经是 Shell+Extensions 的事实。不熟悉 VSX 的读者可能不相信这是可能的。
  • 看了一圈之后,似乎使用 Visual Studio Shell 并通过语言支持对其进行扩展是有道理的(管理层是否会批准的问题是另一回事)。为什么我不想要隔离模式呢?我不太清楚这些差异。是否仅仅基于未来能够重新集成到 VS 中?
  • @ctoneal:如果您扩展 Visual Studio 2005,则无需引入任何新软件(如果他们不批准新外壳)。如果您尝试重新命名/自定义 整个 环境(所有菜单、对话框等),则隔离模式更易于自定义。大多数时候这只是额外的开销,加上集成模式将来更容易集成回 VS(隔离模式适用于那些积极不打算重新集成回 VS 的人)。
【解决方案5】:

编写完整的 IDE 是一项艰巨的任务。我建议您尝试找到一个现有的具有您想要的东西,或者对现有的开源 IDE 进行调整。

回答您的问题:我猜 Visual Studio IDE 使用的是从头开始编写的自定义控件,而不是 RichText 控件。

【讨论】:

    猜你喜欢
    • 2010-12-27
    • 2010-11-08
    • 2019-08-20
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    相关资源
    最近更新 更多