HOW TO:在特定的專案類型的巨集中建立事件處理常式
更新:2007 年 11 月
每個巨集專案中的 EnvironmentEvents 範本都會包含一些預先宣告的事件處理常式,您可以實作這些事件處理常式來回應一些環境事件,例如視窗關閉等。提供實作 (Implementation) 之後,每當 Visual Studio 整合式開發環境 (IDE) 中發生指定的事件時,這些一般擴充性事件處理常式就會自動攔截事件。如需詳細資訊,請參閱 HOW TO:處理巨集中的環境事件。
您也可以在 EnvironmentEvents 範本中加入自己的 IDE 事件處理常式。您只要宣告事件變數、提供事件處理常式程式碼,然後加入 OnMacrosRuntimeReset 和 OnStartupComplete 處理常式,就可以在 Visual Studio IDE 中自動攔截事件。
在這個範例中,會加入 ReferencesEvents 事件處理常式,當 Visual C#、Visual Basic 或 Visual J# 專案中加入參考時便會引發該事件處理常式。
注意事項: |
---|
根據目前使用的設定與版本,您所看到的對話方塊與功能表命令可能會與 [說明] 中所描述的不同。使用 [一般開發設定] 開發了這些程序。若要變更設定,請從 [工具] 功能表中選擇 [匯入和匯出設定]。如需詳細資訊,請參閱 Visual Studio 設定。 |
若要將 VSLangProj 事件處理常式加入至巨集
在 [巨集 IDE] 中的 [專案] 功能表上,按一下 [加入參考]。
在 [加入參考] 對話方塊中選取 [VSLangProj],按一下 [加入],然後再按 [確定]。
在 [巨集 IDE] 的 [類別檢視] 總管窗格中,展開 [MyMacros] 並按兩下 [EnvironmentEvents],將它顯示在巨集編輯器窗格中。
在 [EnvironmentEvents] 模組的最上方,加入下列程式碼:
Imports VSLangProj
在標記為「自動產生的程式碼,不修改」之 [EnvironmentEvents] 模組的隱藏區域後面,輸入事件的宣告:
<System.ContextStaticAttribute()> Public WithEvents refEvents As VSLangProj.ReferencesEvents
這個宣告會將 ReferencesEvents 及其方法加入至 [巨集 IDE] 程式碼編輯器的 [類別名稱] 和 [方法名稱] 下拉式方塊 (Drop-Down Box) 中。
使用 [類別名稱] 下拉式方塊選取 DTEEvents,再使用 [方法名稱] 下拉式方塊選取 [OnMacrosRuntimeReset] 和 [OnStartupComplete]。
這時便會建立這兩個事件的事件處理常式。必須要有這些事件處理常式,ReferencesEvents 處理常式才能在每次 Visual Studio IDE 中發生事件時自動攔截。
依照下列程式碼所示加入 EnvironmentEvents.refEvents 轉換,修改事件處理常式。若要在 Visual Basic 或 Visual J# 專案中加入參考時攔截事件,請分別以 VBReferencesEvents 或 VJSharpReferencesEvents 取代 CSharpReferencesEvents 字串。
Public Sub DTEEvents_OnMacrosRuntimeReset() Handles_ DTEEvents.OnMacrosRuntimeReset EnvironmentEvents.refEvents_ =CType(DTE.Events.GetObject("CSharpReferencesEvents")_ , ReferencesEvents) End Sub
和
Private Sub DTEEvents_OnStartupComplete() Handles_ DTEEvents.OnStartupComplete EnvironmentEvents.refEvents_ = CType(DTE.Events.GetObject("CSharpReferencesEvents")_ , ReferencesEvents) End Sub
最後,請將下列程式碼貼入 EnvironmentEvents 模組中,或是從 [類別名稱] 下拉式方塊中選取 [refEvents] 並從 [方法名稱] 下拉式方塊中選取 [ReferenceAdded],建立事件處理常式。依照下列程式碼所示,將 MsgBox(pReference.Name & " was added to the project.") 這一行程式碼加入至事件處理常式中。
Public Sub refEvents_ReferenceAdded(ByVal pReference As VSLangProj.Reference) Handles refEvents.ReferenceAdded MsgBox(pReference.Name & " was added to the project.") End Sub
若要測試事件處理常式,請建立新的 Visual C# 專案 (任何類型都可以)。
每個自動加入至專案範本的參考都會顯示訊息方塊。
範例
這個程式碼會顯示完整的範例。您可以將下列程式碼貼入巨集專案的 EnvironmentEvents 模組中。
注意事項: |
---|
加入這個事件處理常式之後,每次將參考加入至指定的專案類型時,便會引發此事件處理常式。如果您不希望每次加入參考時都收到通知,請將這個程式碼標記為註解。 |
<System.ContextStaticAttribute()> Public WithEvents refEvents As VSLangProj.ReferencesEvents
Public Sub DTEEvents_OnMacrosRuntimeReset() Handles_
DTEEvents.OnMacrosRuntimeReset
EnvironmentEvents.refEvents= _ CType(DTE.Events.GetObject("CSharpReferencesEvents")_ , VSLangProj.ReferencesEvents)
End Sub
Private Sub DTEEvents_OnStartupComplete() Handles_
DTEEvents.OnStartupComplete
EnvironmentEvents.refEvents = _ CType(DTE.Events.GetObject("CSharpReferencesEvents")_ , VSLangProj.ReferencesEvents)
End Sub
Public Sub refEvents_ReferenceAdded(ByVal pReference As VSLangProj.Reference) Handles refEvents.ReferenceAdded
MsgBox(pReference.Name & " was added to the project.")
End Sub
請參閱
工作
HOW TO:處理 Automation 事件 (Visual Basic)
HOW TO:處理 Automation 事件 (Visual C#)