办公室项目中的事件

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

适用于: 本主题中的信息适用于文档级项目和 VSTO 外接程序项目。 请参阅办公室应用程序和项目类型提供的功能。

文档级项目

Visual Studio 在文档级自定义项中新的或现有的文档或工作表之后提供生成的代码。 此代码引发两个不同的事件: StartupShutdown

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 元素将不再可用。 如果要在应用程序关闭之前删除控件,请将你的代码添加到另一个事件处理程序中,如 BeforeCloseBeforeSave

事件处理程序方法声明

每个事件处理程序方法声明都具有传递给它的相同参数: sendere。 在 Excel 中, sender 参数引用工作表,如 Sheet1Sheet2;在 Word 中, sender 参数引用文档。 e 参数引用事件的标准参数,此情况下不使用该事件。

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

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 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 事件处理程序的调用顺序如下:

  6. ThisWorkbook_Shutdown

  7. Sheet1_Shutdown

  8. Sheet2_Shutdown

  9. Sheet3_Shutdown

  10. 按顺序排列的其他工作表。

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

VSTO 外接程序项目

Visual Studio 在 VSTO 外接程序中提供生成的代码。此代码引发两个不同的事件: StartupShutdown

Startup 事件

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

ThisAddIn_Startup 事件处理程序中的代码是要运行的第一个用户代码,除非你的 VSTO 外接程序替代 RequestComAddInAutomationService 方法。 在这种情况下,将在 ThisAddIn_Startup 之后调用 RequestComAddInAutomationService事件处理程序。

如果代码需要打开文档,请不要在 ThisAdd-In_Startup 事件处理程序中添加代码。 相反,请将该代码添加到用户创建或打开文档时 Office 应用程序引发的事件。 有关详细信息,请参阅办公室应用程序启动时访问文档。

有关 VSTO 外接程序的启动序列的详细信息,请参阅 VSTO 外接程序的体系结构。

Shutdown 事件

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

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

仅当用户使用 Outlook 中的 COM 外接程序对话框禁用 VSTO 外接程序时才引发 Shutdown 事件。 在 Outlook 退出时不引发该事件。 如果具有在 Outlook 退出时必须运行的代码,请处理任一以下事件:

注意

当 Outlook 通过修改注册表退出时,可以强制它引发 Shutdown 事件。 但是,如果管理员还原了此设置,则当 Outlook 退出时,你添加到 ThisAddIn_Shutdown 方法的任何代码均将不再运行。 有关详细信息,请参阅 Outlook 2010 的关闭更改。