7

私がやりたいことは、VS2008でコードファイルを開くときに、ファイル内のクラス/インターフェースのすべてのメンバーをデフォルトで折りたたむことです(重要なことに、XMLドキュメントとコメントを含む)。

リージョンはまったく使用したくありません。

また、ctrl+m、ctrl+l コードを使用して、すべてのメンバーのアウトラインを切り替えられるようにしたいと考えています (たとえば、すべてが折りたたまれている場合、すべてのメンバーを展開したいのですが、コメントや XML ドキュメントは展開したくありません)。 )。

可能?どのように?

4

4 に答える 4

5

はい、パート 1 に進みます。

パート2については不明です。

VS2008 が折りたたまれた状態でファイルを自動的に開くようにするには、各ドキュメントが開いたときに「Edit.CollapsetoDefinition」を実行するアドインを作成する必要があります。

これはそれほどトリッキーではありません - 難しい部分は、ドキュメントが実際に開かれてから数ミリ秒後にコードを実行する必要があるように思われるため、それを行うには threed プールを使用する必要があります。

  1. VS2008 用のアドイン プロジェクトを作成します。
  2. このコード (以下を参照) を 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;
    }
  1. このメソッドを Connect クラスに追加します

    private void InitialiseHandlers()
    {
        this._openHandler = new OnOpenHandler(_applicationObject);
    }
  1. Connect クラスの OnStartupComplete メソッドに InitialiseHandlers() への呼び出しを追加します。

    public void OnStartupComplete(ref Array custom)
    {
        InitialiseHandlers();
    }
  1. このクラスをプロジェクトに追加します。

    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", "");
            }
        }
    }

これで、開いているすべてのファイルが完全に折りたたまれているはずです。

于 2008-11-17T20:55:51.783 に答える
0

すべてのアウトラインを関数定義に折りたたむ簡単な方法は、次を押すことです: Contextmenu-button* (右のウィンドウ ボタンの隣) *, L, O

いつも使っています。このための実際のホットキーがある場合は教えてください:)

于 2009-06-26T17:43:22.103 に答える