Office中国论坛/Access中国论坛
标题:
【补充】关于VSTO第三课:事件与委托
[打印本页]
作者:
faunus
时间:
2014-3-13 11:17
标题:
【补充】关于VSTO第三课:事件与委托
本帖最后由 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
附件:
[attach]53519[/attach]
[attach]53516[/attach]
[attach]53517[/attach]
[attach]53520[/attach]
[attach]53518[/attach]
作者:
faunus
时间:
2014-3-13 11:17
本帖最后由 faunus 于 2014-3-13 11:26 编辑
1、插件本身的事件
插件对象,也就是ThisAddin对象:
public sealed partial class ThisAddIn : Microsoft.Office.Tools.AddInBase
复制代码
ThisAddin的事件来源于AddInBase
事件并不多,总共只有四个
[attach]53510[/attach]
其实我们真正关心的只有一个:
public event EventHandler Startup
{
add
{
this._inner.Startup += value;
}
remove
{
this._inner.Startup -= value;
}
}
复制代码
注册代码如下:
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}
复制代码
用法如下:
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Excel.Workbook book;
Excel.Worksheet sheet;
System.Windows.Forms.MessageBox.Show("ThisAddIn_Startup-1");
Event.Start();
}
复制代码
其它内容,可以结合本课程与PPT来理解:
【课程通知】201403013-事件与委托
http://www.office-cn.net/forum.p ... &fromuid=230987
其它事件还包括:
BindingContextChanged
Disposed
Shutdown
Startup
复制代码
具体内容见附件
附件:
[attach]53511[/attach]
作者:
faunus
时间:
2014-3-13 11:18
本帖最后由 faunus 于 2014-3-13 12:54 编辑
2、应用程序的事件(Application)
应用程序是指excel、powerpoint、word对像本身。
Application便是应用程序(宿主对象),
在同一个进程中,多个插件(ThisAddin)可以共享该对象的事件。
值得注意的是,插件本身与应用程序是隔离的,占用独立的AppDomain域,
这样做的好处是,当插件崩溃时,不会导至其它插件或应用程序本身崩溃。
重点在于:
应用程序是事件的“发布者”,事件由Application对象提供
插件是“订阅者”,只是告诉事件触发时,如何行动,
发布者只有一个,订阅者可以多个,所以一个事件可以激活多次调用。
Application拥有大量的事件,多达47个,
其中2013新增有4个事件,2010提供了6个保护模式下的事件,
本次课程的目的不是教会你如何运用这些剚件,
而是让你知道这些事件源自哪里,
怎么用法我想更多需要源于实践,
而且这么多的事件也不可能一一讲解到位,
但是希望同学们能够有针对性的偿试着应用并发贴分享。
工作表事件与工作簿事件是其中的主体,
对开商业开发来说,这些事件的使用至关重要。
Application对象的定义
public interface Application : _Application, AppEvents_Event
复制代码
以下附件列出Application所拥有的所有事件:
附件:
[attach]53512[/attach]
作者:
faunus
时间:
2014-3-13 11:18
本帖最后由 faunus 于 2014-3-13 12:59 编辑
3、工作簿的事件(Workbook)
Workbook对象的定义
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
附件:
[attach]53513[/attach]
作者:
faunus
时间:
2014-3-13 11:18
本帖最后由 faunus 于 2014-3-13 13:02 编辑
4、工作表的事件(Worksheet)
Worksheet对象定义:
public interface Worksheet : _Worksheet, DocEvents_Event
复制代码
共计17个事件:
Activate
BeforeDelete
BeforeDoubleClick
BeforeRightClick
Calculate
Change
Deactivate
FollowHyperlink
LensGalleryRenderComplete
PivotTableAfterValueChange
PivotTableBeforeAllocateChanges
PivotTableBeforeCommitChanges
PivotTableBeforeDiscardChanges
PivotTableChangeSync
PivotTableUpdate
SelectionChange
TableUpdate
附件:
[attach]53514[/attach]
作者:
faunus
时间:
2014-3-13 11:18
本帖最后由 faunus 于 2014-3-13 13:18 编辑
5、各种控件引发的事件
除了插件及各种应用对象带来的事件,
VSTO项目中涉及各种界面要素也会带来大量的事件。
【RIBBON家族】
ribbon的定义
partial class Ribbon1 : Microsoft.Office.Tools.Ribbon.RibbonBase
复制代码
ribbon本身带有两个事件,源于RibbonBase
分别为Load和Close,其中Load事件可用于一些初始化的工作
注册部分代码为:
this.Name = "Ribbon1";
this.RibbonType = "Microsoft.Excel.Workbook";
this.Tabs.Add(this.tab1);
this.Load += new Microsoft.Office.Tools.Ribbon.RibbonUIEventHandler(this.Ribbon1_Load);
this.tab1.ResumeLayout(false);
this.tab1.PerformLayout();
this.group1.ResumeLayout(false);
this.group1.PerformLayout();
复制代码
调用部分代码为:
private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
System.Windows.Forms.MessageBox.Show("Ribbon1-1");
}
复制代码
其它RIBBON控件,都会带来或多或少的大量事件:
[attach]53515[/attach]
【窗体、自定义控件、控件】
TaskPan调用“UserControl”自定义控件
DialogBoxLauncher调用“WinForm”用户窗体
而这两者本身又带有大量的控件。
关于控件的一些触发原理可以参考:
【补充材料】关于VSTO第三课:事件与委托
http://www.office-cn.net/forum.p ... 8129&fromuid=230987
作者:
tianping
时间:
2014-3-13 11:29
先顶了再看
作者:
microfaint
时间:
2014-3-13 12:45
学习一下先 !
作者:
紫电
时间:
2014-3-13 13:21
顶啊
作者:
hehex
时间:
2014-3-13 13:32
顶起学习
作者:
ET_ET
时间:
2014-3-13 13:33
好多
作者:
醉酒狂生
时间:
2014-3-13 15:10
火钳刘明
作者:
小二
时间:
2014-3-13 22:26
赞一个
作者:
小影
时间:
2014-3-14 10:59
顶起学习
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3