分享
 
 
 

VB.NET中的组件开发

王朝vb·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

先看段组件的代码:(临时写的,写得比较乱)

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

' '

' 登录验证组件 '

' '

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Imports System.Security.Cryptography

Imports System.Text

Imports System.Data

Imports System.Data.SqlClient

Public Class ValidatorClass Validator

Inherits System.ComponentModel.Component

Private username As String

Private userpwd As String

Public Property vUsername()Property vUsername() As String

Get

Return username

End Get

Set(ByVal Value As String)

username = Value

End Set

End Property

Public Property vUserpwd()Property vUserpwd() As String

Get

Return userpwd

End Get

Set(ByVal Value As String)

userpwd = Value

End Set

End Property

'转换为MD5

Private Function convertMD5()Function convertMD5(ByVal pwd As String) As String

Dim md5 As New MD5CryptoServiceProvider

Dim password As Byte() = (New ASCIIEncoding).GetBytes(pwd)

'转换为哈希值Byte数组

Dim mdByte As Byte() = md5.ComputeHash(password)

'Dim mdString As String = System.BitConverter.ToString(mdByte)

Dim mdString As String = (New ASCIIEncoding).GetString(mdByte)

Return mdString

End Function

Public Function validate()Function validate() As Boolean

'连接到Users表

Dim myConnection As New SqlConnection("server=localhost;database=TEST;Trusted_Connection=yes;user id=sa;password=;")

Dim selectAdapter As New SqlDataAdapter("select * from Users where UserName='" + username + "'" + "and Password='" + convertMD5(userpwd) + "'", myConnection)

Dim ds As New DataSet

Try

selectAdapter.Fill(ds, "Users")

If (ds.Tables(0).Rows.Count > 0) Then

Return True

Else

Return False

End If

Catch ep As SqlException

MsgBox("连接数据库出错")

Catch pp As Exception

MsgBox("Oh,发生了不可预料的事情在你身边,你死定了。退出吧。")

End Try

End Function

#Region " 组件设计器生成的代码 "

Public Sub New()Sub New(ByVal Container As System.ComponentModel.IContainer)

MyClass.New()

'Windows.Forms 类撰写设计器支持所必需的

Container.Add(Me)

End Sub

Public Sub New()Sub New()

MyBase.New()

'该调用是组件设计器所必需的。

InitializeComponent()

'在 InitializeComponent() 调用之后添加任何初始化

End Sub

'组件重写 dispose 以清理组件列表。

Protected Overloads Overrides Sub Dispose()Sub Dispose(ByVal disposing As Boolean)

If disposing Then

If Not (components Is Nothing) Then

components.Dispose()

End If

End If

MyBase.Dispose(disposing)

End Sub

'组件设计器所必需的

Private components As System.ComponentModel.IContainer

'注意: 以下过程是组件设计器所必需的

'可以使用组件设计器修改此过程。

'不要使用代码编辑器修改它。

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()Sub InitializeComponent()

components = New System.ComponentModel.Container

End Sub

#End Region

End Class

简介:组件其实是一段可以重用的代码,通过遵循IComponent接口的标准来实现一个组件,所以有组件都是派生于Component类,由Component类来实现IComponent接口。在组件中应正确使用函数的访问级别来控制外部对其的访问限制。

只要有足够的权限就可以将组件放到自己的程序中而不用担心组件会产生多大的错误,因为组件已经经过测试的。比如说可以把一段登录的程序做成一个组件,或者把经常使用到的一些功能也做成组件,这样就可以减少开发中的错误,也可以缩短开发时间。组件之间也可以互相套用,如一个组件引用另一个组件,都是没问题,但要先在Add Reference中添加对组件的引用,在.NET中是通过把组件放在程序集中来实现的,程序集中存放着这些组件所依赖的文件信息和所在路径,因此CLR就可以通过这些信息来确定组件所需要的其他程序集的位置。

( 另外在组件设计过程中应好好利用接口来设计组件)

在VS中创建组件:选建一个Project,再从模板中选Class Library,OK。接着再从Project菜单中Add Component,到些为止,组件的一个框架就呈现在眼前,平台自动继承了Component类和构造函数。可以删除原先创建类库时自动生成的Class1,看应用的需要。接着就可以在组件类里写要实现的功能,最后从Build(生成)菜单中选择Build Solution(生成解决方案)来生成组件。如果生成成功的话,到应用程序的BIN目录下会看到一个DLL文件。

引用组件:只要在Solution Explorer窗口中,添加对DLL的Reference就可以了。

Imports loginValidator

Imports System.Data

Imports System.Data.SqlClient

Public Class loginFormClass loginForm

