我正在为我的VS扩展的服务器资源管理器中的连接节点添加一些选项。对于我添加的一个菜单选项,我需要获取所选连接的连接字符串,因此我尝试通过在BeforeQueryStatus事件和命令处理程序方法中添加一些代码来实现此目的。但是看起来我遗漏了一些东西,因为每次我想要获取DataViewHierarchyAccessor的实例时,我总是得到一个空值。虽然如果我做同样的事情,但在较低级别的节点中工作得很好。我使用了以下代码,但没有成功:
IVsDataExplorerNodeSelection nodeSelection = (IVsDataExplorerNodeSelection)Package.GetGlobalService(typeof(IVsDataExplorerNodeSelection));
IVsUIHierarchy hierarchy = Marshal.GetTypedObjectForIUnknown(hierarchyPtr,IVsUIHierarchy as (IVsUIHierarchy))as IVsUIHierarchy;
是否有人对Server Explorer窗口的Connection Node执行了类似的操作?
更新:
看起来我在这方面取得了一些进展,我刚刚尝试了一下:
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。
提前谢谢。
发布于 2013-03-26 05:26:57
将我的问题标记为已回答,因为我发布的代码做到了这一点。
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;
}
}https://stackoverflow.com/questions/15541438
复制相似问题