7

ドッキング可能なウィンドウ ペインを開く Visual Studio 2008 用の簡単なアドインを作成しました。

ここをクリックして、ソースとバイナリのインストーラーをダウンロードできます。

アドインの性質上、理想的には、ソースを編集する場所の隣にドッキングされたままになります。ただし、一部のインストールでは、ドッキングされたままにならないことがあります。VS を実行し、ペインをドッキングし、VS をシャットダウンし、VS を再起動してダンピングすると、ペインが再びフローティングします。一部のマシンでは、毎回再ドッキングする必要があります。

しかし、他のインストールでは、どこに置いても永遠にドッキングされたままになります。当初は、Vista と XP の違いかもしれないと思っていましたが、XP でも問題が解決しないという報告があります。

私が読んだこと (およびドッキングされたままになることもあるという事実) から、VS がドッキング状態を保存することになっているという印象を受けます。しかし、それはしていません。また、同じ VS インストール上の他のプラグインには、この問題はありません。ですから、状況を改善するために何かできることがあるはずです。

私のコードの唯一の関連部分はこれだと思います:

public class Connect : IDTExtensibility2
{
    private static DTE2 _applicationObject;
    private AddIn _addInInstance;
    private static CodeModelEvents _codeModelEvents;

    public static DTE2 VisualStudioApplication
    {
        get { return _applicationObject; }
    }

    public static CodeModelEvents CodeModelEvents
    {
        get { return _codeModelEvents; }
    }

    public static event EventHandler SourceChanged = delegate { };

    public void OnConnection(object application, 
           ext_ConnectMode connectMode, object addInInst, ref Array custom)
    {
        _applicationObject = (DTE2)application;
        _addInInstance = (AddIn)addInInst;
    }

    public void OnStartupComplete(ref Array custom)
    {
        try
        {
            Events2 events = (Events2)_applicationObject.Events;
            _codeModelEvents = events.get_CodeModelEvents(null);

            object objTemp = null;

            Windows2 toolWins = (Windows2)_applicationObject.Windows;

            Window toolWin = toolWins.CreateToolWindow2(
                _addInInstance, GetType().Assembly.Location, "Ora.OraPane", "Ora", 
                "{DC8A399C-D9B3-40f9-90E2-EAA16F0FBF94}", ref objTemp);
            toolWin.Visible = true;
        }
        catch (Exception ex)
        {
            MessageBox.Show("Exception: " + ex.Message);
        }
    }

    public void OnBeginShutdown(ref Array custom) { }

    public void OnDisconnection(ext_DisconnectMode disconnectMode, ref Array custom) { }

    public void OnAddInsUpdate(ref Array custom) { }
}

(MSDN のドキュメントでは、ウィンドウを OnConnection で作成する必要があることが示唆されていますが、そうするとウィンドウはほとんど表示されません。)

4

4 に答える 4

9

TeamReview ( http://www.codeplex.com/TeamReview ) で同じドッキングの問題に直面しました。なぜそうなるのかはわかりませんが、ウィンドウを常に OnStartupComplete に表示するコードを教えていただけると助かります。配置したい特定の場所がある場合は、toolWin を作成した後、Visible プロパティを呼び出す前に、フレーム内にリンクすることができます。CreateLinkedWindowFrame および SetKind メソッドの条件に適合する定数を確認する必要があります。また、SolutionExplorer などの MainWindow 以外のものにウィンドウをリンクすることもできます。

EnvDTE80.Window2 frame = toolWins.CreateLinkedWindowFrame(toolWin, toolWin, vsLinkedWindowType.vsLinkedWindowTypeTabbed);


frame.SetKind(EnvDTE.vsWindowType.vsWindowTypeToolWindow);


_applicationObject.MainWindow.LinkedWindows.Add(frame);

frame.Activate();

このサンプルは次のようになります: http://www.codeplex.com/TeamReview/SourceControl/changeset/view/16102# 2008 -> TeamReview -> Command -> ShowReplayWindowCommand.cs -> ShowForm()

出力ウィンドウ、コマンド ウィンドウ、およびソリューション エクスプローラーをリンクするMicrosoft の良い例を次に示します。次に、これらのリンクされたウィンドウの幅と高さを操作し、最終的にリンクされたウィンドウ フレームからすべてのウィンドウをドッキング解除します。

于 2008-11-23T22:35:08.057 に答える
1

これが私を助けてくれたものです。私はVisualStudio2005を使用していますが、これも役立つかもしれません。

public void OnBeginShutdown(ref Array custom)
{
     if (_toolWin != null)
          _toolWin.Visible = false;
}
于 2009-02-18T14:02:29.967 に答える
1

作者と同じ悩みです。Visual Studio 2005 は、デバッグが使用されたセッションの後にのみ、ツール ウィンドウの位置を「忘れる」ことに気付きました。

ツールウィンドウは常に下部にドッキングされるため、受け入れられた回答はあまり役に立ちません。ユーザーがドッキングしたい場所を選択し、好きな場所にドッキングするだけで設定を保存できるようにしたいと考えています。

于 2009-02-10T15:16:33.367 に答える
0

ツールウィンドウの可視性を false に設定すると、非常にうまく機能します。ありがとうJK。

デバッグ後のドッキング解除に関する JK の質問に答えるために、プロジェクトのデバッグ プロパティの devenv.exe /resetaddin スイッチがそれを引き起こすのではないかと思います。アドインが作成する他のすべてを確実にリセットします。

アイデア: アドイン プロジェクトを作成すると、/resetaddin スイッチがデバッグ構成に自動的に追加されます。通常、/resetaddin コマンドのクラス名のフォントに 'x' などの無効な文字を追加して、ハード リセットが必要な場合に x を削除して簡単に再度有効にできるようにします。通常、デバッグのたびにリセットする必要はありません!

于 2012-08-19T17:47:32.277 に答える