VSTO(C#)Excel开发7:自定义任务窗格

server/2025/3/14 10:01:51/

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。

源码指引:github源码指引_初级代码游戏的博客-CSDN博客


        前一篇VSTO(C#)Excel开发6:与窗体交互-CSDN博客

        前一篇用上了普通的C#窗体,能和Excel交互,唯一的缺憾是窗体是在Excel之外的,在任务栏上是独立的。虽然关闭Excel会同时关闭这个窗体,终究是见外了。

        那么怎做个不见外的窗体出来呢?这就要用到“任务窗格”。

目录

一、任务窗格是什么

二、创建窗体控件

三、创建任务窗格

 四、运行效果

五、与功能区联动

六、对象模型知识点

6.1 ThisAddIn.CustomTaskPanes 

6.2 CustomTaskPane


一、任务窗格是什么

        任务窗格是一个窗体控件,不需要使用模式对话框或无模式对话框,嵌入在Excel里面运行,与Excel浑然一体。

二、创建窗体控件

        窗体控件就是普通的窗体控件,项目上右键-添加-新建项:

        在窗体设计器放一个按扭过来:

        双击一下按钮,自动生成处理代码,在代码里添点东西:

		private void button1_Click(object sender, EventArgs e){MessageBox.Show(Globals.ThisAddIn.Application.Version);}

        显示了一下版本,我们已经知道这个版本是Excel的版本,也知道从这里入手可以访问整个Excel对象模型,所以只要这个功能正常,剩下的就是业务问题了。

三、创建任务窗格

        在项目的入口ThisAddIn.cs里面添加创建任务窗格的代码:

        从这个图很容易看出来哪些是修改的。

        类里面添加一个窗体控件对象和任务窗格对象,在Startup里创建窗体控件并添加到Excel里面去并显示出来。

        这几句代码完全是套话,没什么好讲的。改过的代码:

。。。。。。
using Microsoft.Office.Tools;//CustomTaskPanenamespace ExcelAddIn1
{public partial class ThisAddIn{UserControl1 userControl1;CustomTaskPane myPane;private void ThisAddIn_Startup(object sender, System.EventArgs e){userControl1 = new UserControl1();myPane = this.CustomTaskPanes.Add(userControl1, "userControl1");myPane.Visible = true;}
。。。。。。

 四、运行效果

        编译运行应该没什么问题,自动打开excel,选空白工作簿:

        看到我们的任务窗格已经出现了。点一下按钮button:

         效果符合预期。

五、与功能区联动

        现在任务窗格已经可以工作了,但是如果点击任务窗格右上角的叉,任务窗格就会被关闭,没有办法再次打开。所以我们要把显示任务窗格的代码放在功能区。

        创建一个功能区,添加一个按钮,我们已经很熟练了:

        先去把ThisAddIn类的myPane改成public(之前默认是private):

        双击功能区的按钮“打开任务窗格”自动生成代码,添加下面一行:

         点击这个按钮就把任务窗格显示出来。

        编译运行应该没什么问题:

        关掉任务窗格再点按钮任务窗格就会再次出现。

        因为本次练习我用的是新建的项目,所以加载项里面还有之前练习的编写的加载项。可以很容易地把之前在窗体里实现的功能迁移到窗体控件里面。

六、对象模型知识点

6.1 ThisAddIn.CustomTaskPanes 

         所有自定义任务窗格的集合,自定义任务窗格的类型是CustomTaskPane。

6.2 CustomTaskPane

        自定义任务窗格接口,主要的操作是控制大小和位置,一般我们用鼠标操作,意思不大。


(这里是文档结束)


http://www.ppmy.cn/server/174851.html

相关文章

数据结构——单循环链表clist

前言:大家好😍,本文主要介绍了数据结构——单循环链表clist 目录 一、单循环链表的定义 二、单循环链表的操作 2.1 定义 2.2 初始化 2.3 插入 2.3.1 头插 2.3.2 尾插 2.3.3 按位置插 ​ 2.4 删除 2.4.1 头删 2.4.2 尾删 2.4.3…

2025年Java面试题目收集整理归纳(持续更新)

Java基础系列面试题 为了帮助大家更好地准备 Java 面试,我整理了这份 Java 基础面试题合集。这份合集涵盖了 Java 核心知识点,包括: Java 基础语法: 数据类型、运算符、流程控制、数组、字符串等面向对象编程: 类和对象、继承、多态、抽象类…

代码社区开源协议

开源协议是一种法律文件,用于规定开源软件的使用、修改和分发条件。它平衡了开发者和使用者的权益,同时推动开放协作与技术创新。以下是常见的开源协议及其特点和适用场景: 常见开源协议列表及介绍 1. MIT License 特点:非常宽…

基于Spring Boot的宠物猫认养系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

Ubuntu服务器安装JupyterNotebook,以便通过浏览器访问Jupyter

1.安装Anaconda/Miniconda 在Ubuntu中安装Miniconda 2.创建环境 conda create -n jupyter_env python3.12 3.安装 conda install jupyter notebookpip install -U jupyter 4.配置,生成访问密码 # 1.进入python环境 python# 2.生成sha1密码 from jupyter_serv…

设计模式C++

针对一些经典的常见的场景, 给定了一些对应的解决方案,这个就叫设计模式。 设计模式的作用:使代码的可重用性高,可读性强,灵活性好,可维护性强。 设计原则: 单一职责原则:一个类只做一方面的…

构建rknn的docker镜像

文章目录 安装docker更改镜像源编写dockerfile构建docker镜像构建docker容器 安装docker 瑞芯微开发板自带docker环境,可跳过 # 删除老版本的docker sudo apt-get remove docker docker-engine# 开始安装 sudo apt-get update sudo apt-get install docker.io# 查…

深入理解C++ stl::list 底层实现+模拟实现

欢迎来到干货小仓库!!! "人生没有 Ctrl - Z ,但永远可以 push 新版本" 1.list的介绍 ①stl::list的底层实现是带头双向循环链表结构。 ②list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 ③双向…