设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 9359|回复: 13
打印 上一主题 下一主题

【补充】关于VSTO第三课:事件与委托

[复制链接]
跳转到指定楼层
1#
发表于 2014-3-13 11:17:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 faunus 于 2014-3-16 16:02 编辑

关于事件的来源,是本课程的核心内容之一作为初级班的课程,重点不是教大家如何时理解这些事件,
而是让大家知道事件来原于哪里,是与渔而非与鱼

这里列出了VSTO可能涉及的到的各种重要事件来源,包括:
1、插件本身的事件,不多只有四个
2、应用程序的事件(Application),这个是重点
3、工作簿的事件(Workbook),重要对象
4、工作表的事件(Worksheet),重要对象
5、各种控件引发的事件,包括了RIBBON控件、窗体、窗体控件等等

关于第五点,我会安排一个案例,来解决事件背后运作的真实原理,


【原创】RibbonButton点击事件的真实原理
http://www.office-cn.net/forum.p ... 8114&fromuid=230987



这个不要求大家在初级课程中去掌握,有兴趣的话可以探索一番,
比如我们的天平大哥,会给大家提供一些学习心得:


对Windows消息的初步理解
http://www.office-cn.net/forum.p ... 8126&fromuid=230987


附件:








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2014-3-13 11:17:52 | 只看该作者
本帖最后由 faunus 于 2014-3-13 11:26 编辑

1、插件本身的事件
插件对象,也就是ThisAddin对象:
  1. public sealed partial class ThisAddIn : Microsoft.Office.Tools.AddInBase
复制代码
ThisAddin的事件来源于AddInBase
事件并不多,总共只有四个




其实我们真正关心的只有一个:
  1.         public event EventHandler Startup
  2.         {
  3.             add
  4.             {
  5.                 this._inner.Startup += value;
  6.             }
  7.             remove
  8.             {
  9.                 this._inner.Startup -= value;
  10.             }
  11.         }
复制代码
注册代码如下:
  1.         private void InternalStartup()
  2.         {
  3.             this.Startup += new System.EventHandler(ThisAddIn_Startup);
  4.             this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
  5.         }
复制代码
用法如下:
  1.         private void ThisAddIn_Startup(object sender, System.EventArgs e)
  2.         {
  3.             Excel.Workbook book;
  4.             Excel.Worksheet sheet;

  5.             System.Windows.Forms.MessageBox.Show("ThisAddIn_Startup-1");
  6.             Event.Start();
  7.         }
复制代码
其它内容,可以结合本课程与PPT来理解:

【课程通知】201403013-事件与委托
http://www.office-cn.net/forum.p ... &fromuid=230987


其它事件还包括:
  1. BindingContextChanged
  2. Disposed
  3. Shutdown
  4. Startup
复制代码
具体内容见附件


附件:





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
3#
 楼主| 发表于 2014-3-13 11:18:03 | 只看该作者
本帖最后由 faunus 于 2014-3-13 12:54 编辑

2、应用程序的事件(Application)
应用程序是指excel、powerpoint、word对像本身。
Application便是应用程序(宿主对象),
在同一个进程中,多个插件(ThisAddin)可以共享该对象的事件。
值得注意的是,插件本身与应用程序是隔离的,占用独立的AppDomain域,
这样做的好处是,当插件崩溃时,不会导至其它插件或应用程序本身崩溃。
重点在于:
应用程序是事件的“发布者”,事件由Application对象提供
插件是“订阅者”,只是告诉事件触发时,如何行动,
发布者只有一个,订阅者可以多个,所以一个事件可以激活多次调用。

Application拥有大量的事件,多达47个,
其中2013新增有4个事件,2010提供了6个保护模式下的事件,
本次课程的目的不是教会你如何运用这些剚件,
而是让你知道这些事件源自哪里,
怎么用法我想更多需要源于实践,
而且这么多的事件也不可能一一讲解到位,
但是希望同学们能够有针对性的偿试着应用并发贴分享。

工作表事件与工作簿事件是其中的主体,
对开商业开发来说,这些事件的使用至关重要。

Application对象的定义
  1. public interface Application : _Application, AppEvents_Event
复制代码


以下附件列出Application所拥有的所有事件:


