如何:创建多个工具窗口

可以程序工具窗口,以便多个实例可以同时处于打开状态。 默认情况下,工具窗口只能有打开一个实例。

使用多个工具窗口,您可以同时显示多个相关信息源。 例如,可以在多个工具窗口可以将一个多行 TextBox 控件,以便几个代码段在一个编程的会话期间同时可用。 和例如,可以将 DataGrid 控件,并在多个工具窗口的下拉列表框,以便多个实时数据源可以同时跟踪。

创建多个工具窗口

  1. 使用 Visual Studio 包模板,创建一个工具窗口。 有关更多信息,请参见 如何:创建一个工具窗口

  2. 打开包文件 (ProjectNamePackage.cs 或 ProjectNamePackage.vb)。

  3. 如下面的示例所示,以上类定义中,找到 ProvideToolWindow 属性和 MultiInstances=true 参数,。

    [ProvideToolWindow(typeof(MyToolWindow), MultiInstances = true)]
    

    这将创建使工具窗口多个实例同时的注册表项。

  4. 调用 FindToolWindow 方法并将其 create 标志传递给 false ,通过现有的工具窗口实例将重复,直到找到可用 id 。

  5. 若要创建工具窗口实例,请调用 FindToolWindow 方法并将其 id 到一个可用的值及其 create 标志传递给 true。

    默认情况下, FindToolWindow 方法的 id 参数的值是 0。 这使单实例工具窗口。 为多可以承载的一个实例,每个实例必须具有自己的唯一 id。

  6. 调用工具窗口实例的 Frame 属性返回的 IVsWindowFrame 对象的 Show 方法。

    这将显示工具窗口。

示例

默认情况下,是由包模板创建的 ShowToolWindow 方法支持单实例工具窗口。 下面的示例演示如何修改 ShowToolWindow 方法支持多个实例。

private void ShowToolWindow(object sender, EventArgs e)
{
    for (int i = 0; ; i++)
    {
        // Find existing windows. 
        var currentWindow = this.FindToolWindow(
            typeof(MyToolWindow), i, false);
        if (currentWindow == null)
        {
            // Create the window with the first free ID. 
            var window = (ToolWindowPane)this.CreateToolWindow(typeof(MyToolWindow), i);

            if ((null == window) || (null == window.Frame))
            {
                throw new NotSupportedException(
                    Resources.CanNotCreateWindow);
            }
            IVsWindowFrame windowFrame = (IVsWindowFrame)window.Frame;

            // Display the window.
            Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(
                windowFrame.Show());
            break;
        }
    }
}

请参见

任务

如何:打开工具窗口以编程方式

参考

FindToolWindow

其他资源

工具窗口