設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

12下一頁
返回列表 發(fā)新帖
查看: 9751|回復(fù): 13
打印 上一主題 下一主題

【補(bǔ)充】關(guān)于VSTO第三課:事件與委托

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2014-3-13 11:17:34 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 faunus 于 2014-3-16 16:02 編輯

關(guān)于事件的來源,是本課程的核心內(nèi)容之一作為初級班的課程,重點(diǎn)不是教大家如何時(shí)理解這些事件,
而是讓大家知道事件來原于哪里,是與漁而非與魚。

這里列出了VSTO可能涉及的到的各種重要事件來源,包括:
1、插件本身的事件,不多只有四個(gè)
2、應(yīng)用程序的事件(Application),這個(gè)是重點(diǎn)
3、工作簿的事件(Workbook),重要對象
4、工作表的事件(Worksheet),重要對象
5、各種控件引發(fā)的事件,包括了RIBBON控件、窗體、窗體控件等等

關(guān)于第五點(diǎn),我會安排一個(gè)案例,來解決事件背后運(yùn)作的真實(shí)原理,


【原創(chuàng)】RibbonButton點(diǎn)擊事件的真實(shí)原理
http://ctxi.cn/forum.p ... 8114&fromuid=230987



這個(gè)不要求大家在初級課程中去掌握,有興趣的話可以探索一番,
比如我們的天平大哥,會給大家提供一些學(xué)習(xí)心得:


對Windows消息的初步理解
http://ctxi.cn/forum.p ... 8126&fromuid=230987


附件:








本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?注冊

x
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享分享 分享淘帖 訂閱訂閱
2#
 樓主| 發(fā)表于 2014-3-13 11:17:52 | 只看該作者
本帖最后由 faunus 于 2014-3-13 11:26 編輯

1、插件本身的事件
插件對象,也就是ThisAddin對象:
  1. public sealed partial class ThisAddIn : Microsoft.Office.Tools.AddInBase
復(fù)制代碼
ThisAddin的事件來源于AddInBase
事件并不多,總共只有四個(gè)




其實(shí)我們真正關(guān)心的只有一個(gè):
  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.         }
復(fù)制代碼
注冊代碼如下:
  1.         private void InternalStartup()
  2.         {
  3.             this.Startup += new System.EventHandler(ThisAddIn_Startup);
  4.             this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
  5.         }
復(fù)制代碼
用法如下:
  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.         }
復(fù)制代碼
其它內(nèi)容,可以結(jié)合本課程與PPT來理解:

【課程通知】201403013-事件與委托
http://ctxi.cn/forum.p ... &fromuid=230987


其它事件還包括:
  1. BindingContextChanged
  2. Disposed
  3. Shutdown
  4. Startup
復(fù)制代碼
具體內(nèi)容見附件


附件:





本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?注冊

x
3#
 樓主| 發(fā)表于 2014-3-13 11:18:03 | 只看該作者
本帖最后由 faunus 于 2014-3-13 12:54 編輯

2、應(yīng)用程序的事件(Application)
應(yīng)用程序是指excel、powerpoint、word對像本身。
Application便是應(yīng)用程序(宿主對象),
在同一個(gè)進(jìn)程中,多個(gè)插件(ThisAddin)可以共享該對象的事件。
值得注意的是,插件本身與應(yīng)用程序是隔離的,占用獨(dú)立的AppDomain域,
這樣做的好處是,當(dāng)插件崩潰時(shí),不會導(dǎo)至其它插件或應(yīng)用程序本身崩潰。
重點(diǎn)在于:
應(yīng)用程序是事件的“發(fā)布者”,事件由Application對象提供
插件是“訂閱者”,只是告訴事件觸發(fā)時(shí),如何行動(dòng),
發(fā)布者只有一個(gè),訂閱者可以多個(gè),所以一個(gè)事件可以激活多次調(diào)用。

