我想要做的是 VS2008,当我打开一个代码文件时,默认情况下折叠文件中类/接口的所有成员(包括任何 XML 文档和注释)。
我根本不想使用区域。
我还希望能够使用 ctrl+m、ctrl+l 和弦来切换所有成员大纲(例如,如果所有内容都折叠了,我希望它展开所有成员,而不是评论或 XML 文档)。
可能的?如何?
我想要做的是 VS2008,当我打开一个代码文件时,默认情况下折叠文件中类/接口的所有成员(包括任何 XML 文档和注释)。
我根本不想使用区域。
我还希望能够使用 ctrl+m、ctrl+l 和弦来切换所有成员大纲(例如,如果所有内容都折叠了,我希望它展开所有成员,而不是评论或 XML 文档)。
可能的?如何?
是的,第 1 部分。
不确定第 2 部分。
要让 VS2008 自动打开处于折叠状态的文件,您需要创建一个插件以在每个文档打开时运行“Edit.CollapsetoDefinition”。
这并不过分棘手 - 困难的部分似乎是您必须在文档实际打开几毫秒后运行代码,因此您需要使用 threed 池来执行此操作。
switch (connectMode)
{
case ext_ConnectMode.ext_cm_UISetup:
case ext_ConnectMode.ext_cm_Startup:
//Do nothing OnStartup will be called once IDE is initialised.
break;
case ext_ConnectMode.ext_cm_AfterStartup:
//The addin was started post startup so we need to call its initialisation manually
InitialiseHandlers();
break;
}
private void InitialiseHandlers()
{
this._openHandler = new OnOpenHandler(_applicationObject);
}
public void OnStartupComplete(ref Array custom)
{
InitialiseHandlers();
}
using System;
using System.Collections.Generic;
using System.Text;
using EnvDTE80;
using EnvDTE;
using System.Threading;
namespace Collapser
{
internal class OnOpenHandler
{
DTE2 _application = null;
EnvDTE.Events events = null;
EnvDTE.DocumentEvents docEvents = null;
internal OnOpenHandler(DTE2 application)
{
_application = application;
events = _application.Events;
docEvents = events.get_DocumentEvents(null);
docEvents.DocumentOpened +=new _dispDocumentEvents_DocumentOpenedEventHandler(OnOpenHandler_DocumentOpened);
}
void OnOpenHandler_DocumentOpened(EnvDTE.Document document)
{
if (_application.Debugger.CurrentMode != dbgDebugMode.dbgBreakMode)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(Collapse));
}
}
private void Collapse(object o)
{
System.Threading.Thread.Sleep(150);
_application.ExecuteCommand("Edit.CollapsetoDefinitions", "");
}
}
}
现在所有打开的文件都应该完全折叠。
使用 Visual Studio 宏来做同样的事情会容易得多。在 MyMacros 中编辑“EnvironmentEvents”宏文件并为 DocumentEvents.DocumentOpened 添加一个处理程序:
DTE.ExecuteCommand("Edit.CollapsetoDefinitions")
我曾尝试自己为宏编写一些 Visual Basic 代码,从不同的地方借用,但无法使任何工作。那我做了什么?为什么,我当然在 StackOverflow 上问了一个问题!它得到了回答,我将建议的代码添加到我的EnvironmentEvents
宏中,现在当我打开 CS 文件时,大约一秒钟后,我所有的定义都被折叠了。:)
将所有大纲折叠到函数定义的一种快速方法是按下: Contextmenu-button*(在右侧窗口按钮旁边)*、L、O
我用它所有的时间。如果有一个真正的热键请告诉我:)