概要
本分步指南介绍了如何修改 Microsoft Office 2003 Web 组件的类包装。随后,它介绍了如何重新生成类包装,以便您可以使用 Microsoft Visual Studio .NET 在您创建的应用程序中管理它们的事件。
默认情况下,Microsoft Visual Studio .NET 生成的类包装不允许您处理以下 Office 2003 Web 组件的事件:
默认情况下,Microsoft Visual Studio .NET 生成的类包装不允许您处理以下 Office 2003 Web 组件的事件:
• | 图表 |
• | 电子表格 |
• | 数据透视表 |
若要处理这些组件的事件,您可以修改类包装的源代码,然后重新编译代码。
背景
Microsoft Visual Studio .NET 生成一个
事件侦听程序类,该类实现一个
事件接口。该
事件侦听程序类将被传递到 Office Web 组件 (OWC)。随后,OWC 调用
IDispatch 接口的
QueryInterface 方法,而不是调用
事件接口。但是,生成的类的
IDispatch 接口不包含事件的调度标识符 (DISPID)。
若要解决此问题,您可以使用 ClassInterfaceType.None 值标记生成的类以强制 COM Interop 为接口(而不是类)返回 IDispatch。 IDispatch 接口包含事件 DISPID。
若要解决此问题,您可以使用 ClassInterfaceType.None 值标记生成的类以强制 COM Interop 为接口(而不是类)返回 IDispatch。 IDispatch 接口包含事件 DISPID。
修改和重新生成类包装的步骤
1. | 启动 Visual Studio .NET 命令提示符。 | ||||||||
2. | 在命令提示符下,执行以下操作:
| ||||||||
3. | 在文本编辑器(例如“记事本”)中,打开“C:/OWC11/AxOWC11.cs”。 | ||||||||
4. | 将 [ToolboxItem(true)] 添加到图表组件、电子表格组件和数据透视表组件的生成的类中,如下面的示例所示: 图表组件 电子表格组件 数据透视表组件 | ||||||||
5. | 将事件类标记为 ClassInterfaceType.None,如下面的示例所示: 图表组件 电子表格组件 数据透视表组件 | ||||||||
6. | 将您的更改保存到 AxOWC11.cs。 | ||||||||
7. | 在 Visual Studio .NET 命令提示符下,执行以下操作:
| ||||||||
8. | 启动 Visual Studio .NET。 | ||||||||
9. | 将新编译的“AxOWC11.dll”添加到“工具箱”中:
|
当创建新的 Microsoft Visual Basic .NET 项目或新的 Microsoft Visual C# .NET 项目时,您会注意到“工具箱”中“常规”选项卡上的控件列表中包含“AxChartSpace”控件、“AxPivotTable”控件和“AxSpreadsheet”控件。现在便可以将这些组件添加到窗体中了。
------------------------------------------------------------------------------
在上述步骤中可能会出现以下问题:
1、在使用Office Web Compment时提示“控件未正确注册”,这个是因为你的Office2003是在.NET之前安装的,这时只需要重新运行Office2003的安装程序,增加下图的选项就行。
在上述步骤中可能会出现以下问题:
1、在使用Office Web Compment时提示“控件未正确注册”,这个是因为你的Office2003是在.NET之前安装的,这时只需要重新运行Office2003的安装程序,增加下图的选项就行。
2、在进行7.b时如果找不到复制的文件,试试先在开发环境中将某个Office web compment的控件拖到窗口上再复制一遍试试。
3、在7.c的编译时出现找不到OWC11、MSComctlLib的命名空间,这时需要在文件头加上
using OWC11 = Microsoft.Office.Interop.Owc11;
using MSComctlLib = mscomctl;
using MSComctlLib = mscomctl;
应该就可以了