Application擁有大量的事件,多達(dá)47個(gè),
其中2013新增有4個(gè)事件,2010提供了6個(gè)保護(hù)模式下的事件,
本次課程的目的不是教會你如何運(yùn)用這些剚件,
而是讓你知道這些事件源自哪里,
怎么用法我想更多需要源于實(shí)踐,
而且這么多的事件也不可能一一講解到位,
但是希望同學(xué)們能夠有針對性的償試著應(yīng)用并發(fā)貼分享。

工作表事件與工作簿事件是其中的主體,
對開商業(yè)開發(fā)來說,這些事件的使用至關(guān)重要。

Application對象的定義
  1. public interface Application : _Application, AppEvents_Event
復(fù)制代碼


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


附件:





本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?注冊

x
4#
 樓主| 發(fā)表于 2014-3-13 11:18:15 | 只看該作者
本帖最后由 faunus 于 2014-3-13 12:59 編輯

3、工作簿的事件(Workbook)
Workbook對象的定義
  1. public interface Workbook : _Workbook, WorkbookEvents_Event
復(fù)制代碼

涉及工作簿的事件也不在少數(shù),共計(jì)40個(gè):
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#
 樓主| 發(fā)表于 2014-3-13 11:18:35 | 只看該作者
本帖最后由 faunus 于 2014-3-13 13:02 編輯

4、工作表的事件(Worksheet)
Worksheet對象定義:
  1. public interface Worksheet : _Worksheet, DocEvents_Event
復(fù)制代碼

共計(jì)17個(gè)事件:
Activate
BeforeDelete
BeforeDoubleClick
BeforeRightClick
Calculate
Change
Deactivate
FollowHyperlink
LensGalleryRenderComplete
PivotTableAfterValueChange
PivotTableBeforeAllocateChanges
PivotTableBeforeCommitChanges
PivotTableBeforeDiscardChanges
PivotTableChangeSync
PivotTableUpdate
SelectionChange
TableUpdate


附件:



本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?注冊

x
6#
 樓主| 發(fā)表于 2014-3-13 11:18:47 | 只看該作者
本帖最后由 faunus 于 2014-3-13 13:18 編輯

5、各種控件引發(fā)的事件
除了插件及各種應(yīng)用對象帶來的事件,
VSTO項(xiàng)目中涉及各種界面要素也會帶來大量的事件。

【RIBBON家族】
ribbon的定義
  1. partial class Ribbon1 : Microsoft.Office.Tools.Ribbon.RibbonBase
復(fù)制代碼
ribbon本身帶有兩個(gè)事件,源于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();
復(fù)制代碼
調(diào)用部分代碼為:
  1.         private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
  2.         {
  3.             System.Windows.Forms.MessageBox.Show("Ribbon1-1");
  4.         }
復(fù)制代碼
其它RIBBON控件,都會帶來或多或少的大量事件:


【窗體、自定義控件、控件】
TaskPan調(diào)用“UserControl”自定義控件
DialogBoxLauncher調(diào)用“WinForm”用戶窗體
而這兩者本身又帶有大量的控件。
關(guān)于控件的一些觸發(fā)原理可以參考:
【補(bǔ)充材料】關(guān)于VSTO第三課:事件與委托
http://ctxi.cn/forum.p ... 8129&fromuid=230987




本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?注冊

x
7#
發(fā)表于 2014-3-13 11:29:21 | 只看該作者
先頂了再看

點(diǎn)擊這里給我發(fā)消息

8#
發(fā)表于 2014-3-13 12:45:27 | 只看該作者
學(xué)習(xí)一下先 !
9#
發(fā)表于 2014-3-13 13:21:02 | 只看該作者
頂啊
回復(fù)

使用道具 舉報(bào)

10#
發(fā)表于 2014-3-13 13:32:15 | 只看該作者
頂起學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機(jī)版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2024-10-23 10:27 , Processed in 0.116426 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表