Inherits System.Windows.Forms.Form

#Region " Windows 窗体设计器生成的代码 "

Public Sub New()Sub New()

MyBase.New()

'该调用是 Windows 窗体设计器所必需的。

InitializeComponent()

'在 InitializeComponent() 调用之后添加任何初始化

End Sub

'窗体重写 dispose 以清理组件列表。

Protected Overloads Overrides Sub Dispose()Sub Dispose(ByVal disposing As Boolean)

If disposing Then

If Not (components Is Nothing) Then

components.Dispose()

End If

End If

MyBase.Dispose(disposing)

End Sub

'Windows 窗体设计器所必需的

Private components As System.ComponentModel.IContainer

'注意: 以下过程是 Windows 窗体设计器所必需的

'可以使用 Windows 窗体设计器修改此过程。

'不要使用代码编辑器修改它。

Friend WithEvents lblUserPwd As System.Windows.Forms.Label

Friend WithEvents lblUserName As System.Windows.Forms.Label

Friend WithEvents txtUserName As System.Windows.Forms.TextBox

Friend WithEvents txtUserPwd As System.Windows.Forms.TextBox

Friend WithEvents btnSubmit As System.Windows.Forms.Button

Friend WithEvents btnExit As System.Windows.Forms.Button

Friend WithEvents Label1 As System.Windows.Forms.Label

Friend WithEvents Label2 As System.Windows.Forms.Label

Friend WithEvents btnCancel As System.Windows.Forms.Button

Friend WithEvents Label3 As System.Windows.Forms.Label

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()Sub InitializeComponent()

Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(loginForm))

Me.lblUserPwd = New System.Windows.Forms.Label

Me.lblUserName = New System.Windows.Forms.Label

Me.txtUserName = New System.Windows.Forms.TextBox

Me.txtUserPwd = New System.Windows.Forms.TextBox

Me.btnSubmit = New System.Windows.Forms.Button

Me.btnExit = New System.Windows.Forms.Button

Me.Label1 = New System.Windows.Forms.Label

Me.Label2 = New System.Windows.Forms.Label

Me.btnCancel = New System.Windows.Forms.Button

Me.Label3 = New System.Windows.Forms.Label

Me.SuspendLayout()

'

'lblUserPwd

'

Me.lblUserPwd.Location = New System.Drawing.Point(46, 176)

Me.lblUserPwd.Name = "lblUserPwd"

Me.lblUserPwd.Size = New System.Drawing.Size(52, 23)

Me.lblUserPwd.TabIndex = 0

Me.lblUserPwd.Text = "密码:"

Me.lblUserPwd.TextAlign = System.Drawing.ContentAlignment.MiddleCenter

'

'lblUserName

'

Me.lblUserName.Location = New System.Drawing.Point(46, 128)

Me.lblUserName.Name = "lblUserName"

Me.lblUserName.Size = New System.Drawing.Size(52, 23)

Me.lblUserName.TabIndex = 1

Me.lblUserName.Text = "帐号:"

Me.lblUserName.TextAlign = System.Drawing.ContentAlignment.MiddleCenter

'

'txtUserName

'

Me.txtUserName.BackColor = System.Drawing.SystemColors.Info

Me.txtUserName.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle

Me.txtUserName.Location = New System.Drawing.Point(110, 128)

Me.txtUserName.Name = "txtUserName"

Me.txtUserName.Size = New System.Drawing.Size(151, 21)

Me.txtUserName.TabIndex = 3

Me.txtUserName.Text = ""

'

'txtUserPwd

'

Me.txtUserPwd.BackColor = System.Drawing.SystemColors.Info

Me.txtUserPwd.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle

Me.txtUserPwd.Location = New System.Drawing.Point(110, 176)

Me.txtUserPwd.Name = "txtUserPwd"

Me.txtUserPwd.PasswordChar = Microsoft.VisualBasic.ChrW(42)

Me.txtUserPwd.Size = New System.Drawing.Size(151, 21)

Me.txtUserPwd.TabIndex = 4

Me.txtUserPwd.Text = ""

'

'btnSubmit

'

Me.btnSubmit.BackColor = System.Drawing.SystemColors.ActiveBorder

Me.btnSubmit.Cursor = System.Windows.Forms.Cursors.Hand

Me.btnSubmit.ForeColor = System.Drawing.SystemColors.InfoText

Me.btnSubmit.Location = New System.Drawing.Point(56, 216)

Me.btnSubmit.Name = "btnSubmit"

Me.btnSubmit.TabIndex = 5

Me.btnSubmit.Text = "登录"

'

'btnExit

'

