第十三章: Visual Basic. net组件开发 知识点: 组件开发的概念 COM与NET的互操作 组件开发实例 软件工程一个重要的概念就是复用,相信大多数程序员都有这样的体验, 很多时候都是在写大量重复的代码,甚至很多时候把以前一些项目中的代码 直接Copy过来用,这部分代码就是可以重用的代码,在一些情况下,将这部 分代码以组件的形式封装起来,在需要的时候直接调用,可以大大提高工作 效率,而且使用一些开源的组件,利用人家写好的优秀的模块,也可以省去 不少麻烦,所以,组件开发是现代软件工程学中不可缺少的一部分,本章将 从组件开发的基本概念出发讲解组件开发的一些要点以及NET组件以往的 COM组件的互操作问题,最后通过一个实例来向大家展示组件开发的魅力
第十三章: Visual Basic.NET组件开发 知识点: 组件开发的概念 COM与.NET的互操作 组件开发实例 软件工程一个重要的概念就是复用,相信大多数程序员都有这样的体验, 很多时候都是在写大量重复的代码,甚至很多时候把以前一些项目中的代码 直接Copy过来用,这部分代码就是可以重用的代码,在一些情况下,将这部 分代码以组件的形式封装起来,在需要的时候直接调用,可以大大提高工作 效率,而且使用一些开源的组件,利用人家写好的优秀的模块,也可以省去 不少麻烦,所以,组件开发是现代软件工程学中不可缺少的一部分,本章将 从组件开发的基本概念出发讲解组件开发的一些要点以及.NET组件以往的 COM组件的互操作问题,最后通过一个实例来向大家展示组件开发的魅力
131组件开发概述 微软NET应用程序是从组件开始构建的。所有NET对象通过接口提供其重 要的特性,如属性、方法和事件。这些特性构成了面向对象编程的基础。作为 sual baslc.Net组件对象的程序设计师,要负责实现必需的接口(即属性、 方法和事件),其他程序员通过这些接口引用组件对象所提供的服务。因此, 开发组件的大部分精力将用于设计对象,定义所开发组件被调用的接口。一般 情况下,简单的NET面向对象的编程都将涉及到创建类,添加类所需要的属 性、方法和事件,并将这个类包含在不同的应用程序中。在NET中创建组件 同样是基于面向对象的原则,但它们超出了可以在多个应用程序中使用的简单 类的概念 通常定义组件为可交换的软件部分,它是工业化系统的产物,在NET 台的组件层中,组件是以 Assemblies的形式存在的,可以用任何NET支持的 语言来开发组件,作为一个软件部件而不是整体,组件常常以插接的形式来开 发,通过接口来实现与其他程序的互操作。服务化组件是这中间的一类特殊的 组件,与NET中标准的可管理组件不同的是这类组件使用了COM服务
13.1 组件开发概述 微软NET应用程序是从组件开始构建的。所有NET对象通过接口提供其重 要的特性,如属性、方法和事件。这些特性构成了面向对象编程的基础。作为 VisuaI Baslc. Net组件对象的程序设计师,要负责实现必需的接口(即属性、 方法和事件),其他程序员通过这些接口引用组件对象所提供的服务。因此, 开发组件的大部分精力将用于设计对象,定义所开发组件被调用的接口。一般 情况下,简单的.NET面向对象的编程都将涉及到创建类,添加类所需要的属 性、方法和事件,并将这个类包含在不同的应用程序中。在.NET中创建组件 同样是基于面向对象的原则,但它们超出了可以在多个应用程序中使用的简单 类的概念。 通常定义组件为可交换的软件部分,它是工业化系统的产物,在.NET平 台的组件层中,组件是以Assemblies的形式存在的,可以用任何.NET支持的 语言来开发组件,作为一个软件部件而不是整体,组件常常以插接的形式来开 发,通过接口来实现与其他程序的互操作。服务化组件是这中间的一类特殊的 组件,与.NET中标准的可管理组件不同的是这类组件使用了COM服务
下面通过一个简单实例,介绍Ne组件的创建于与使用: 首先新建一个“ windows控件库”项目,命名为“ TextChange”,如图所示 新建项目 项目类型(P) 模板(工 VIsual Basic Office Windows应用类库制台应用 windows web控件库 由智能设备 程序 数据库 初学者工具包 测试 中其他语言 Wows服务空项目 Crystal 分布式系统解决方案 Reports应 中其他项目类型 中测试项目 搜索联机模 用于创建在 Windows应用程序中使用的控件的项目 名称() Exchang 确定取消
下面通过一个简单实例,介绍.Net组件的创建于与使用: 首先新建一个“windows控件库”项目,命名为“TextChange”,如图所示
在集成环境中自动生成可添加控件的容器,如图所示 oo TextChange-Microsoft Visual Studio 文件()编辑(E视图(项目P生成(B)调试()数据(A)格式(Q)工具①测试(5 窗口()社区(帮助(H UserControl1 yb[设计] ×解决方案资源管理器 H游 回国回员 中+- My project 回引用 啡 白国 User Controll, yb 2 UserControl. Designer. vb User Control1 System. Windows Forms, US 田( Application Setting: 错误列表 田( bIndings lleesfaskval1 0个错误0个警告①0个消息 (ApplicationSettings) 「说文件 列 [项自将属性设置映射到用程序配置文件 就绪
在集成环境中自动生成可添加控件的容器,如图所示
把 User Control1b改为 Text Change.∽b,也就是生成的控件名为 Text change。 再来看自动生成的代码框架 Partial Class textchange nherits System Windows Forms UserControl decOntrol.重写 Dispose,以清理组件列表 说明: a Inherits Protected Overrides Sub Dispose(By Val disposing As Boolean) If disposing AndAlso components Is Not Nothing Then System Win components. Dispose dows. Form End If s. UserContr My Base. Dispose(disposing) o代表 End sub Text Chang Windows窗体设计器所必需的 e类继承 Private components As System Component Model. IContainer System Win 注意:以下过程是 Windows窗体设计器所必需的 dows. Form 可以使用 Windows窗体设计器修改它。 s. UserContr 不要使用代码编辑器修改它 System Diagnostics Debugger Step Througho l类 Private Sub Initialize Component b.必 components New System Component Model. Container 须实现 Me. Auto Scale Mode System Windows Forms. Auto ScaleMode Font dispose End Sub End class
把UserControl1.vb改为TextChange.vb,也就是生成的控件名为TextChange。 再来看自动生成的代码框架。 _ Partial Class textchange Inherits System.Windows.Forms.UserControl 'UserControl1 重写 Dispose,以清理组件列表。 _ Protected Overrides Sub Dispose(ByVal disposing As Boolean) If disposing AndAlso components IsNot Nothing Then components.Dispose() End If MyBase.Dispose(disposing) End Sub 'Windows 窗体设计器所必需的 Private components As System.ComponentModel.IContainer '注意:以下过程是 Windows 窗体设计器所必需的 '可以使用 Windows 窗体设计器修改它。 '不要使用代码编辑器修改它。 _ Private Sub InitializeComponent() components = New System.ComponentModel.Container() Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font End Sub End Class 说明: a.Inherits System.Win dows.Form s.UserContr ol代表 TextChang e类继承 System.Win dows.Form s.UserContr ol类。 b.必 须实现 dispose方 法
添加一个 Textbox控件和一个 timer控件,如图所示 ∠omwb[设计上 textphone, Designe, vbtextchange. vb[设计】 ttms Tert 一 Timer1 通过 Text Change Design.vb可看到代码中自动创建和初始化了tmsg和tmer1控件 在所有方法外面定义如下变量。 Dmx,y, As Integer设置控件的左上角坐标 Dim flag As Boolean=Tue'方向朝左
添加一个Textbox控件和一个timer控件,如图所示 通过TextChange.Design.vb可看到代码中自动创建和初始化了txtmsg和timer1控件。 在所有方法外面定义如下变量。 Dim x, y, As Integer ‘设置控件的左上角坐标 Dim flag As Boolean = True '方向朝左
实现Tmer1Tck事件 Private Sub Timer1_Tick(By Val sender As System object, By Val e As System. EventArgs) Handles Timer1 Tick fag= True Then'左移 X-=1 txtmsg Location New Point(X, If(Integer Parse(txtmsg Left)= Integer Parse(Me Width))Then fag=True'左移 End If End if End Sub Timer1控件的 I Interval属性设为10,也就是Tmer1控件启动后,每隔0.01 秒会自动执行Tmer1Tck事件内的代码一次, ttms先左移,每次左移 1Pie,边检査是否碰到左边缘。若是,则将fag设为 false,改为右移, x同时检查是否碰到右边缘,若是,将1设为ue,再次左移 ange 步是
实现Timer1_Tick事件 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e _ As System.EventArgs) Handles Timer1.Tick If flag = True Then ' 左移 x -= 1 txtmsg.Location = New Point(x, y) If (Integer.Parse(txtmsg.Left) = Integer.Parse(Me.Width)) Then flag = True '左移 End If End If End Sub Timer1控件的Interval属性设为10,也就是Timer1控件启动后,每隔0.01 秒会自动执行Timer1_Tick事件内的代码一次,txtmsg先左移,每次左移 1Pixel,边检查是否碰到左边缘。若是,则将flag设为false,改为右移, 同时检查是否碰到右边缘,若是,将flag设为true,再次左移。 至此,已经将TextChange控件设置完毕,下一步是生成.dll文件
右键单击 Text Change项目,选择“生成”命令,便会在项目的bin目录下生成 TextChange dI文件,如图所示 -Release 文件()编辑()查看y)收藏4)工具T帮助 中后退,+,③搜索文件夹③” 地址(D Release ◇转到 YAHOO! 搜索 TextChange. d] TextChang.. TextChang 3个对象 796KB回我的电脑
右键单击TextChange项目,选择“生成”命令,便会在项目的bin目录下生成 TextChange.dll文件,如图所示
接下来,在 VB. Net)应用程序中使用自创建的 TextChange控件: 执行【文件】|【添加】|【项目】命令,创建“ windows应用程序” 执行【工具】|【选择工具箱项】,选定 Frame Work选项卡,如图所示。 选择工具箱项 NET Framework组件cOM组件 名称 命名空间 目录 回 AccessData50Urce5 em Web UI, WebControl全局程序集缓存 口 ActionsPane Microsoft OFfice. Tools 全局程序集缓存 口 ADODC Microsoft, VisualBasic. Compatibe,全局程序集缓存 口 ADODCArr Microsoft VisualBasic. Compatibi.全局程序集缓存 口 Adomdcommand Microsoft Analysis Services, Ado,全局程序集缓存 口 Adomdconnection Microsoft Analysis Services. Ado…,全局程序集缓存 口 AdomdDataAdapter Microsoft. Analysis Services.Ado,,全局程序集缓存 区 AdRotator System. Web UI. Mobile Controls全局程序集缓存 MAdRotator System. Web UI. WebControls 全局程序集缓存 筛选器( 清除 AccessDataSource 语言 固定语言(固定国家/地区 浏览(B) 版本 2.0.0.0 确定 取消 重置(
接下来,在VB.Net应用程序中使用自创建的TextChange控件: 执行【文件】|【添加】|【项目】命令,创建“windows 应用程序”。 执行【工具】|【选择工具箱项】,选定FrameWork选项卡,如图所示
单击“浏览”按钮,选中刚才创建的 Text Change dl攻文件,单击“确定”按扭, 如图所示 打开 ?| 查找范围(D Release ③·由0x图·工具u 四Tech9gedl 桌面 我的项目 我的电脑 文件名(N): 打开( 文件类型(:同可执行文件(*exe) 取消
单击“浏览”按钮,选中刚才创建的TextChange.dll文件,单击“确定”按扭, 如图所示