Office 项目中的事件

每个 Office 项目模板都会自动生成若干个事件处理程序。 文档级自定义项的事件处理程序与应用程序级外接程序的事件处理程序稍有不同。

**适用于:**本主题中的信息适用于 Microsoft Office 2010 和 2007 Microsoft Office system 的文档级项目和应用程序级项目。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能

文档级项目

Visual Studio 在文档级自定义项中提供新的或现有文档或工作表的已生成隐藏代码。 这些代码引发两个不同的事件:Startup 和 Shutdown。

Startup 事件

在运行文档以及程序集中的所有初始化代码之后,将为每个宿主项(文档、工作簿或工作表)引发 Startup 事件。 不到万不得已不要在正在运行您的代码的类的构造函数中运行。 有关宿主项的更多信息,请参见宿主项和宿主控件概述

在创建文档级项目时,Visual Studio 会在生成的代码文件中为 Startup 事件创建事件处理程序:

  • 对于 Microsoft Office Word 项目,事件处理程序被命名为 ThisDocument_Startup。

  • 对于 Microsoft Office Excel 项目,事件处理程序具有以下名称:

    • Sheet1_Startup

    • Sheet2_Startup

    • Sheet3_Startup

    • ThisWorkbook_Startup

Shutdown 事件

即将卸载在其中加载代码的应用程序域时,会为每个宿主项(文档或工作表)引发 Shutdown 事件。 在卸载时,不到万不得已不要在类中进行调用。

在创建文档级项目时,Visual Studio 会在生成的代码文件中为 Shutdown 事件创建事件处理程序:

  • 对于 Microsoft Office Word 项目,事件处理程序被命名为 ThisDocument_Shutdown。

  • 对于 Microsoft Office Excel 项目,事件处理程序具有以下名称:

    • Sheet1_Shutdown

    • Sheet2_Shutdown

    • Sheet3_Shutdown

    • ThisWorkbook_Shutdown

提示

不要在文档的 Shutdown 事件处理程序执行期间以编程方式移除控件。 Shutdown 事件发生时,文档的 UI 元素不再可用。 如果要在应用程序关闭之前移除控件,请将代码添加到另一个事件处理程序中,如 BeforeClose 或 BeforeSave。

事件处理程序方法声明

传递给每个事件处理程序方法声明的参数都是相同的:sender 和 e。 在 Excel 中,sender 参数引用的是工作表,例如 Sheet1 或 Sheet2;在 Word 中,sender 参数引用的是文档。 e 参数指的是事件的标准参数,这在本例中没有使用。

下面的代码示例演示 Word 的文档级项目中的默认事件处理程序。

Private Sub ThisDocument_Startup(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles Me.Startup

End Sub

Private Sub ThisDocument_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles Me.Shutdown

End Sub
private void ThisDocument_Startup(object sender, System.EventArgs e)
{
}

private void ThisDocument_Shutdown(object sender, System.EventArgs e)
{
}

下面的代码示例演示 Excel 的文档级项目中的默认事件处理程序。

提示

下面的代码示例演示 Sheet1 类中的事件处理程序。 其他宿主项类中事件处理程序的名称对应于类名。 例如,在 Sheet2 类中,Startup 事件处理程序被命名为 Sheet2_Startup。 在 ThisWorkbook 类中,Startup 事件处理程序被命名为 ThisWorkbook_Startup。

Private Sub Sheet1_Startup(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles Me.Startup

End Sub

Private Sub Sheet1_Shutdown(ByVal sender As Object, ByVal e As System.EventArgs) _
    Handles Me.Shutdown

End Sub
private void Sheet1_Startup(object sender, System.EventArgs e)
{
}

private void Sheet1_Shutdown(object sender, System.EventArgs e)
{
}

文档级 Excel 项目中的事件顺序

Excel 项目中的 Startup 事件处理程序的调用顺序如下:

  1. ThisWorkbook_Startup.

  2. Sheet1_Startup.

  3. Sheet2_Startup.

  4. Sheet3_Startup.

  5. 按顺序的其他工作表。

工作簿解决方案中的 Shutdown 事件处理程序的调用顺序如下:

  1. ThisWorkbook_Shutdown.

  2. Sheet1_Shutdown.

  3. Sheet2_Shutdown.

  4. Sheet3_Shutdown.

  5. 按顺序的其他工作表。

顺序是在编译项目时确定的。 如果用户在运行时重新排列了工作表,并不会改变下次打开或关闭工作簿时事件的引发顺序。

应用程序级项目

Visual Studio 在应用程序级外接程序中提供生成的代码。 这些代码引发两个不同的事件:StartupShutdown

Startup 事件

Startup 事件是在外接程序已加载且程序集中的所有初始化代码都已运行之后引发的。 此事件由生成的代码文件中的 ThisAddIn_Startup 方法进行处理。

ThisAddIn_Startup 事件处理程序中的代码是第一个要运行的用户代码,除非外接程序重写 RequestComAddInAutomationService 方法。 在这种情况下,ThisAddIn_Startup 事件处理程序在 RequestComAddInAutomationService 之后被调用。 在 2007 Microsoft Office system 的外接程序中,如果外接程序重写 RequestService 方法,则 ThisAddIn_Startup 事件处理程序中的代码可能也会在此方法之后被调用。

有关外接程序的启动顺序的更多信息,请参见应用程序级外接程序的体系结构

Shutdown 事件

即将卸载在其中加载代码的应用程序域时,将引发 Shutdown 事件。 此事件由生成的代码文件中的 ThisAddIn_Shutdown 方法进行处理。 此事件处理程序是卸载外接程序时最后一个要运行的用户代码。

Outlook 2010 外接程序中的关闭事件

对于在 Outlook 2010 中加载的外接程序,只有在用户使用 Outlook 中的“COM 外接程序”对话框禁用了该链接程序时,才会引发 Shutdown 事件。 当 Outlook 退出时,不会引发该事件。 如果您有必须在 Outlook 退出时运行的代码,请处理以下任一事件:

提示

通过修改注册表,可以强制 Outlook 在退出时引发 Shutdown 事件。 不过,如果管理员恢复此设置,则在 Outlook 退出时添加到 ThisAddIn_Shutdown 方法的代码将不再运行。 有关更多信息,请参见 Outlook 2010 中有关关闭的更改

请参见

任务

如何:在 Visual Studio 中创建 Office 项目

其他资源

开发 Office 解决方案

对文档级自定义项进行编程

应用程序级外接程序编程

Office 项目模板概述