演练:根据 NamedRange 控件的事件进行编程

更新:2007 年 11 月

适用对象

本主题中的信息仅适用于指定的 Visual Studio Tools for Office 项目和 Microsoft Office 版本。

项目类型

  • 文档级项目

Microsoft Office 版本

  • Excel 2007

  • Excel 2003

有关更多信息,请参见按应用程序和项目类型提供的功能

此演练演示如何使用 Visual Studio Tools for Office 向 Microsoft Office Excel 工作表添加 NamedRange 控件,并依据其事件进行编程。

通过此演练,您将学会如何执行以下任务:

  • 向工作表添加 NamedRange 控件。

  • NamedRange 控件事件进行编程。

  • 测试项目。

y4z68kd7.alert_note(zh-cn,VS.90).gif说明:

以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。您安装的 Visual Studio 版本以及使用的设置决定了这些元素。有关更多信息,请参见 Visual Studio 设置

先决条件

若要完成此演练,您需要:

  • Visual Studio Tools for Office(Visual Studio 2008 专业版 和 Visual Studio Team System 的可选组件)。

  • Microsoft Office Excel 2003 或 Microsoft Office Excel 2007。

创建项目

在此步骤中,您将使用 Visual Studio Tools for Office 创建一个 Excel 工作簿项目。

创建新项目

  • 创建一个名为“My Named Range Events”的 Excel 工作簿项目。确保已选择“创建新文档”。有关更多信息,请参见 如何:创建 Visual Studio Tools for Office 项目

    Visual Studio 在设计器中打开新的 Excel 工作簿,并将“My Named Range Events”项目添加到“解决方案资源管理器”中。

向工作表添加文本和命名范围

由于宿主控件是扩展的 Office 对象,因此可以像添加本机对象那样将它们添加到文档中。例如,通过打开“插入”菜单,指向“名称”,然后选择“定义”,可以将 Excel NamedRange 控件添加到工作表中。也可以通过将 NamedRange 控件从“工具箱”拖动到工作表上来添加该控件。

在此步骤中,您将使用“工具箱”向工作表添加两个命名范围控件,然后向工作表添加文本。

向工作表添加范围

  1. 验证 Visual Studio 设计器中是否已打开“My Named Range Events.xls”工作簿,同时显示 Sheet1。

  2. 从“工具箱”的“Excel 控件”选项卡中,将一个 NamedRange 控件拖动到 Sheet1 中的单元格“A1”中。

    随即出现“添加 NamedRange 控件”对话框。

  3. 验证可编辑文本框中是否出现“$A$1”,并且已选中单元格“A1”。如果没有,则请单击单元格“A1”选中它。

  4. 单击“确定”。

    单元格“A1”即成为一个名为 namedRange1 的范围。当选中单元格“A1”时,工作表上没有可见指示,但在“名称”框(就在左侧工作表的上面)中出现 namedRange1。

  5. 向单元格“B3”中添加另一个 NamedRange 控件。

  6. 验证可编辑文本框中是否出现“$B$3”,并且已选中单元格“B3”。如果没有,则请单击单元格“B3”选中它。

  7. 单击“确定”。

    单元格“B3”变为名为 namedRange2 的范围。

向工作表添加文本

  1. 在单元格“A1”中键入以下文本:

    这是 NamedRange 控件的一个示例。

  2. 在单元格“A3”(在 namedRange2 左侧)中键入以下文本:

    事件:

在以下部分中,您将编写 namedRange1 的 BeforeDoubleClickChangeSelectionChange 事件的响应代码,以向 namedRange2 插入文本和修改 namedRange2 控件的属性。

添加代码以响应 BeforeDoubleClick 事件

