演练:根据 NamedRange 控件的事件进行编程
本演练演示如何使用 Visual Studio 中的 Office 开发工具将 NamedRange 控件根据其事件使用方法添加到 Microsoft Office Excel 工作表和程序中。
**适用于:**本主题中的信息适用于 Excel 2007 和 Excel 2010 的文档级项目。有关更多信息,请参见按 Office 应用程序和项目类型提供的功能。
通过本演练,您将学会如何执行以下任务:
向工作表添加 NamedRange 控件。
对 NamedRange 控件事件进行编程。
测试项目。
提示
以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。 您安装的 Visual Studio 版本以及使用的设置决定了这些元素。 有关更多信息,请参见 使用设置。
系统必备
您需要以下组件来完成本演练:
-
Visual Studio 2010 的一个版本,其中包含 Microsoft Office 开发工具。有关更多信息,请参见[将计算机配置为开发 Office 解决方案](bb398242\(v=vs.100\).md)。
- Excel 2007 或 Excel 2010。
创建项目
在此步骤中,您将使用 Visual Studio 创建一个 Excel 工作簿项目。
创建新项目
创建一个名为“My Named Range Events”的 Excel 工作簿项目。 确保已选择**“创建新文档”**。 有关更多信息,请参见如何:在 Visual Studio 中创建 Office 项目。
Visual Studio 在设计器中打开新的 Excel 工作簿,并将“My Named Range Events”(我的命名范围事件)项目添加到**“解决方案资源管理器”**中。
向工作表添加文本和命名范围
由于宿主控件是扩展的 Office 对象,因此可以像添加本机对象那样将它们添加到文档中。 例如,通过打开**“插入”菜单,指向“名称”,然后选择“定义”,可以将 Excel NamedRange 控件添加到工作表中。 也可以通过将 NamedRange 控件从“工具箱”**拖动到工作表上来添加该控件。
在此步骤中,您将使用**“工具箱”**向工作表添加两个命名范围控件,然后向工作表添加文本。
向工作表添加范围
验证 Visual Studio 设计器中是否已打开**“My Named Range Events.xls”**工作簿,同时显示 Sheet1。
从“工具箱”的**“Excel 控件”选项卡中,将一个 NamedRange 控件拖动到 Sheet1 中的单元格“A1”**中。
随即出现**“添加 NamedRange 控件”**对话框。
验证可编辑文本框中是否出现**“$A$1”,并且已选中单元格“A1”。 如果没有,则请单击单元格“A1”**选中它。
单击**“确定”**。
单元格**“A1”即成为一个名为 namedRange1 的范围。 当选中单元格“A1”时,工作表上没有可见指示,但在“名称”**框(就在左侧工作表的上面)中出现 namedRange1。
向单元格**“B3”**中添加另一个 NamedRange 控件。
验证可编辑文本框中是否出现**“$B$3”,并且已选中单元格“B3”。 如果没有,则请单击单元格“B3”**选中它。
单击**“确定”**。
单元格**“B3”**变为名为 namedRange2 的范围。
向工作表添加文本
在单元格**“A1”**中键入以下文本:
这是 NamedRange 控件的一个示例。
在单元格**“A3”**(在 namedRange2 左侧)中键入以下文本:
事件:
在以下部分中,您将编写 namedRange1 的 BeforeDoubleClick、Change 和 SelectionChange 事件的响应代码,以向 namedRange2 插入文本和修改 namedRange2 控件的属性。
添加代码以响应 BeforeDoubleClick 事件
基于 BeforeDoubleClick 事件向 NamedRange2 插入文本
在**“解决方案资源管理器”中右击“Sheet1.vb”或“Sheet1.cs”,并选择“查看代码”**。
添加适当代码,以使 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; }
在 C# 中,必须按照下面的 Startup 事件所示添加命名范围事件处理程序。 有关创建事件处理程序的信息,请参见如何:在 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; }
提示
由于双击 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); }
提示
由于双击 Excel 范围中的单元格会导致选择移至该范围内,因此在引发 BeforeDoubleClick 事件之前会引发 SelectionChange 事件。
测试应用程序
现在可以测试工作簿,以验证当引发 NamedRange 控件的事件时是否能将描述这些事件的文本插入到另一个命名范围中。
测试文档
按 F5 运行项目。
将光标放在 namedRange1 中,然后验证是否已将有关 SelectionChange 事件的文本以及注释插入到工作表中。
在 namedRange1 中双击,验证是否已使用红色斜体文本将有关 BeforeDoubleClick 事件的文本插入到 namedRange2 中。
在 namedRange1 外单击,注意当退出编辑模式时,即使没有对文本做任何更改,也会引发更改事件。
在 namedRange1 内更改文本。
在 namedRange1 外单击,验证是否已使用蓝色文本将有关 Change 事件的文本插入到 namedRange2 中。
后续步骤
此演练演示对 NamedRange 控件的事件进行编程的基本操作。 以下是接下来可能要执行的任务:
- 部署项目。 有关更多信息,请参见部署 Office 解决方案。