注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Kandy

长风破浪会有时,直挂云帆济沧海!

 
 
 

日志

 
 

宿主项和宿主控件  

2009-07-07 17:21:25|  分类: VSTO |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

正如早前所提到的那样,宿主项是一个表示Office对象模型入口点的类。默认情况下,当你创建一个Excel解决方案时,将会创建四个Excel的宿主项:Workbook、Sheet1、Sheet2和Sheet3。如果你在设计时添加更多工作表,那些工作表将被创建为宿主项。宿主项通过添加数据绑定的能力和提供额外的事件来扩展本地Office文档。

宿主项是Word或者Excel的设计图面(design surface),担当控件容器的角色,这是看待宿主项的一个角度。就像你在VBA里把控件添加到UserForm上那样,你可以把Windows Forms控件和宿主控件添加到宿主项上。这条规则的一个例外是工作簿宿主项。工作簿可以包含组件(component),但不能包含控件。

对于Word,当你用VSTO创建一个Word解决方案时,只有一个宿主项(文档)是自动创建的。对于Excel,每个工作表、图表(chartsheet)和工作簿都将被视为宿主项。如果你在设计时添加更多工作表,VSTO将会在项目里把他们创建成宿主项。

如果工作表是在运行时以编程方式添加进来的,VSTO将不会自动把他们创建成宿主项。这意味着,如果你以编程方式把工作表添加到工作簿里,这个工作表将被创建成本地Excel工作表而不是宿主项。由于这个工作表不是宿主项,你将得不到工作表的扩展功能,并且你不能像使用在设计时创建的工作表那样以编程的方式把控件添加到其上。控件仅能添加到宿主项工作表上。

VSTO为你添加到文档或者工作簿上的所有控件(宿主控件和Windows Forms控件)提供一个Controls集合。当你在文档上添加控件时,它将添加到文档的Controls集合。对于Excel,每个工作表都包含它自己的Controls集合的实例。宿主控件可以在设计时或者运行时创建。VSTO提供了许多辅助方法(在第6、7章有述),你可以用他们动态地在文档上添加宿主控件。

VSTO把Word对象模型里的三个对象扩展成宿主控件:Bookmark、XMLNode和XMLNodes控件。除了为这些控件添加数据绑定功能和事件,VSTO还增强了某些对象的功能。比如说,把文字赋值给VSTO书签不会把书签删除(把文字赋值给本地Word书签会把书签删除)。扩展的Excel对象包括NamedRange、ListObject、XMLMappedRange和Chart。

你可以使用Word或者Excel的本地功能在文档上添加宿主控件。比如说,如果你在设计时在Word里选择Insert菜单的Bookmark,那么它将被添加成宿主控件。这些控件中的某些可以从Toolbox拖到文档上。Toolbox包含所有可以添加到设计图面的控件,在概念上与VBE里的工具箱相似。

当Excel工作表设计器获得焦点时,NamedRange和ListObject控件将出现在Toolbox的Excel Controls选项卡里。当Word文档得到焦点时,Bookmark控件将出现在Toolbox的Word Controls选项卡里。还有别的适用于Word和Excel的宿主控件,但他们不显示在Toolbox上。这些宿主控件包括Excel的Chart和XMLMappedRange控件以及Word的XMLNode和XMLNodes控件。在第6、7章里,你将会了解到更多关于如何在文档上添加这些控件的内容。

除了数据绑定,扩展对象提供的主要功能还有事件。Office对象模型里的很多对象本身都不公开事件。比如说,在VBA里,判断某个单元格的值是否发生改变的唯一方法是首先检查整个工作表的Change事件。然后,你必须判断改变是否发生在工作表上的某个单元格里。使用VSTO,你可以在NamedRange控件的Change事件处理程序里直接写代码。对于Word,你现在可以在Bookmark的BeforeRightClick事件处理程序里写代码。比如说,你可以创建一个上下文菜单(context menu),并在右击书签里的文字时显示。

  评论这张
 
阅读(419)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018