Me.btnExit.BackColor = System.Drawing.SystemColors.ActiveBorder

Me.btnExit.Cursor = System.Windows.Forms.Cursors.Hand

Me.btnExit.Location = New System.Drawing.Point(141, 216)

Me.btnExit.Name = "btnExit"

Me.btnExit.TabIndex = 6

Me.btnExit.Text = "退出"

'

'Label1

'

Me.Label1.Font = New System.Drawing.Font("Impact", 17.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(134, Byte))

Me.Label1.Location = New System.Drawing.Point(38, 64)

Me.Label1.Name = "Label1"

Me.Label1.Size = New System.Drawing.Size(256, 32)

Me.Label1.TabIndex = 6

Me.Label1.Text = "TEST"

'

'Label2

'

Me.Label2.BackColor = System.Drawing.SystemColors.ControlText

Me.Label2.ForeColor = System.Drawing.SystemColors.HighlightText

Me.Label2.Location = New System.Drawing.Point(0, 0)

Me.Label2.Name = "Label2"

Me.Label2.Size = New System.Drawing.Size(320, 24)

Me.Label2.TabIndex = 7

Me.Label2.Text = "系统登录"

Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter

'

'btnCancel

'

Me.btnCancel.BackColor = System.Drawing.SystemColors.ActiveBorder

Me.btnCancel.Cursor = System.Windows.Forms.Cursors.Hand

Me.btnCancel.Location = New System.Drawing.Point(225, 215)

Me.btnCancel.Name = "btnCancel"

Me.btnCancel.TabIndex = 10

Me.btnCancel.Text = "取消"

'

'Label3

'

Me.Label3.ForeColor = System.Drawing.Color.Red

Me.Label3.Location = New System.Drawing.Point(163, 262)

Me.Label3.Name = "Label3"

Me.Label3.Size = New System.Drawing.Size(149, 16)

Me.Label3.TabIndex = 11

Me.Label3.Text = "为保证系统安全,请先登录"

'

'loginForm

'

Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)

Me.BackColor = System.Drawing.SystemColors.ActiveBorder

Me.ClientSize = New System.Drawing.Size(319, 284)

Me.Controls.Add(Me.Label3)

Me.Controls.Add(Me.btnCancel)

Me.Controls.Add(Me.Label2)

Me.Controls.Add(Me.Label1)

Me.Controls.Add(Me.btnExit)

Me.Controls.Add(Me.txtUserPwd)

Me.Controls.Add(Me.txtUserName)

Me.Controls.Add(Me.btnSubmit)

Me.Controls.Add(Me.lblUserName)

Me.Controls.Add(Me.lblUserPwd)

Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None

Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)

Me.MaximizeBox = False

Me.MinimizeBox = False

Me.Name = "loginForm"

Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide

Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen

Me.Tag = "登录"

Me.Text = "TEST--系统登录"

Me.ResumeLayout(False)

End Sub

#End Region

Private Sub loginForm_Load()Sub loginForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

txtUserName.Focus()

' btnCancel.Visible = False

End Sub

Private Sub btnExit_Click()Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click

Application.Exit()

End Sub

Private Sub btnSubmit_Click()Sub btnSubmit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSubmit.Click

'调用loginValidator组件

Dim validator As New Validator

validator.vUsername = txtUserName.Text.Trim

validator.vUserpwd = txtUserPwd.Text.Trim

If (validator.validate() = True) Then

Me.Close()

Else

MessageBox.Show("帐号或密码错误,请重试!", "验证错误", MessageBoxButtons.OK, MessageBoxIcon.Warning)

End If

End Sub

Private Sub btnCancel_Click()Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Me.Dispose()

End Sub

Private Sub btnCancel_Click_1()Sub btnCancel_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click

Me.Close()

End Sub

End Class

关于在.NET中使用COM组件:.NET可以向后兼容,并支持了COM和ActiveX对象等早期版本的应用程序。在.NET中使用COM等很有趣,.NET创建一个包将它们包装起来,而它们之间的交互就是通过这个包装来进行的,这个包就叫做运行时可呼叫包装(RCW)。可以直接使用COM,也可以先转换成.NET程序集后再使用。

1、直接使用COM组件是通过Add Reference来实现的,这种方法通过RCW来包装。缺点:无法放到 GAC中,不能重用。

2、通过转换成.NET程序集来使用,是通过利用 tlbimp 命令行工具来实现的,语法:

tlbimp COMName.dll /out:Comp.dll /namespace:myNS /asmVersion: myVersion /reference:refname

第一个为COM的名称,第二个为要生成的.NET组件名称,第三个为要生成的名称空间,第四个为 版本号,第四个指定引用的文件名。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有