如何从EnvDTE.Window中获取IVsDropdownBar?

时间:2015-02-04 12:13:26

标签: visual-studio-2010 visual-studio-extensions

每当通过此方法打开新窗口时,我都会收到通知:

private void OnWindowActivated(EnvDTE.Window GotFocus, EnvDTE.Window LostFocus)

我现在要做的是在对象IVsDropdownBar中获取所选方法,无论何时更改。

那么如何获得对这个对象的引用呢?

1 个答案:

答案 0 :(得分:3)

我没试过,所以这个答案只是一个想法......

根据MSDN,您可以通过IVsDropdownBar服务获取IVsDropdownBarManager个实例; GetDropdownBar方法返回与代码窗口关联的下拉栏(可能是没有下拉栏的情况,因为此装置是特定于语言服务的,可以通过选项转换)。

文档说明可以从IVsDropdownBarManager获取IVsCodeWindow;我想你可以从活动文档窗口中获取这样的实例,不知怎的......

获得IVsDropdownBar对象后,GetClientGetCurrentSelection方法可能符合您的利益; GetCurrentSelection允许您查询某个下拉列表的选择;例如......

IVsDropdownBar bar;
int hr = manager.GetDropdownBar(out bar);
if (hr == VSConstants.S_OK && bar != null)
{
    IVsDropdownBarClient barClient;
    hr = bar.GetClient(out barClient);
    if (hr == VSConstants.S_OK && barClient != null)
    {
        // const int TypesDropdown = 0;
        const int MembersDropdown = 1;

        int curSelection;
        hr = bar.GetCurrentSelection(MembersDropdown, out curSelection);
        if (hr == VSConstants.S_OK && curSelection >= 0)
        {
            hr = barClient.GetEntryText(MembersDropdown, curSelection, out text);
            if (hr == VSConstants.S_OK)
            {
                ...
            }
        }
    }
}

不确定,如果获得的信息有用...... 文档说明,它可以是

  

[...]简单或花哨的文本[...]和下拉代码没有假设它们的语义。