VSTO 系列(06)-自定义任务窗格
任务窗格 (task pane) 是 VSTO 提供的主要界面之一,运行时任务窗格的界面看起来如下。本文假设我们要实现一个方便自己进行拷贝和粘贴的多重剪贴板,实现将单元格中需要反复使用的文本加载到 ListBox,并且能够拷贝到选中的单元格中。
界面设计
任务窗格本质上是一个 User Control,在工程中新建一个 user control:
将 User Control 命名为 ClipBoardPro,设计界面如下:
在 ClipboardPro 类代码中,编写四个按钮单击事件的代码:
using Microsoft.Office.Interop.Excel;
using System;
using System.Windows.Forms;
using WinForm = System.Windows.Forms;namespace VSTODemo
{public partial class ClipBoardPro : UserControl{public ClipBoardPro(){InitializeComponent();}private void btnAdd_Click(object sender, EventArgs e){string content = ThisAddIn.ExcelApp.ActiveCell.Value;if (lstContent.FindStringExact(content) == WinForm.ListBox.NoMatches) {lstContent.Items.Add(content);}}private void btnCopy_Click(object sender, EventArgs e){if (lstContent.SelectedIndex != -1) {foreach(Range cell in ThisAddIn.ExcelApp.Selection) {cell.Value = lstContent.Text;} }}private void btnClearAll_Click(object sender, EventArgs e) {lstContent.Items.Clear();}private void btnClearCurrent_Click(object sender, EventArgs e) {lstContent.Items.RemoveAt(lstContent.SelectedIndex);}}
}
加载任务窗格
为了实现任务窗格的复用,创建一个静态类:
namespace VSTODemo
{public static class TaskPaneShared{public static Microsoft.Office.Tools.CustomTaskPane taskPane;}
}
在 ThisAddIn 的 ThisAddIn_Startup 事件中加载:
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{ExcelApp = Globals.ThisAddIn.Application;// 初始化TaskPaneClipBoardPro clipboard = new ClipBoardPro();TaskPaneShared.taskPane = Globals.ThisAddIn.CustomTaskPanes.Add(clipboard, "剪贴板");TaskPaneShared.taskPane.DockPosition = MsoCTPDockPosition.msoCTPDockPositionRight;TaskPaneShared.taskPane.DockPositionRestrict = MsoCTPDockPositionRestrict.msoCTPDockPositionRestrictNoChange;TaskPaneShared.taskPane.Width = 500;// VisibleChange EventTaskPaneShared.taskPane.VisibleChanged += new System.EventHandler(taskpane_VisibleChanged);
}
默认情况下,Task Pane 位于界面的右侧停靠,允许通过 DockPosition
属性设置停靠在左右、上下或者浮动。DockPostionRestrict
属性设置是否允许用户改变停靠的位置。
显示和隐藏任务窗格
在 Ribbon1 中新建一个 checkbox,界面如下:
编写 cbShowTaskPanel_Click 事件:
private void cbShowTaskPanel_Click(object sender, RibbonControlEventArgs e)
{TaskPaneShared.taskPane.Visible = cbShowTaskPanel.Checked;
}
因为用户也可以手工关闭任务窗格(其实是隐藏),为了保持界面同步,在 TaskPane 的 visibleChange 事件中编写如下代码:
源代码
06-Custom Task Pane - 码云
VSTO 系列(06)-自定义任务窗格相关推荐
- VSTO Office二次开发对PPT自定义任务窗格测试
上篇文章对VSTO Office二次开发操作PPT功能做了简单测试,主要是如何创建一个外接程序并在新建PPT幻灯片时添加自定义文本信息.如何简单自定义任务窗格.如何添加可视化功能区的简单介绍,应该对于 ...
- RNN 循环神经网络系列 5: 自定义单元
原文地址:RECURRENT NEURAL NETWORK (RNN) – PART 5: CUSTOM CELLS 原文作者:GokuMohandas 译文出自:掘金翻译计划 本文永久链接:gith ...
- 数据可视化系列-06数据分析工具QuickBI
文章目录 数据可视化系列-06数据分析工具QuickBI 一文介绍QuickBI Quick BI 的基本对象 快速入门 Quick BI产品架构界面说明 菜单栏 我的看板 工作台首页 通过仪表板分析 ...
- Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论
Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...
- Docker系列06—基于容器制作镜像并上传到Docker Registry
Docker系列06-基于容器制作镜像并上传到Docker Registry 1.制作镜像 1.1 镜像的生成途径 基于容器制作 dockerfile,docker build 本篇主要详细讲解基于容 ...
- SharePoint 2013 图文开发系列之自定义字段
原文:SharePoint 2013 图文开发系列之自定义字段 SharePoint使用的优势,就在于开箱即用.快速搭建,SharePoint自身为我们提供了很多字段类型,已经很丰富了.但是,在实际应 ...
- vSphere 7 With K8s系列06:创建命名空间
vSphere 7 With K8s系列06:创建命名空间 原创 李严省 虚实之路 9月24日 收录于话题 #vSphere with K8s 9个 上一篇文章已经介绍了如何开启vSphere7 wi ...
- SpringBoot 2.0 系列003 -- 自定义Parent
为什么80%的码农都做不了架构师?>>> SpringBoot 2.0 系列003 --自定义Parent 默认我们使用SpringBoot的方式是通过SB的parent项目的 ...
- 委托、Lambda表达式、事件系列06,使用Action实现观察者模式,体验委托和事件的区别...
在"实现观察者模式(Observer Pattern)的2种方式"中,曾经通过接口的方式.委托与事件的方式实现过观察者模式.本篇体验使用Action实现此模式,并从中体验委托与事件 ...
- 如何在Outlook中创建自定义导航窗格
Outlook's navigation pane lets you navigate to different folders, mailboxes, and groups. However, it ...
最新文章
- Android PullToZoomListView实现放大回弹效果
- Android中的各种Adapter
- Hive 0.13.1 和HBase 0.98.6.1整合
- 手机格斗网游该如何避免延迟?
- No plugin found for prefix ‘compile‘ in the current project
- Spring4:没有默认构造函数的基于CGLIB的代理类
- Linux中文档去掉windows文本的多余的回车符(^M)
- jdbc预编译插入数据操作
- Win7下用的XP虚拟机
- java-后端八股文
- python内置函数( )可以返回列表长度_python内置函数总结
- 网络摄像机如何安装拾音器?进行同步录音
- 【深度学习之美】全面连接困何处,卷积网络见解深(入门系列之九)
- 剪刀石头布(自留底)01
- Ubuntu16.04下NVIDIA显卡驱动安装(华硕飞行堡垒7代,1660ti)
- 机器学习发展历史(符号学习、统计机器学习、深度学习)
- 如何在程序中创建快捷方式
- 浏览器控制台过滤无用的提示和报错
- Beehive:用于修复分布式存储系统中多个故障的纠删码
- asp动态网页设计选用服务器,ASP动态网页设计
热门文章
- Hadoop基本组成
- 论文笔记翻译——Enhanced LSTM for Natural Language Inference(ESIM)
- 基于php022公司企业网站设计-计算机毕业设计
- 流浪大师善始者众善终者寡_流浪者–适合每个开发人员的瑞士军刀
- Office 2003 sp3(CVE-2012-0158)漏洞分析报告
- 魅族16sPro更新体验版Flyme8,手机桌面更丰富,新增逆光自拍模式
- Live Server 正常启用 但是网页不更新 解决方法
- Knockout绑定语法
- CentOS下搭建LAMP
- 【bean的生命周期】--- BeanDefinition和BeanFactoryPostProcessor简介