附件:





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
4#
 楼主| 发表于 2014-3-13 11:18:15 | 只看该作者
本帖最后由 faunus 于 2014-3-13 12:59 编辑

3、工作簿的事件(Workbook)
Workbook对象的定义
  1. public interface Workbook : _Workbook, WorkbookEvents_Event
复制代码

涉及工作簿的事件也不在少数,共计40个:
BeforeClose
BeforePrint
BeforeSave
BeforeXmlExport
BeforeXmlImport
Deactivate
ModelChange
NewChart
NewSheet
Open
PivotTableCloseConnection
PivotTableOpenConnection
RowsetComplete
SheetActivate
SheetBeforeDelete
SheetBeforeDoubleClick
SheetBeforeRightClick
SheetCalculate
SheetChange
SheetDeactivate
SheetFollowHyperlink
SheetLensGalleryRenderComplete
SheetPivotTableAfterValueChange
SheetPivotTableBeforeAllocateChanges
SheetPivotTableBeforeCommitChanges
SheetPivotTableBeforeDiscardChanges
SheetPivotTableChangeSync
SheetPivotTableUpdate
SheetSelectionChange
SheetTableUpdate
Sync
WindowActivate
WindowDeactivate
WindowResize

附件:





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
5#
 楼主| 发表于 2014-3-13 11:18:35 | 只看该作者
本帖最后由 faunus 于 2014-3-13 13:02 编辑

4、工作表的事件(Worksheet)
Worksheet对象定义:
  1. public interface Worksheet : _Worksheet, DocEvents_Event
复制代码

共计17个事件:
Activate
BeforeDelete
BeforeDoubleClick
BeforeRightClick
Calculate
Change
Deactivate
FollowHyperlink
LensGalleryRenderComplete
PivotTableAfterValueChange
PivotTableBeforeAllocateChanges
PivotTableBeforeCommitChanges
PivotTableBeforeDiscardChanges
PivotTableChangeSync
PivotTableUpdate
SelectionChange
TableUpdate


附件:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
6#
 楼主| 发表于 2014-3-13 11:18:47 | 只看该作者
本帖最后由 faunus 于 2014-3-13 13:18 编辑

5、各种控件引发的事件
除了插件及各种应用对象带来的事件,
VSTO项目中涉及各种界面要素也会带来大量的事件。

【RIBBON家族】
ribbon的定义
  1. partial class Ribbon1 : Microsoft.Office.Tools.Ribbon.RibbonBase
复制代码
ribbon本身带有两个事件,源于RibbonBase
分别为Load和Close,其中Load事件可用于一些初始化的工作

注册部分代码为:
  1.             this.Name = "Ribbon1";
  2.             this.RibbonType = "Microsoft.Excel.Workbook";
  3.             this.Tabs.Add(this.tab1);
  4.             this.Load += new Microsoft.Office.Tools.Ribbon.RibbonUIEventHandler(this.Ribbon1_Load);
  5.             this.tab1.ResumeLayout(false);
  6.             this.tab1.PerformLayout();
  7.             this.group1.ResumeLayout(false);
  8.             this.group1.PerformLayout();
复制代码
调用部分代码为:
  1.         private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
  2.         {
  3.             System.Windows.Forms.MessageBox.Show("Ribbon1-1");
  4.         }
复制代码
其它RIBBON控件,都会带来或多或少的大量事件:


【窗体、自定义控件、控件】
TaskPan调用“UserControl”自定义控件
DialogBoxLauncher调用“WinForm”用户窗体
而这两者本身又带有大量的控件。
关于控件的一些触发原理可以参考:
【补充材料】关于VSTO第三课:事件与委托
http://www.office-cn.net/forum.p ... 8129&fromuid=230987




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
7#
发表于 2014-3-13 11:29:21 | 只看该作者
先顶了再看

点击这里给我发消息

8#
发表于 2014-3-13 12:45:27 | 只看该作者
学习一下先 !
9#
发表于 2014-3-13 13:21:02 | 只看该作者
顶啊
回复

使用道具 举报

10#
发表于 2014-3-13 13:32:15 | 只看该作者
顶起学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-29 15:27 , Processed in 0.112315 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表