基于 BeforeDoubleClick 事件向 NamedRange2 插入文本

  1. 在“解决方案资源管理器”中右击“Sheet1.vb”或“Sheet1.cs”,并选择“查看代码”。

  2. 添加适当代码,以使 namedRange1_BeforeDoubleClick 事件处理程序与以下所示类似:

    Private Sub NamedRange1_BeforeDoubleClick( _
        ByVal Target As Microsoft.Office.Interop.Excel.Range, ByRef Cancel As Boolean) _
        Handles NamedRange1.BeforeDoubleClick
    
        With Me.NamedRange2
            .Value2 = "The BeforeDoubleClick event occurred."
            .Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red)
            .Font.Italic = True
        End With
    End Sub
    
    private void namedRange1_BeforeDoubleClick(
        Microsoft.Office.Interop.Excel.Range Target, ref bool Cancel)
    {
        this.namedRange2.Value2 = "The BeforeDoubleClick event occurred.";
        this.namedRange2.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
        this.namedRange2.Font.Italic = true;
    }
    
  3. 在 C# 中,必须按照下面的 Startup 事件所示添加命名范围事件处理程序。有关创建事件处理程序的信息,请参见 如何:使用 Visual Studio Tools for Office 创建事件处理程序

    this.namedRange1.BeforeDoubleClick += new Microsoft.Office.Interop.Excel.
        DocEvents_BeforeDoubleClickEventHandler(namedRange1_BeforeDoubleClick);   
    
    this.namedRange1.Change += new Microsoft.Office.Interop.Excel.
        DocEvents_ChangeEventHandler(namedRange1_Change);
    
    this.namedRange1.SelectionChange +=new Microsoft.Office.Interop.Excel.
        DocEvents_SelectionChangeEventHandler(namedRange1_SelectionChange);
    

添加代码以响应 Change 事件

基于 Change 事件向 namedRange2 插入文本

  • 添加适当代码,以使 NamedRange1_Change 事件处理程序与以下所示类似:

    Private Sub NamedRange1_Change(ByVal Target As Microsoft.Office.Interop.Excel.Range) _
        Handles NamedRange1.Change
    
        With Me.NamedRange2
            .Value2 = "The Change event occurred."
            .Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Blue)
            .Font.Italic = False
        End With
    End Sub
    
    private void namedRange1_Change(Microsoft.Office.Interop.Excel.Range Target)
    {
        this.namedRange2.Value2 = "The Change event occurred.";
        this.namedRange2.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Blue);
        this.namedRange2.Font.Italic = false;
    }
    
    y4z68kd7.alert_note(zh-cn,VS.90).gif说明:

    由于双击 Excel 范围中的单元格会进入编辑模式,因此当将选择移出该范围时,即使没有对文本做任何更改也会引发 Change 事件。

添加代码以响应 SelectionChange 事件

基于 SelectionChange 事件向 namedRange2 插入文本

  • 添加适当代码,以使“NamedRange1_SelectionChange”事件处理程序与以下所示类似:

    Private Sub NamedRange1_SelectionChange(ByVal Target As Microsoft.Office.Interop.Excel.Range) _
        Handles NamedRange1.SelectionChange
    
        With Me.NamedRange2
            .Value2 = "The SelectionChange event occurred."
            .AddComment("SelectionChange always occurs before BeforeDoubleClick.")
            .Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Black)
        End With
    End Sub
    
    private void namedRange1_SelectionChange(Microsoft.Office.Interop.Excel.Range Target)
    {
        this.namedRange2.Value2 = "The SelectionChange event occurred.";
        this.namedRange2.AddComment("SelectionChange always occurs before BeforeDoubleClick.");
        this.namedRange2.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Black);
    }
    
    y4z68kd7.alert_note(zh-cn,VS.90).gif说明:

    由于双击 Excel 范围中的单元格会导致选择移至该范围内,因此在引发 BeforeDoubleClick 事件之前会引发 SelectionChange 事件。

测试应用程序

现在可以测试工作簿,以验证当引发 NamedRange 控件的事件时是否能将描述这些事件的文本插入到另一个命名范围中。

测试文档

  1. 按 F5 运行项目。

  2. 将光标放在 namedRange1 中,然后验证是否已将有关 SelectionChange 事件的文本以及注释插入到工作表中。

  3. 在 namedRange1 中双击,验证是否已使用红色斜体文本将有关 BeforeDoubleClick 事件的文本插入到 namedRange2 中。

  4. 在 namedRange1 外单击,注意当退出编辑模式时,即使没有对文本做任何更改,也会引发更改事件。

  5. 在 namedRange1 内更改文本。

  6. 在 namedRange1 外单击,验证是否已使用蓝色文本将有关 Change 事件的文本插入到 namedRange2 中。

后续步骤

此演练演示对 NamedRange 控件的事件进行编程的基本操作。下一步可能要执行以下几项任务:

请参见

任务

如何:在设计时删除 NamedRange 控件

如何:调整 NamedRange 控件的大小

如何:向工作表添加 NamedRange 控件

如何:使用 Visual Studio Tools for Office 创建事件处理程序

概念

宿主项和宿主控件概述

NamedRange 控件

宿主项和宿主控件的编程限制

其他资源

Excel 宿主控件