当前位置: 首页 > wzjs >正文

东莞专业网站建设公司下载百度 安装

东莞专业网站建设公司,下载百度 安装,文字云网站,网站建设重庆初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

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

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

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

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


        上一篇VSTO(C#)Excel开发10:启动和卸载顺序 事件处理-CSDN博客

        基本的技术我们已经弄得七七八八了,但是当我们在同时打开多个工作簿的时候发现出大问题了:任务窗格只能出现在第一次打开工作簿上,我们在其他工作簿上操作,内容仍然输出到第一个工作簿的任务窗格上。

        这是怎么回事呢?

目录

一、任务窗格创建在哪里

二、管理多个工作簿的任务窗格

三、效果


一、任务窗格创建在哪里

        回头看一下我们之前是如何创建任务窗格的(VSTO(C#)Excel开发7:自定义任务窗格-CSDN博客):

private void ThisAddIn_Startup(object sender, System.EventArgs e){userControl1 = new UserControl1();myPane = this.CustomTaskPanes.Add(userControl1, "userControl1");myPane.Visible = true;

        我们只有唯一的窗体控件,自然只能出现在一个窗体上,这是可以理解的。但是CustomTaskPanes.Add也没说添加到哪里去了啊,这是怎么回事呢?

        原来这个CustomTaskPanes.Add是很鬼的,它自动把任务窗格添加到当前的工作簿上去了。

        所以我们需一个复杂的机制来管理多个工作簿的任务窗格,将工作簿对象和任务窗格关联起来。

二、管理多个工作簿的任务窗格

        我们需要一个类来管理:

using Microsoft.Office.Interop.Excel;
using Microsoft.Office.Tools;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.UI;namespace ctExcelTools
{//管理自定义任务窗格(面板),注意CustomTaskPanes.Add会在当前活动工作簿上创建任务窗格public class PanelMgr{private Dictionary<Workbook, (CustomTaskPane, UserControlFitToOnePage)> m_Panels = new Dictionary<Workbook, (CustomTaskPane, UserControlFitToOnePage)>();public (CustomTaskPane, UserControlFitToOnePage) GetPanel(Workbook workbook){if (!m_Panels.ContainsKey(workbook)){UserControlFitToOnePage userControlFitToOnePage = new UserControlFitToOnePage();CustomTaskPane panel = Globals.ThisAddIn.CustomTaskPanes.Add(userControlFitToOnePage, workbook.Name);m_Panels.Add(workbook, (panel, userControlFitToOnePage));}return m_Panels[workbook];}public void Remove(Workbook workbook){m_Panels.Remove(workbook);}}
}

        这个类的原理就是如果工作簿还没有任务窗格就创建,否则就返回已经存在的。创建的时候用的是工作簿的名字,方便确认功能符合我们的预期,实际使用的时候还是应该用相同的名称。

        在主类里定义一个PanelMgr:

	public partial class ThisAddIn{public PanelMgr panelMgr = new PanelMgr();

        在必要的时候创建:

			(CustomTaskPane, UserControlFitToOnePage) tmp = Globals.ThisAddIn.panelMgr.GetPanel(workbook);tmp.Item1.Visible = true;tmp.Item2.textBox_Info.Text += DateTime.Now.ToString() + "\r\n";

        根据我们前面PanelMge的定义,返回的群组对象的Item1是任务窗格,Item2是窗体控件。

        当然我们也需要在工作簿关闭的时候删除掉PanelMgr里的信息:

			this.Application.WorkbookBeforeClose += Application_WorkbookBeforeClose;private void Application_WorkbookBeforeClose(Microsoft.Office.Interop.Excel.Workbook workbook, ref bool Cancel){//MessageBox.Show("Application_WorkbookBeforeClose");panelMgr.Remove(workbook);}

        忘了删除好像问题也不大? 

三、效果

        执行程序,打开两个工作簿:

        这样问题就解决了。


下一篇 VSTO(C#)Excel开发12:多线程的诡异-CSDN博客


(这里是文档结束) 

http://www.dtcms.com/wzjs/233244.html

相关文章:

  • 四川学校网站建设公网站标题优化排名
  • 做网站代理去拉人国家市场监督管理总局
  • 做阿里巴巴网站 店铺装修免费吗亿驱动力竞价托管
  • 做俄罗斯外贸的网站那种网站怎么搜关键词
  • 淘宝联盟网站建设不完整站长工具推荐
  • 360神搜网站建设百度发广告怎么发
  • 免费高清短视频素材库seo快速排名百度首页
  • 做公司网站要素西安网站设计开发
  • 专业制作网站 郑谷歌seo外包公司哪家好
  • 个人网站的订单爱站网站长seo综合查询工具
  • 网上给别人做设计的网站无锡百度快照优化排名
  • 网站栏目下拉菜单快速排名怎么做
  • 做下载网站赚钱微信营销号
  • 网站准备建设的内容搜索引擎优化的核心是
  • 网站运营推广怎做百度网盘怎么提取别人资源
  • 陕西做天然气公司网站免费二级域名分发网站源码
  • 如需武汉手机网站建设跨境电商平台有哪些?
  • 环保网站建设价格淄博网站优化
  • 自己的主机做网站服务器太原seo外包服务
  • 什么是理财北京网站建设公司营销手段和营销方式
  • 珠海制作公司网站百度一下官方下载安装
  • 手机访问跳转手机网站百度网络营销app下载
  • 临安农家乐做网站十大营销模式
  • 公司网站日常维护网络推广服务协议
  • 刘涛做的婴儿玩具网站手机百度如何发布广告
  • 二级域名做非法网站郑州做网站最好的公司
  • 广州网站建设优化方案seo外包靠谱
  • 营销网站建设技术自助优化排名工具
  • 做游戏网站的目地营销软件排名
  • 网站开发价格seo和sem是什么