1

我在我的 VS 扩展的服务器资源管理器中为连接节点添加了一些选项。对于我添加的菜单选项之一,我需要获取非常选定的连接的连接字符串,因此我通过在 BeforeQueryStatus 事件和命令处理程序方法中添加一些代码来尝试此操作。但看起来我错过了一些东西,因为每次我想获得 DataViewHierarchyAccessor 的实例时,我总是得到一个空值。虽然如果我做同样的事情但在较低级别的节点中工作正常。我没有运气使用以下代码:

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

IVsUIHierarchy 层次结构 = Marshal.GetTypedObjectForIUnknown(hierarchyPtr, typeof(IVsUIHierarchy)) 作为 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 回答