我想要做的是拥有VS2008,当我打开代码文件时,默认情况下会折叠文件中类/接口的所有成员(包括,至关重要的是,任何XML文档和注释).
我不希望使用的区域,在所有.
我还希望能够使用ctrl + m,ctrl + l和弦切换所有成员大纲(例如,如果所有内容都已折叠,我希望它扩展所有成员,但不是扩展注释或XML文档).
可能?怎么样?
是的,第1部分.
不确定第2部分.
要让VS2008自动打开处于折叠状态的文件,您需要创建一个插件,以便在每个文档打开时运行"Edit.CollapsetoDefinition".
这并不是太棘手 - 困难的部分似乎是你必须在文件实际打开几毫秒后运行代码,所以你需要使用threed池来做到这一点.
为VS2008创建一个Addin项目.
将此代码(请参阅下面)添加到Connect类的OnConnection方法的末尾.
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; }
将此方法添加到Connect类
private void InitialiseHandlers() { this._openHandler = new OnOpenHandler(_applicationObject); }
将InitialiseHandlers()调用添加到Connect类的OnStartupComplete方法.
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", ""); } } }
现在所有打开的文件都应该完全折叠.