Mi-123456 2026-03-28 12:57 采纳率: 12.5%
浏览 4

VS扩展开发【工具箱类】

我需要开发一个vs扩展,目的是可以把VS工具箱中的所有选项卡全部折叠,懂行的进来,不懂的就不要来添乱了。接受点化苟同1,8,2,7,1,2,5,1,0,9,7

img

  • 写回答

2条回答 默认 最新

  • 檀越@新空间 2026-03-28 13:02
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    要开发一个 Visual Studio (VS) 扩展,实现“将 VS 工具箱中的所有选项卡全部折叠”的功能,你需要使用 Visual Studio SDKC# 编程语言。以下是一个完整的解决方案,包括设计思路、代码实现和部署方式。


    ✅ 一、项目目标

    目标: 开发一个 Visual Studio 扩展,能够在运行时将工具箱(Toolbox)中所有的选项卡折叠。


    ✅ 二、技术选型

    • 开发语言: C#
    • 开发平台: Visual Studio
    • 扩展类型: VSIX (Visual Studio Extension)
    • 依赖库: Microsoft.VisualStudio.Shell.15.0Microsoft.VisualStudio.TextManager.Interop

    ✅ 三、核心思路

    Visual Studio 的工具箱是由多个 ToolboxTab 组成的,每个 ToolboxTab 对应一个选项卡。我们需要通过 Visual Studio 的 DTE(Development Tools Environment)或直接访问 Toolbox 控件来操作这些选项卡。

    关键点:

    • 获取当前 Visual Studio 环境。
    • 遍历所有工具箱选项卡。
    • 折叠每一个选项卡。

    ✅ 四、解决方案步骤

    1. 创建 VSIX 项目

    • 打开 Visual Studio
    • 选择 文件 > 新建 > 项目
    • 搜索并选择 "VSIX Project"
    • 命名项目,例如:ToolboxCollapseExtension
    • 确保选择 .NET Framework 4.x 或更高版本

    2. 添加命令项(可选)

    如果你希望添加一个菜单项或快捷键来触发折叠操作,可以创建一个 Custom Command

    • 右键项目 -> 添加 -> 新建项 -> 选择 "Custom Command"
    • 设置命令名称,如 CollapseAllToolboxTabs

    3. 实现折叠逻辑

    Package.cs 文件中,找到 Initialize() 方法,或者你创建的命令处理类中,加入如下代码:

    using Microsoft.VisualStudio.Shell;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    
    namespace ToolboxCollapseExtension
    {
        public class ToolboxHelper
        {
            public static void CollapseAllToolboxTabs()
            {
                try
                {
                    // 获取 DTE2 对象
                    var dte = Package.GetGlobalService(typeof(DTE)) as DTE2;
    
                    if (dte == null)
                    {
                        MessageBox.Show("无法获取 DTE 对象!");
                        return;
                    }
    
                    // 获取工具箱窗口
                    var toolboxWindow = dte.Windows.Item(EnvDTE.Constants.vsWindowTypeToolbox);
    
                    if (toolboxWindow == null)
                    {
                        MessageBox.Show("未找到工具箱窗口!");
                        return;
                    }
    
                    // 获取工具箱控件
                    var toolboxControl = toolboxWindow.Object as ToolBoxControl;
    
                    if (toolboxControl == null)
                    {
                        MessageBox.Show("未找到工具箱控件!");
                        return;
                    }
    
                    // 遍历所有选项卡
                    foreach (ToolBoxTab tab in toolboxControl.ToolBoxTabs)
                    {
                        tab.IsExpanded = false; // 折叠选项卡
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"发生错误:{ex.Message}");
                }
            }
        }
    }
    

    重点说明:

    • 使用 ToolBoxControl 是关键,它提供了对工具箱选项卡的控制。
    • IsExpanded = false 是实现折叠的核心方法。

    4. 将命令与按钮绑定(可选)

    如果你创建了自定义命令,可以在 MyCommand.cs 中调用上面的方法:

    private void Execute(object sender, EventArgs e)
    {
        ToolboxHelper.CollapseAllToolboxTabs();
    }
    

    5. 测试扩展

    • 在 Visual Studio 中按下 F5 启动调试
    • 打开工具箱
    • 运行你的命令(通过菜单或快捷键)
    • 观察工具箱选项卡是否被折叠

    ✅ 五、部署扩展

    • 构建项目后,会在 bin\Debug 目录下生成 .vsix 文件
    • 双击 .vsix 文件即可安装到 Visual Studio
    • 或者通过 扩展管理器 安装

    ✅ 六、注意事项

    • 该功能仅适用于 Visual Studio 2017 及以上版本
    • 不同版本的 VS 可能需要调整 API 调用方式
    • 如果你发现 ToolBoxControl 无法获取,请确保你正在运行的是 设计器环境(Design Mode)

    ✅ 七、完整修改后的代码示例(Package.cs)

    using Microsoft.VisualStudio.Shell;
    using System;
    using System.ComponentModel.Design;
    using System.Windows.Forms;
    
    namespace ToolboxCollapseExtension
    {
        [PackageRegistration(UseManagedResourcesOnly = true)]
        [InstalledProductRegistration("#1000", "#1001", "1.0", IconResourceID = 400)]
        [ProvideMenuResource("Menus.ctmenu", 1)]
        [Guid("your-guid-here")]
        public sealed class ToolboxCollapsePackage : Package
        {
            protected override void Initialize()
            {
                base.Initialize();
    
                // 注册命令
                var commandService = GetService(typeof(IMenuCommandService)) as IMenuCommandService;
                if (commandService != null)
                {
                    var menuCommandID = new CommandID(GuidList.guidToolboxCollapseCmdSet, (int)PkgCmdIDList.cmdidCollapseAllToolboxTabs);
                    var menuItem = new MenuCommand(CollapseAllToolboxTabs, menuCommandID);
                    commandService.AddCommand(menuItem);
                }
            }
    
            private void CollapseAllToolboxTabs(object sender, EventArgs e)
            {
                ToolboxHelper.CollapseAllToolboxTabs();
            }
        }
    }
    

    ✅ 八、总结

    | 步骤 | 内容 | |------|------| | 1 | 创建 VSIX 项目 | | 2 | 添加命令项(可选) | | 3 | 实现工具箱折叠逻辑 | | 4 | 绑定命令与 UI(可选) | | 5 | 测试与部署 |


    如果你希望我帮你生成一个可以直接使用的 .vsix 文件,或者进一步优化这个扩展,请告诉我!
    也可以提供你当前的代码片段,我可以帮你分析并修复问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月28日