1

VS 拡張機能のサーバー エクスプローラーで、接続ノードにいくつかのオプションを追加しています。追加したメニュー オプションの 1 つで、非常に選択された接続の接続文字列を取得する必要があるため、BeforeQueryStatus イベントとコマンド ハンドラー メソッドにコードを追加して、これを試しました。しかし、DataViewHierarchyAccessor のインスタンスを取得するたびに、常に null 値を取得するため、何かが足りないようです。同じことをしても、下位レベルのノードでは問題なく動作します。次のコードを使用しましたが、うまくいきませんでした。

IVsDataExplorerNodeSelection nodeSelection = (IVsDataExplorerNodeSelection)Package.GetGlobalService(typeof(IVsDataExplorerNodeSelection));

IVsUIHierarchy 階層 = Marshal.GetTypedObjectForIUnknown(hierarchyPtr, typeof(IVsUIHierarchy)) as IVsUIHierarchy;

サーバー エクスプローラー ウィンドウの接続ノードに似たようなことをした人はいますか?

アップデート:

私はこれでいくらか進歩したように見えます、私はこれを試しました:

EnvDTE80.DTE2 _applicationObject = GetDTE2();
UIHierarchy uih = _applicationObject.ToolWindows.GetToolWindow("Server Explorer") as UIHierarchy;
Array selectedItems = (Array)uih.SelectedItems;
if (null != selectedItems)
    {
        foreach (UIHierarchyItem selItem in selectedItems)
        {
            SelectedItem prjItem = selItem.Object as EnvDTE.SelectedItem;
            string name = prjItem.Name;
        }
    }

私の質問は、selectedItems のリストをキャストするためのより良いタイプがあるかどうかです。EnvDTE.SelectedItem の代わりに。

前もって感謝します。

4

1 に答える 1

1

私が投稿したコードがうまくいったので、私の質問に回答済みのマークを付けます。

EnvDTE80.DTE2 _applicationObject = GetDTE2();
UIHierarchy uih = _applicationObject.ToolWindows.GetToolWindow("Server Explorer") as UIHierarchy;
Array selectedItems = (Array)uih.SelectedItems;
if (null != selectedItems)
{
    foreach (UIHierarchyItem selItem in selectedItems)
    {
        SelectedItem prjItem = selItem.Object as EnvDTE.SelectedItem;
        string name = prjItem.Name;
    }
}
于 2013-03-25T21:26:56.940 に答える